System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c5d01d4d94072d9c8cc0d8e814698cd594010c2e:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20 2a 20 52  ft.com). * . * R
00b0: 65 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70  eleased to the p
00c0: 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73  ublic domain, us
00d0: 65 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69  e at your own ri
00e0: 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  sk!. ***********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
0120: 6e 61 6d 65 73 70 61 63 65 20 53 51 4c 69 74 65  namespace SQLite
0130: 2e 44 65 73 69 67 6e 65 72 2e 44 65 73 69 67 6e  .Designer.Design
0140: 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  .{.  using Syste
0150: 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  m;.  using Syste
0160: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
0170: 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20 53  neric;.  using S
0180: 79 73 74 65 6d 2e 54 65 78 74 3b 0a 20 20 75 73  ystem.Text;.  us
0190: 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61  ing System.Globa
01a0: 6c 69 7a 61 74 69 6f 6e 3b 0a 0a 20 20 69 6e 74  lization;..  int
01b0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61  ernal static cla
01c0: 73 73 20 53 69 6d 70 6c 65 54 6f 6b 65 6e 69 7a  ss SimpleTokeniz
01d0: 65 72 0a 20 20 7b 0a 20 20 20 20 70 75 62 6c 69  er.  {.    publi
01e0: 63 20 73 74 72 75 63 74 20 53 74 72 69 6e 67 50  c struct StringP
01f0: 61 72 74 73 0a 20 20 20 20 7b 0a 20 20 20 20 20  arts.    {.     
0200: 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e 67   internal string
0210: 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 69 6e   value;.      in
0220: 74 65 72 6e 61 6c 20 69 6e 74 20 70 6f 73 69 74  ternal int posit
0230: 69 6f 6e 3b 0a 20 20 20 20 20 20 69 6e 74 65 72  ion;.      inter
0240: 6e 61 6c 20 73 74 72 69 6e 67 20 71 75 6f 74 65  nal string quote
0250: 3b 0a 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c  ;.      internal
0260: 20 62 6f 6f 6c 20 73 65 70 3b 0a 20 20 20 20 20   bool sep;.     
0270: 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20 64 65   internal int de
0280: 70 74 68 3b 0a 20 20 20 20 20 20 69 6e 74 65 72  pth;.      inter
0290: 6e 61 6c 20 73 74 72 69 6e 67 20 6b 65 79 77 6f  nal string keywo
02a0: 72 64 3b 0a 20 20 20 20 20 20 69 6e 74 65 72 6e  rd;.      intern
02b0: 61 6c 20 63 68 61 72 20 73 65 70 63 68 61 72 3b  al char sepchar;
02c0: 0a 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f  ..      public o
02d0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54  verride string T
02e0: 6f 53 74 72 69 6e 67 28 29 0a 20 20 20 20 20 20  oString().      
02f0: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
0300: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43   String.Format(C
0310: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
0320: 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 7b 30  iantCulture, "{0
0330: 7d 20 7b 31 7d 20 61 74 20 7b 32 7d 20 7b 33 7d  } {1} at {2} {3}
0340: 20 64 65 70 74 68 20 7b 34 7d 22 2c 20 76 61 6c   depth {4}", val
0350: 75 65 2c 20 71 75 6f 74 65 2c 20 70 6f 73 69 74  ue, quote, posit
0360: 69 6f 6e 2c 20 73 65 70 20 3d 3d 20 74 72 75 65  ion, sep == true
0370: 20 3f 20 22 28 73 65 70 29 22 20 3a 20 53 74 72   ? "(sep)" : Str
0380: 69 6e 67 2e 45 6d 70 74 79 2c 20 64 65 70 74 68  ing.Empty, depth
0390: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
03a0: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61  ..    public sta
03b0: 74 69 63 20 53 74 72 69 6e 67 50 61 72 74 73 5b  tic StringParts[
03c0: 5d 20 42 72 65 61 6b 53 74 72 69 6e 67 28 73 74  ] BreakString(st
03d0: 72 69 6e 67 20 73 6f 75 72 63 65 29 0a 20 20 20  ring source).   
03e0: 20 7b 0a 20 20 20 20 20 20 63 68 61 72 5b 5d 20   {.      char[] 
03f0: 6f 70 65 6e 73 20 3d 20 6e 65 77 20 63 68 61 72  opens = new char
0400: 5b 5d 20 7b 20 27 5c 22 27 2c 20 27 5b 27 2c 20  [] { '\"', '[', 
0410: 27 5c 27 27 2c 20 27 28 27 2c 20 27 29 27 2c 20  '\'', '(', ')', 
0420: 27 2c 27 2c 20 27 20 27 2c 20 27 3b 27 2c 20 27  ',', ' ', ';', '
0430: 5c 72 27 2c 20 27 5c 6e 27 2c 20 27 5c 74 27 20  \r', '\n', '\t' 
0440: 7d 3b 0a 20 20 20 20 20 20 63 68 61 72 5b 5d 20  };.      char[] 
0450: 6f 70 65 6e 73 32 20 3d 20 6e 65 77 20 63 68 61  opens2 = new cha
0460: 72 5b 5d 20 7b 20 27 5c 22 27 2c 20 27 5b 27 2c  r[] { '\"', '[',
0470: 20 27 5c 27 27 2c 20 27 28 27 2c 20 27 29 27 2c   '\'', '(', ')',
0480: 20 27 2c 27 2c 20 27 20 27 2c 20 27 3b 27 2c 20   ',', ' ', ';', 
0490: 27 5c 72 27 2c 20 27 5c 6e 27 2c 20 27 5c 74 27  '\r', '\n', '\t'
04a0: 2c 20 27 2e 27 20 7d 3b 0a 20 20 20 20 20 20 63  , '.' };.      c
04b0: 68 61 72 5b 5d 20 63 6c 6f 73 65 73 20 3d 20 6e  har[] closes = n
04c0: 65 77 20 63 68 61 72 5b 5d 20 7b 20 27 5c 22 27  ew char[] { '\"'
04d0: 2c 20 27 5d 27 2c 20 27 5c 27 27 2c 20 7d 3b 0a  , ']', '\'', };.
04e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 65 70        string sep
04f0: 20 3d 20 22 3b 2c 22 3b 0a 20 20 20 20 20 20 73   = ";,";.      s
0500: 74 72 69 6e 67 20 6f 70 65 6e 73 73 74 72 20 3d  tring opensstr =
0510: 20 22 5c 22 5b 27 22 3b 0a 0a 20 20 20 20 20 20   "\"['";..      
0520: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
0530: 6c 4f 72 45 6d 70 74 79 28 73 6f 75 72 63 65 29  lOrEmpty(source)
0540: 20 3d 3d 20 74 72 75 65 29 20 72 65 74 75 72 6e   == true) return
0550: 20 6e 65 77 20 53 74 72 69 6e 67 50 61 72 74 73   new StringParts
0560: 5b 30 5d 3b 0a 0a 20 20 20 20 20 20 69 6e 74 20  [0];..      int 
0570: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 74  n = 0;.      int
0580: 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 64 65   x;.      int de
0590: 70 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 4c  pth = 0;.      L
05a0: 69 73 74 3c 53 74 72 69 6e 67 50 61 72 74 73 3e  ist<StringParts>
05b0: 20 6c 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 53   ls = new List<S
05c0: 74 72 69 6e 67 50 61 72 74 73 3e 28 29 3b 0a 20  tringParts>();. 
05d0: 20 20 20 20 20 69 6e 74 20 73 74 61 72 74 61 74       int startat
05e0: 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 77 68 69   = 0;..      whi
05f0: 6c 65 20 28 73 6f 75 72 63 65 2e 4c 65 6e 67 74  le (source.Lengt
0600: 68 20 3e 20 30 29 0a 20 20 20 20 20 20 7b 0a 20  h > 0).      {. 
0610: 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
0620: 65 2e 4c 65 6e 67 74 68 20 3e 20 31 20 26 26 20  e.Length > 1 && 
0630: 73 6f 75 72 63 65 5b 30 5d 20 3d 3d 20 27 2d 27  source[0] == '-'
0640: 20 26 26 20 73 6f 75 72 63 65 5b 31 5d 20 3d 3d   && source[1] ==
0650: 20 27 2d 27 29 0a 20 20 20 20 20 20 20 20 7b 0a   '-').        {.
0660: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
0670: 50 61 72 74 73 20 74 6f 6b 20 3d 20 6e 65 77 20  Parts tok = new 
0680: 53 74 72 69 6e 67 50 61 72 74 73 28 29 3b 0a 20  StringParts();. 
0690: 20 20 20 20 20 20 20 20 20 74 6f 6b 2e 70 6f 73           tok.pos
06a0: 69 74 69 6f 6e 20 3d 20 73 74 61 72 74 61 74 3b  ition = startat;
06b0: 0a 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 73  .          x = s
06c0: 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 28 27 5c  ource.IndexOf('\
06d0: 6e 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  n');.          i
06e0: 66 20 28 78 20 3d 3d 20 2d 31 29 20 74 6f 6b 2e  f (x == -1) tok.
06f0: 76 61 6c 75 65 20 3d 20 73 6f 75 72 63 65 3b 0a  value = source;.
0700: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 74            else t
0710: 6f 6b 2e 76 61 6c 75 65 20 3d 20 73 6f 75 72 63  ok.value = sourc
0720: 65 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 78  e.Substring(0, x
0730: 20 2b 20 31 29 3b 0a 0a 20 20 20 20 20 20 20 20   + 1);..        
0740: 20 20 2f 2f 6c 73 2e 41 64 64 28 74 6f 6b 29 3b    //ls.Add(tok);
0750: 0a 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 63  .          sourc
0760: 65 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73 74  e = source.Subst
0770: 72 69 6e 67 28 74 6f 6b 2e 76 61 6c 75 65 2e 4c  ring(tok.value.L
0780: 65 6e 67 74 68 29 3b 0a 20 20 20 20 20 20 20 20  ength);.        
0790: 20 20 73 74 61 72 74 61 74 20 2b 3d 20 74 6f 6b    startat += tok
07a0: 2e 76 61 6c 75 65 2e 4c 65 6e 67 74 68 3b 0a 20  .value.Length;. 
07b0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
07c0: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
07d0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 73 6f       else if (so
07e0: 75 72 63 65 2e 4c 65 6e 67 74 68 20 3e 20 31 20  urce.Length > 1 
07f0: 26 26 20 73 6f 75 72 63 65 5b 30 5d 20 3d 3d 20  && source[0] == 
0800: 27 2f 27 20 26 26 20 73 6f 75 72 63 65 5b 31 5d  '/' && source[1]
0810: 20 3d 3d 20 27 2a 27 29 0a 20 20 20 20 20 20 20   == '*').       
0820: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 53 74 72   {.          Str
0830: 69 6e 67 50 61 72 74 73 20 74 6f 6b 20 3d 20 6e  ingParts tok = n
0840: 65 77 20 53 74 72 69 6e 67 50 61 72 74 73 28 29  ew StringParts()
0850: 3b 0a 20 20 20 20 20 20 20 20 20 20 74 6f 6b 2e  ;.          tok.
0860: 70 6f 73 69 74 69 6f 6e 20 3d 20 73 74 61 72 74  position = start
0870: 61 74 3b 0a 20 20 20 20 20 20 20 20 20 20 78 20  at;.          x 
0880: 3d 20 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66  = source.IndexOf
0890: 28 22 2a 2f 22 2c 20 53 74 72 69 6e 67 43 6f 6d  ("*/", StringCom
08a0: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
08b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ;.          if (
08c0: 78 20 3d 3d 20 2d 31 29 20 74 6f 6b 2e 76 61 6c  x == -1) tok.val
08d0: 75 65 20 3d 20 73 6f 75 72 63 65 3b 0a 20 20 20  ue = source;.   
08e0: 20 20 20 20 20 20 20 65 6c 73 65 20 74 6f 6b 2e         else tok.
08f0: 76 61 6c 75 65 20 3d 20 73 6f 75 72 63 65 2e 53  value = source.S
0900: 75 62 73 74 72 69 6e 67 28 30 2c 20 78 20 2b 20  ubstring(0, x + 
0910: 32 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 2f  2);..          /
0920: 2f 6c 73 2e 41 64 64 28 74 6f 6b 29 3b 0a 20 20  /ls.Add(tok);.  
0930: 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 20 3d          source =
0940: 20 73 6f 75 72 63 65 2e 53 75 62 73 74 72 69 6e   source.Substrin
0950: 67 28 74 6f 6b 2e 76 61 6c 75 65 2e 4c 65 6e 67  g(tok.value.Leng
0960: 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  th);.          s
0970: 74 61 72 74 61 74 20 2b 3d 20 74 6f 6b 2e 76 61  tartat += tok.va
0980: 6c 75 65 2e 4c 65 6e 67 74 68 3b 0a 20 20 20 20  lue.Length;.    
0990: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
09a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
09b0: 20 20 69 6e 74 20 63 6f 6d 6d 65 6e 74 20 3d 20    int comment = 
09c0: 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 28 22  source.IndexOf("
09d0: 2d 2d 22 2c 20 6e 2c 20 53 74 72 69 6e 67 43 6f  --", n, StringCo
09e0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
09f0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 63  );.        if (c
0a00: 6f 6d 6d 65 6e 74 20 3d 3d 20 2d 31 29 20 63 6f  omment == -1) co
0a10: 6d 6d 65 6e 74 20 3d 20 73 6f 75 72 63 65 2e 49  mment = source.I
0a20: 6e 64 65 78 4f 66 28 22 2f 2a 22 2c 20 6e 2c 20  ndexOf("/*", n, 
0a30: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
0a40: 2e 4f 72 64 69 6e 61 6c 29 3b 0a 0a 20 20 20 20  .Ordinal);..    
0a50: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 0a 20      if (n > 0). 
0a60: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 73 6f 75           n = sou
0a70: 72 63 65 2e 49 6e 64 65 78 4f 66 41 6e 79 28 6f  rce.IndexOfAny(o
0a80: 70 65 6e 73 32 2c 20 6e 29 3b 0a 20 20 20 20 20  pens2, n);.     
0a90: 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20     else.        
0aa0: 20 20 6e 20 3d 20 73 6f 75 72 63 65 2e 49 6e 64    n = source.Ind
0ab0: 65 78 4f 66 41 6e 79 28 6f 70 65 6e 73 2c 20 6e  exOfAny(opens, n
0ac0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
0ad0: 63 6f 6d 6d 65 6e 74 20 3e 20 2d 31 20 26 26 20  comment > -1 && 
0ae0: 28 6e 20 3d 3d 20 2d 31 20 7c 7c 20 63 6f 6d 6d  (n == -1 || comm
0af0: 65 6e 74 20 3c 20 6e 29 29 0a 20 20 20 20 20 20  ent < n)).      
0b00: 20 20 20 20 6e 20 3d 20 63 6f 6d 6d 65 6e 74 3b      n = comment;
0b10: 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
0b20: 3d 3d 20 2d 31 29 20 62 72 65 61 6b 3b 0a 0a 20  == -1) break;.. 
0b30: 20 20 20 20 20 20 20 78 20 3d 20 6f 70 65 6e 73         x = opens
0b40: 73 74 72 2e 49 6e 64 65 78 4f 66 28 73 6f 75 72  str.IndexOf(sour
0b50: 63 65 5b 6e 5d 29 3b 0a 20 20 20 20 20 20 20 20  ce[n]);.        
0b60: 69 66 20 28 78 20 21 3d 20 2d 31 29 0a 20 20 20  if (x != -1).   
0b70: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0b80: 20 77 68 69 6c 65 20 28 6e 20 21 3d 20 2d 31 29   while (n != -1)
0b90: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
0ba0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 73 6f 75           n = sou
0bb0: 72 63 65 2e 49 6e 64 65 78 4f 66 28 63 6c 6f 73  rce.IndexOf(clos
0bc0: 65 73 5b 78 5d 2c 20 6e 20 2b 20 31 29 3b 0a 20  es[x], n + 1);. 
0bd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
0be0: 20 3d 3d 20 2d 31 29 0a 20 20 20 20 20 20 20 20   == -1).        
0bf0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
0c00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
0c10: 3c 20 73 6f 75 72 63 65 2e 4c 65 6e 67 74 68 20  < source.Length 
0c20: 2d 20 31 20 26 26 20 73 6f 75 72 63 65 5b 6e 20  - 1 && source[n 
0c30: 2b 20 31 5d 20 3d 3d 20 73 6f 75 72 63 65 5b 6e  + 1] == source[n
0c40: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  ]).            {
0c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
0c60: 74 61 72 74 61 74 2b 2b 3b 0a 20 20 20 20 20 20  tartat++;.      
0c70: 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 20 3d          source =
0c80: 20 73 6f 75 72 63 65 2e 52 65 6d 6f 76 65 28 6e   source.Remove(n
0c90: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
0ca0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
0cb0: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 20  else.           
0cc0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
0cd0: 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20   n++;.          
0ce0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
0cf0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0d00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
0d10: 66 20 28 6e 20 3d 3d 20 2d 31 29 0a 20 20 20 20  f (n == -1).    
0d20: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
0d30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0d40: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 7b 0a   else.        {.
0d50: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
0d60: 50 61 72 74 73 20 74 6f 6b 20 3d 20 6e 65 77 20  Parts tok = new 
0d70: 53 74 72 69 6e 67 50 61 72 74 73 28 29 3b 0a 0a  StringParts();..
0d80: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 79 20            int y 
0d90: 3d 20 73 65 70 2e 49 6e 64 65 78 4f 66 28 73 6f  = sep.IndexOf(so
0da0: 75 72 63 65 5b 6e 5d 29 3b 0a 20 20 20 20 20 20  urce[n]);.      
0db0: 20 20 20 20 74 6f 6b 2e 73 65 70 20 3d 20 28 79      tok.sep = (y
0dc0: 20 21 3d 20 2d 31 29 3b 0a 20 20 20 20 20 20 20   != -1);.       
0dd0: 20 20 20 74 6f 6b 2e 73 65 70 63 68 61 72 20 3d     tok.sepchar =
0de0: 20 28 79 20 21 3d 20 2d 31 29 20 3f 20 73 65 70   (y != -1) ? sep
0df0: 5b 79 5d 20 3a 20 27 5c 30 27 3b 0a 0a 20 20 20  [y] : '\0';..   
0e00: 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
0e10: 65 5b 6e 5d 20 3d 3d 20 27 28 27 29 20 64 65 70  e[n] == '(') dep
0e20: 74 68 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  th++;.          
0e30: 74 6f 6b 2e 64 65 70 74 68 20 3d 20 64 65 70 74  tok.depth = dept
0e40: 68 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  h;.          if 
0e50: 28 73 6f 75 72 63 65 5b 6e 5d 20 3d 3d 20 27 29  (source[n] == ')
0e60: 27 29 20 64 65 70 74 68 2d 2d 3b 0a 0a 20 20 20  ') depth--;..   
0e70: 20 20 20 20 20 20 20 74 6f 6b 2e 76 61 6c 75 65         tok.value
0e80: 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73 74 72   = source.Substr
0e90: 69 6e 67 28 30 2c 20 6e 29 3b 0a 20 20 20 20 20  ing(0, n);.     
0ea0: 20 20 20 20 20 74 6f 6b 2e 70 6f 73 69 74 69 6f       tok.positio
0eb0: 6e 20 3d 20 73 74 61 72 74 61 74 3b 0a 0a 20 20  n = startat;..  
0ec0: 20 20 20 20 20 20 20 20 69 66 20 28 74 6f 6b 2e          if (tok.
0ed0: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 20 3e 20 31  value.Length > 1
0ee0: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ).          {.  
0ef0: 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 6f 70            x = op
0f00: 65 6e 73 73 74 72 2e 49 6e 64 65 78 4f 66 28 74  ensstr.IndexOf(t
0f10: 6f 6b 2e 76 61 6c 75 65 5b 30 5d 29 3b 0a 20 20  ok.value[0]);.  
0f20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 78 20            if (x 
0f30: 21 3d 20 2d 31 20 26 26 20 74 6f 6b 2e 76 61 6c  != -1 && tok.val
0f40: 75 65 5b 74 6f 6b 2e 76 61 6c 75 65 2e 4c 65 6e  ue[tok.value.Len
0f50: 67 74 68 20 2d 20 31 5d 20 3d 3d 20 63 6c 6f 73  gth - 1] == clos
0f60: 65 73 5b 78 5d 29 0a 20 20 20 20 20 20 20 20 20  es[x]).         
0f70: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
0f80: 20 20 20 74 6f 6b 2e 71 75 6f 74 65 20 3d 20 53     tok.quote = S
0f90: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
0fa0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
0fb0: 6e 74 43 75 6c 74 75 72 65 2c 20 22 7b 30 7d 7b  ntCulture, "{0}{
0fc0: 31 7d 22 2c 20 74 6f 6b 2e 76 61 6c 75 65 5b 30  1}", tok.value[0
0fd0: 5d 2c 20 74 6f 6b 2e 76 61 6c 75 65 5b 74 6f 6b  ], tok.value[tok
0fe0: 2e 76 61 6c 75 65 2e 4c 65 6e 67 74 68 20 2d 20  .value.Length - 
0ff0: 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  1]);.           
1000: 20 20 20 74 6f 6b 2e 76 61 6c 75 65 20 3d 20 74     tok.value = t
1010: 6f 6b 2e 76 61 6c 75 65 2e 53 75 62 73 74 72 69  ok.value.Substri
1020: 6e 67 28 31 2c 20 74 6f 6b 2e 76 61 6c 75 65 2e  ng(1, tok.value.
1030: 4c 65 6e 67 74 68 20 2d 20 32 29 3b 0a 20 20 20  Length - 2);.   
1040: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1050: 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20         else.    
1060: 20 20 20 20 20 20 20 20 20 20 74 6f 6b 2e 6b 65            tok.ke
1070: 79 77 6f 72 64 20 3d 20 74 6f 6b 2e 76 61 6c 75  yword = tok.valu
1080: 65 2e 54 6f 55 70 70 65 72 49 6e 76 61 72 69 61  e.ToUpperInvaria
1090: 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  nt();.          
10a0: 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  }..          if 
10b0: 28 73 6f 75 72 63 65 2e 4c 65 6e 67 74 68 20 2d  (source.Length -
10c0: 20 6e 20 3e 20 31 20 26 26 20 28 28 73 6f 75 72   n > 1 && ((sour
10d0: 63 65 5b 6e 5d 20 3d 3d 20 27 2d 27 20 26 26 20  ce[n] == '-' && 
10e0: 73 6f 75 72 63 65 5b 6e 20 2b 20 31 5d 20 3d 3d  source[n + 1] ==
10f0: 20 27 2d 27 29 20 7c 7c 20 73 6f 75 72 63 65 5b   '-') || source[
1100: 6e 5d 20 3d 3d 20 27 2f 27 20 26 26 20 73 6f 75  n] == '/' && sou
1110: 72 63 65 5b 6e 20 2b 20 31 5d 20 3d 3d 20 27 2a  rce[n + 1] == '*
1120: 27 29 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ')).          {.
1130: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
1140: 74 61 74 20 2b 3d 20 6e 3b 0a 20 20 20 20 20 20  tat += n;.      
1150: 20 20 20 20 20 20 73 6f 75 72 63 65 20 3d 20 73        source = s
1160: 6f 75 72 63 65 2e 53 75 62 73 74 72 69 6e 67 28  ource.Substring(
1170: 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  n);.          }.
1180: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20            else. 
1190: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
11a0: 20 20 20 20 20 20 20 73 74 61 72 74 61 74 20 2b         startat +
11b0: 3d 20 28 6e 20 2b 20 31 29 3b 0a 20 20 20 20 20  = (n + 1);.     
11c0: 20 20 20 20 20 20 20 73 6f 75 72 63 65 20 3d 20         source = 
11d0: 73 6f 75 72 63 65 2e 53 75 62 73 74 72 69 6e 67  source.Substring
11e0: 28 6e 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20  (n + 1);.       
11f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
1200: 66 20 28 74 6f 6b 2e 76 61 6c 75 65 2e 4c 65 6e  f (tok.value.Len
1210: 67 74 68 20 3e 20 30 29 0a 20 20 20 20 20 20 20  gth > 0).       
1220: 20 20 20 20 20 6c 73 2e 41 64 64 28 74 6f 6b 29       ls.Add(tok)
1230: 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ;.          else
1240: 20 69 66 20 28 6c 73 2e 43 6f 75 6e 74 20 3e 20   if (ls.Count > 
1250: 30 20 26 26 20 74 6f 6b 2e 73 65 70 29 0a 20 20  0 && tok.sep).  
1260: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1270: 20 20 20 20 20 20 53 74 72 69 6e 67 50 61 72 74        StringPart
1280: 73 20 70 72 65 76 20 3d 20 6c 73 5b 6c 73 2e 43  s prev = ls[ls.C
1290: 6f 75 6e 74 20 2d 20 31 5d 3b 0a 20 20 20 20 20  ount - 1];.     
12a0: 20 20 20 20 20 20 20 6c 73 2e 52 65 6d 6f 76 65         ls.Remove
12b0: 41 74 28 6c 73 2e 43 6f 75 6e 74 20 2d 20 31 29  At(ls.Count - 1)
12c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ;.            pr
12d0: 65 76 2e 73 65 70 20 3d 20 74 6f 6b 2e 73 65 70  ev.sep = tok.sep
12e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ;.            pr
12f0: 65 76 2e 73 65 70 63 68 61 72 20 3d 20 74 6f 6b  ev.sepchar = tok
1300: 2e 73 65 70 63 68 61 72 3b 0a 20 20 20 20 20 20  .sepchar;.      
1310: 20 20 20 20 20 20 6c 73 2e 41 64 64 28 70 72 65        ls.Add(pre
1320: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
1330: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 30 3b            n = 0;
1340: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1350: 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 73 6f   }..      if (so
1360: 75 72 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29  urce.Length > 0)
1370: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
1380: 20 53 74 72 69 6e 67 50 61 72 74 73 20 74 6f 6b   StringParts tok
1390: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 50 61 72   = new StringPar
13a0: 74 73 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 74  ts();..        t
13b0: 6f 6b 2e 76 61 6c 75 65 20 3d 20 73 6f 75 72 63  ok.value = sourc
13c0: 65 2e 54 72 69 6d 28 29 3b 0a 20 20 20 20 20 20  e.Trim();.      
13d0: 20 20 74 6f 6b 2e 70 6f 73 69 74 69 6f 6e 20 3d    tok.position =
13e0: 20 73 74 61 72 74 61 74 3b 0a 0a 20 20 20 20 20   startat;..     
13f0: 20 20 20 69 66 20 28 74 6f 6b 2e 76 61 6c 75 65     if (tok.value
1400: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20  .Length > 1).   
1410: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1420: 20 78 20 3d 20 6f 70 65 6e 73 73 74 72 2e 49 6e   x = opensstr.In
1430: 64 65 78 4f 66 28 74 6f 6b 2e 76 61 6c 75 65 5b  dexOf(tok.value[
1440: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  0]);.          i
1450: 66 20 28 78 20 21 3d 20 2d 31 20 26 26 20 74 6f  f (x != -1 && to
1460: 6b 2e 76 61 6c 75 65 5b 74 6f 6b 2e 76 61 6c 75  k.value[tok.valu
1470: 65 2e 4c 65 6e 67 74 68 20 2d 20 31 5d 20 3d 3d  e.Length - 1] ==
1480: 20 63 6c 6f 73 65 73 5b 78 5d 29 0a 20 20 20 20   closes[x]).    
1490: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
14a0: 20 20 20 20 74 6f 6b 2e 71 75 6f 74 65 20 3d 20      tok.quote = 
14b0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
14c0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
14d0: 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 7b 30 7d  antCulture, "{0}
14e0: 7b 31 7d 22 2c 20 74 6f 6b 2e 76 61 6c 75 65 5b  {1}", tok.value[
14f0: 30 5d 2c 20 74 6f 6b 2e 76 61 6c 75 65 5b 74 6f  0], tok.value[to
1500: 6b 2e 76 61 6c 75 65 2e 4c 65 6e 67 74 68 20 2d  k.value.Length -
1510: 20 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20   1]);.          
1520: 20 20 74 6f 6b 2e 76 61 6c 75 65 20 3d 20 74 6f    tok.value = to
1530: 6b 2e 76 61 6c 75 65 2e 53 75 62 73 74 72 69 6e  k.value.Substrin
1540: 67 28 31 2c 20 74 6f 6b 2e 76 61 6c 75 65 2e 4c  g(1, tok.value.L
1550: 65 6e 67 74 68 20 2d 20 32 29 3b 0a 20 20 20 20  ength - 2);.    
1560: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1570: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20    else.         
1580: 20 20 20 74 6f 6b 2e 6b 65 79 77 6f 72 64 20 3d     tok.keyword =
1590: 20 74 6f 6b 2e 76 61 6c 75 65 2e 54 6f 55 70 70   tok.value.ToUpp
15a0: 65 72 49 6e 76 61 72 69 61 6e 74 28 29 3b 0a 20  erInvariant();. 
15b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
15c0: 20 69 66 20 28 74 6f 6b 2e 76 61 6c 75 65 2e 4c   if (tok.value.L
15d0: 65 6e 67 74 68 20 3e 20 30 29 20 6c 73 2e 41 64  ength > 0) ls.Ad
15e0: 64 28 74 6f 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  d(tok);.      }.
15f0: 0a 20 20 20 20 20 20 53 74 72 69 6e 67 50 61 72  .      StringPar
1600: 74 73 5b 5d 20 61 72 20 3d 20 6e 65 77 20 53 74  ts[] ar = new St
1610: 72 69 6e 67 50 61 72 74 73 5b 6c 73 2e 43 6f 75  ringParts[ls.Cou
1620: 6e 74 5d 3b 0a 20 20 20 20 20 20 6c 73 2e 43 6f  nt];.      ls.Co
1630: 70 79 54 6f 28 61 72 2c 20 30 29 3b 0a 0a 20 20  pyTo(ar, 0);..  
1640: 20 20 20 20 72 65 74 75 72 6e 20 61 72 3b 0a 20      return ar;. 
1650: 20 20 20 7d 0a 20 20 7d 0a 7d 0a                    }.  }.}.