Fossil

Hex Artifact Content
Login

Artifact b3807ccb28720dab540eef38058ede1792c3bc755d65ce4ee98f2f6de647517a:


0000: 2f 2a 0a 2a 2a 20 54 68 69 73 20 43 20 70 72 6f  /*.** This C pro
0010: 67 72 61 6d 20 67 65 6e 65 72 61 74 65 73 20 74  gram generates t
0020: 68 65 20 22 64 65 66 61 75 6c 74 5f 63 73 73 2e  he "default_css.
0030: 68 22 20 68 65 61 64 65 72 20 66 69 6c 65 20 66  h" header file f
0040: 72 6f 6d 0a 2a 2a 20 22 64 65 66 61 75 6c 74 5f  rom.** "default_
0050: 63 73 73 2e 74 78 74 22 20 73 6f 75 72 63 65 20  css.txt" source 
0060: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
0070: 64 65 66 61 75 6c 74 5f 63 73 73 2e 68 20 68 65  default_css.h he
0080: 61 64 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20  ader contains a 
0090: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
00a0: 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 69 74  structure.** wit
00b0: 68 20 6c 6f 74 73 20 6f 66 20 64 65 66 61 75 6c  h lots of defaul
00c0: 74 20 43 53 53 20 73 6e 69 70 70 65 74 73 2e 20  t CSS snippets. 
00d0: 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   This informatio
00e0: 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 2a 2a 20  n is used to.** 
00f0: 67 65 6e 65 72 61 74 65 20 74 68 65 20 2f 73 74  generate the /st
0100: 79 6c 65 2e 63 73 73 20 70 61 67 65 20 61 73 20  yle.css page as 
0110: 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 20  follows:.**.**  
0120: 20 20 28 31 29 20 52 65 61 64 20 74 68 65 20 72    (1) Read the r
0130: 65 70 6f 73 69 74 6f 72 79 2d 73 70 65 63 69 66  epository-specif
0140: 69 63 20 43 53 53 20 70 61 67 65 20 66 72 6f 6d  ic CSS page from
0150: 20 74 68 65 20 73 6b 69 6e 0a 2a 2a 20 20 20 20   the skin.**    
0160: 28 32 29 20 49 6e 69 74 69 61 6c 69 7a 65 20 74  (2) Initialize t
0170: 68 65 20 6f 75 74 70 75 74 20 74 6f 20 61 20 63  he output to a c
0180: 6f 70 79 20 6f 66 20 74 68 65 20 72 65 70 6f 2d  opy of the repo-
0190: 43 53 53 20 66 72 6f 6d 20 28 31 29 2e 0a 2a 2a  CSS from (1)..**
01a0: 20 20 20 20 28 33 29 20 46 6f 72 20 65 61 63 68      (3) For each
01b0: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 63 73   entry in the cs
01c0: 73 44 65 66 61 75 6c 74 4c 69 73 74 5b 5d 2c 20  sDefaultList[], 
01d0: 69 66 20 74 68 65 20 73 65 6c 65 63 74 6f 72 0a  if the selector.
01e0: 2a 2a 20 20 20 20 20 20 20 20 64 65 73 63 72 69  **        descri
01f0: 62 65 64 20 62 79 20 63 73 73 44 65 66 61 75 6c  bed by cssDefaul
0200: 74 4c 69 73 74 5b 69 5d 20 69 73 20 6e 6f 74 20  tList[i] is not 
0210: 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 2a 2a 20  found in the.** 
0220: 20 20 20 20 20 20 20 72 65 70 6f 2d 43 53 53 2c         repo-CSS,
0230: 20 74 68 65 6e 20 61 70 70 65 6e 64 20 69 74 20   then append it 
0240: 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 2a  to the output..*
0250: 2a 0a 2a 2a 20 54 68 65 20 69 6e 70 75 74 20 66  *.** The input f
0260: 69 6c 65 2c 20 22 64 65 66 61 75 6c 74 5f 63 73  ile, "default_cs
0270: 73 2e 74 78 74 22 2c 20 69 73 20 70 6c 61 69 6e  s.txt", is plain
0280: 20 74 65 78 74 20 77 69 74 68 20 6c 6f 74 73 20   text with lots 
0290: 6f 66 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 73 2e 20  of.** comments. 
02a0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 74   This routine st
02b0: 72 69 70 73 20 6f 75 74 20 74 68 65 20 63 6f 6d  rips out the com
02c0: 6d 65 6e 74 73 20 61 6e 64 20 62 72 65 61 6b 73  ments and breaks
02d0: 20 74 68 65 0a 2a 2a 20 74 65 78 74 20 75 70 20   the.** text up 
02e0: 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 20  into individual 
02f0: 63 73 73 44 65 66 61 75 6c 74 4c 69 73 74 5b 5d  cssDefaultList[]
0300: 20 65 6c 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a   elements..**.**
0310: 20 54 6f 20 72 75 6e 20 74 68 69 73 20 70 72 6f   To run this pro
0320: 67 72 61 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  gram:.**.**     
0330: 20 20 2e 2f 6d 6b 63 73 73 20 64 65 66 61 75 6c    ./mkcss defaul
0340: 74 5f 63 73 73 2e 74 78 74 20 64 65 66 61 75 6c  t_css.txt defaul
0350: 74 5f 63 73 73 2e 68 0a 2a 2a 0a 2a 2a 20 49 6e  t_css.h.**.** In
0360: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
0370: 65 72 65 20 61 72 65 20 74 77 6f 20 61 72 67 75  ere are two argu
0380: 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 69 72 73  ments.  The firs
0390: 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  t is the name of
03a0: 0a 2a 2a 20 74 68 65 20 69 6e 70 75 74 20 66 69  .** the input fi
03b0: 6c 65 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  le and the secon
03c0: 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  d is the name of
03d0: 20 74 68 65 20 6f 75 74 70 75 74 20 66 69 6c 65   the output file
03e0: 2e 0a 2a 2a 20 45 69 74 68 65 72 20 61 72 67 75  ..** Either argu
03f0: 6d 65 6e 74 20 63 61 6e 20 62 65 20 22 2d 22 20  ment can be "-" 
0400: 74 6f 20 69 6e 64 69 63 61 74 65 20 73 74 61 6e  to indicate stan
0410: 64 61 72 64 20 69 6e 70 75 74 20 6f 72 20 6f 75  dard input or ou
0420: 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 49 6e 70 75  tput..**.** Inpu
0430: 74 20 46 6f 72 6d 61 74 20 53 75 6d 6d 61 72 79  t Format Summary
0440: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 23 20 63 6f  :.**.**     # co
0450: 6d 6d 65 6e 74 0a 2a 2a 20 20 20 20 20 73 65 6c  mment.**     sel
0460: 65 63 74 6f 72 20 7b 0a 2a 2a 20 20 20 20 20 20  ector {.**      
0470: 20 72 75 6c 65 3b 20 23 20 63 6f 6d 6d 65 6e 74   rule; # comment
0480: 0a 2a 2a 20 20 20 20 20 7d 0a 2a 2a 20 20 20 20  .**     }.**    
0490: 20 23 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 0a 2a 2a   # comment.**.**
04a0: 20 49 74 20 77 6f 75 6c 64 20 62 65 20 6d 75 63   It would be muc
04b0: 68 20 65 61 73 69 65 72 20 74 6f 20 64 6f 20 74  h easier to do t
04c0: 68 69 73 20 75 73 69 6e 67 20 61 20 73 63 72 69  his using a scri
04d0: 70 74 2c 20 62 75 74 20 74 68 61 74 20 77 6f 75  pt, but that wou
04e0: 6c 64 0a 2a 2a 20 6d 61 6b 65 20 74 68 65 20 46  ld.** make the F
04f0: 6f 73 73 69 6c 20 73 6f 75 72 63 65 2d 63 6f 64  ossil source-cod
0500: 65 20 6c 65 73 73 20 63 72 6f 73 73 2d 70 6c 61  e less cross-pla
0510: 74 66 6f 72 6d 20 62 65 63 61 75 73 65 20 69 74  tform because it
0520: 20 77 6f 75 6c 64 20 74 68 65 6e 0a 2a 2a 20 72   would then.** r
0530: 65 71 75 69 72 65 20 74 68 61 74 20 74 68 65 20  equire that the 
0540: 73 63 72 69 70 74 20 65 6e 67 69 6e 65 20 62 65  script engine be
0550: 20 69 6e 73 74 61 6c 6c 65 64 20 6f 6e 20 74 68   installed on th
0560: 65 20 62 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d  e build platform
0570: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 73  ..*/.#include <s
0580: 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  tdio.h>.#include
0590: 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63   <string.h>.#inc
05a0: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a  lude <stdlib.h>.
05b0: 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e  #include <ctype.
05c0: 68 3e 0a 0a 73 74 61 74 69 63 20 46 49 4c 45 20  h>..static FILE 
05d0: 2a 6f 70 65 6e 5f 66 6f 72 5f 72 65 61 64 69 6e  *open_for_readin
05e0: 67 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  g(const char *zF
05f0: 69 6c 65 6e 61 6d 65 29 7b 0a 20 20 46 49 4c 45  ilename){.  FILE
0600: 20 2a 66 3b 0a 20 20 69 66 28 20 73 74 72 63 6d   *f;.  if( strcm
0610: 70 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 22 2d 22  p(zFilename, "-"
0620: 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 73 74  )==0 ) return st
0630: 64 69 6e 3b 0a 20 20 66 20 3d 20 66 6f 70 65 6e  din;.  f = fopen
0640: 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 22 72 22 29  (zFilename, "r")
0650: 3b 0a 20 20 69 66 28 20 66 3d 3d 30 20 29 7b 0a  ;.  if( f==0 ){.
0660: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
0670: 72 72 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  rr, "cannot open
0680: 20 5c 22 25 73 5c 22 20 66 6f 72 20 72 65 61 64   \"%s\" for read
0690: 69 6e 67 5c 6e 22 2c 20 7a 46 69 6c 65 6e 61 6d  ing\n", zFilenam
06a0: 65 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b  e);.    exit(1);
06b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 66 3b  .  }.  return f;
06c0: 0a 7d 0a 73 74 61 74 69 63 20 46 49 4c 45 20 2a  .}.static FILE *
06d0: 6f 70 65 6e 5f 66 6f 72 5f 77 72 69 74 69 6e 67  open_for_writing
06e0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69  (const char *zFi
06f0: 6c 65 6e 61 6d 65 29 7b 0a 20 20 46 49 4c 45 20  lename){.  FILE 
0700: 2a 66 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70  *f;.  if( strcmp
0710: 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 22 2d 22 29  (zFilename, "-")
0720: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 73 74 64  ==0 ) return std
0730: 6f 75 74 3b 0a 20 20 66 20 3d 20 66 6f 70 65 6e  out;.  f = fopen
0740: 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 22 77 22 29  (zFilename, "w")
0750: 3b 0a 20 20 69 66 28 20 66 3d 3d 30 20 29 7b 0a  ;.  if( f==0 ){.
0760: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
0770: 72 72 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  rr, "cannot open
0780: 20 5c 22 25 73 5c 22 20 66 6f 72 20 77 72 69 74   \"%s\" for writ
0790: 69 6e 67 5c 6e 22 2c 20 7a 46 69 6c 65 6e 61 6d  ing\n", zFilenam
07a0: 65 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b  e);.    exit(1);
07b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 66 3b  .  }.  return f;
07c0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63  .}.static void c
07d0: 6c 6f 73 65 5f 66 69 6c 65 28 46 49 4c 45 20 2a  lose_file(FILE *
07e0: 66 29 7b 0a 20 20 69 66 28 20 66 21 3d 73 74 64  f){.  if( f!=std
07f0: 69 6e 20 26 26 20 66 21 3d 73 74 64 6f 75 74 29  in && f!=stdout)
0800: 7b 0a 20 20 20 20 66 63 6c 6f 73 65 28 66 29 3b  {.    fclose(f);
0810: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
0820: 69 6e 74 20 61 20 73 74 72 69 6e 67 20 61 73 20  int a string as 
0830: 61 20 71 75 6f 74 65 64 20 43 2d 6c 61 6e 67 75  a quoted C-langu
0840: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73  age string..*/.s
0850: 74 61 74 69 63 20 76 6f 69 64 20 63 6c 61 6e 67  tatic void clang
0860: 5f 70 75 74 73 28 46 49 4c 45 20 2a 6f 75 74 2c  _puts(FILE *out,
0870: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b   const char *z){
0880: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 77 68 69 6c  .  int i;.  whil
0890: 65 28 20 7a 5b 30 5d 20 29 7b 0a 20 20 20 20 66  e( z[0] ){.    f
08a0: 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d 20 26 26 20  or(i=0; z[i] && 
08b0: 7a 5b 69 5d 21 3d 27 22 27 20 26 26 20 7a 5b 69  z[i]!='"' && z[i
08c0: 5d 21 3d 27 5c 5c 27 3b 20 69 2b 2b 29 7b 7d 0a  ]!='\\'; i++){}.
08d0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
08e0: 20 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 29 3b 0a   "%.*s", i, z);.
08f0: 20 20 20 20 69 66 28 20 7a 5b 69 5d 20 29 7b 0a      if( z[i] ){.
0900: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75        fprintf(ou
0910: 74 2c 20 22 5c 5c 25 63 22 2c 20 7a 5b 69 5d 29  t, "\\%c", z[i])
0920: 3b 0a 20 20 20 20 20 20 7a 20 2b 3d 20 69 2b 31  ;.      z += i+1
0930: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
0940: 20 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20 7d     z += i;.    }
0950: 0a 20 20 7d 0a 7d 0a 0a 69 6e 74 20 6d 61 69 6e  .  }.}..int main
0960: 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20  (int argc, char 
0970: 2a 61 72 67 76 5b 5d 29 7b 0a 20 20 46 49 4c 45  *argv[]){.  FILE
0980: 20 2a 69 6e 2c 20 2a 6f 75 74 3b 0a 20 20 69 6e   *in, *out;.  in
0990: 74 20 69 6e 52 75 6c 65 73 20 3d 20 30 3b 0a 20  t inRules = 0;. 
09a0: 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20 30 3b 0a   int nLine = 0;.
09b0: 20 20 69 6e 74 20 69 53 74 61 72 74 20 3d 20 30    int iStart = 0
09c0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
09d0: 7a 49 6e 46 69 6c 65 3b 0a 20 20 63 6f 6e 73 74  zInFile;.  const
09e0: 20 63 68 61 72 20 2a 7a 4f 75 74 46 69 6c 65 3b   char *zOutFile;
09f0: 0a 20 20 63 68 61 72 20 7a 5b 31 30 30 30 5d 3b  .  char z[1000];
0a00: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
0a10: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74  {.    fprintf(st
0a20: 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 25 73  derr, "Usage: %s
0a30: 20 49 4e 50 55 54 46 49 4c 45 20 4f 55 54 50 55   INPUTFILE OUTPU
0a40: 54 46 49 4c 45 5c 6e 22 2c 20 61 72 67 76 5b 30  TFILE\n", argv[0
0a50: 5d 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31  ]);.    return 1
0a60: 3b 0a 20 20 7d 0a 20 20 7a 49 6e 46 69 6c 65 20  ;.  }.  zInFile 
0a70: 3d 20 61 72 67 76 5b 31 5d 3b 0a 20 20 7a 4f 75  = argv[1];.  zOu
0a80: 74 46 69 6c 65 20 3d 20 61 72 67 76 5b 32 5d 3b  tFile = argv[2];
0a90: 0a 20 20 69 6e 20 3d 20 6f 70 65 6e 5f 66 6f 72  .  in = open_for
0aa0: 5f 72 65 61 64 69 6e 67 28 7a 49 6e 46 69 6c 65  _reading(zInFile
0ab0: 29 3b 0a 20 20 6f 75 74 20 3d 20 6f 70 65 6e 5f  );.  out = open_
0ac0: 66 6f 72 5f 77 72 69 74 69 6e 67 28 7a 4f 75 74  for_writing(zOut
0ad0: 46 69 6c 65 29 3b 0a 0a 20 20 66 70 72 69 6e 74  File);..  fprint
0ae0: 66 28 6f 75 74 2c 0a 20 20 20 20 20 22 2f 2a 20  f(out,.     "/* 
0af0: 44 4f 20 4e 4f 54 20 45 44 49 54 5c 6e 22 0a 20  DO NOT EDIT\n". 
0b00: 20 20 20 20 22 2a 2a 20 54 68 69 73 20 63 6f 64      "** This cod
0b10: 65 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 61  e is generated a
0b20: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 73 69  utomatically usi
0b30: 6e 67 20 27 6d 6b 63 73 73 2e 63 27 5c 6e 22 0a  ng 'mkcss.c'\n".
0b40: 20 20 20 20 20 22 2a 2f 5c 6e 22 0a 20 20 20 20       "*/\n".    
0b50: 20 22 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73   "const struct s
0b60: 74 72 63 74 43 73 73 44 65 66 61 75 6c 74 73 20  trctCssDefaults 
0b70: 7b 5c 6e 22 0a 20 20 20 20 20 22 20 20 63 6f 6e  {\n".     "  con
0b80: 73 74 20 63 68 61 72 20 2a 65 6c 65 6d 65 6e 74  st char *element
0b90: 43 6c 61 73 73 3b 20 20 2f 2a 20 4e 61 6d 65 20  Class;  /* Name 
0ba0: 6f 66 20 65 6c 65 6d 65 6e 74 20 6e 65 65 64 65  of element neede
0bb0: 64 20 2a 2f 5c 6e 22 0a 20 20 20 20 20 22 20 20  d */\n".     "  
0bc0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 61 6c 75  const char *valu
0bd0: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 53  e;         /* CS
0be0: 53 20 74 65 78 74 20 2a 2f 5c 6e 22 0a 20 20 20  S text */\n".   
0bf0: 20 20 22 7d 20 63 73 73 44 65 66 61 75 6c 74 4c    "} cssDefaultL
0c00: 69 73 74 5b 5d 20 3d 20 7b 5c 6e 22 0a 20 20 29  ist[] = {\n".  )
0c10: 3b 0a 20 20 77 68 69 6c 65 28 20 66 67 65 74 73  ;.  while( fgets
0c20: 28 7a 2c 20 73 69 7a 65 6f 66 28 7a 29 2c 20 69  (z, sizeof(z), i
0c30: 6e 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 3b  n) ){.    int n;
0c40: 20 20 2f 2a 20 4c 69 6e 65 20 6c 65 6e 67 74 68    /* Line length
0c50: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   */.    int i;. 
0c60: 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20     nLine++;.    
0c70: 69 66 28 20 7a 5b 30 5d 3d 3d 27 2f 27 20 26 26  if( z[0]=='/' &&
0c80: 20 7a 5b 31 5d 3d 3d 27 2f 27 20 29 20 63 6f 6e   z[1]=='/' ) con
0c90: 74 69 6e 75 65 3b 20 20 2f 2a 20 53 6b 69 70 20  tinue;  /* Skip 
0ca0: 63 6f 6d 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20  comments */.    
0cb0: 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26  if( z[0]=='-' &&
0cc0: 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 20 63 6f 6e   z[1]=='-' ) con
0cd0: 74 69 6e 75 65 3b 20 20 2f 2a 20 53 6b 69 70 20  tinue;  /* Skip 
0ce0: 63 6f 6d 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20  comments */.    
0cf0: 69 66 28 20 7a 5b 30 5d 3d 3d 27 23 27 20 26 26  if( z[0]=='#' &&
0d00: 20 21 69 73 61 6c 6e 75 6d 28 7a 5b 31 5d 29 20   !isalnum(z[1]) 
0d10: 29 20 63 6f 6e 74 69 6e 75 65 3b 20 20 2f 2a 20  ) continue;  /* 
0d20: 53 6b 69 70 20 63 6f 6d 6d 65 6e 74 73 20 2a 2f  Skip comments */
0d30: 0a 20 20 20 20 6e 20 3d 20 28 69 6e 74 29 73 74  .    n = (int)st
0d40: 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 77 68 69  rlen(z);.    whi
0d50: 6c 65 28 20 6e 3e 30 20 26 26 20 69 73 73 70 61  le( n>0 && isspa
0d60: 63 65 28 7a 5b 6e 2d 31 5d 29 20 29 7b 20 7a 5b  ce(z[n-1]) ){ z[
0d70: 2d 2d 6e 5d 20 3d 20 30 3b 20 7d 0a 20 20 20 20  --n] = 0; }.    
0d80: 69 66 28 20 7a 5b 30 5d 3d 3d 30 20 29 20 63 6f  if( z[0]==0 ) co
0d90: 6e 74 69 6e 75 65 3b 20 20 2f 2a 20 42 6c 61 6e  ntinue;  /* Blan
0da0: 6b 20 6c 69 6e 65 73 20 2a 2f 0a 20 20 20 20 69  k lines */.    i
0db0: 66 28 20 69 73 73 70 61 63 65 28 7a 5b 30 5d 29  f( isspace(z[0])
0dc0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 21 69   ){.      if( !i
0dd0: 6e 52 75 6c 65 73 20 29 7b 0a 20 20 20 20 20 20  nRules ){.      
0de0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
0df0: 2c 20 22 25 73 3a 25 64 3a 20 43 53 53 20 72 75  , "%s:%d: CSS ru
0e00: 6c 65 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 20  le not within a 
0e10: 73 65 6c 65 63 74 6f 72 5c 6e 22 2c 0a 20 20 20  selector\n",.   
0e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 49 6e               zIn
0e30: 46 69 6c 65 2c 20 6e 4c 69 6e 65 29 3b 0a 20 20  File, nLine);.  
0e40: 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20        exit(1);. 
0e50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72       }.      for
0e60: 28 69 3d 30 3b 20 69 73 73 70 61 63 65 28 7a 5b  (i=0; isspace(z[
0e70: 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20  i]); i++){}.    
0e80: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
0e90: 20 20 20 20 5c 22 20 20 22 29 3b 0a 20 20 20 20      \"  ");.    
0ea0: 20 20 63 6c 61 6e 67 5f 70 75 74 73 28 6f 75 74    clang_puts(out
0eb0: 2c 20 7a 2b 69 29 3b 0a 20 20 20 20 20 20 66 70  , z+i);.      fp
0ec0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 5c 6e 5c  rintf(out, "\\n\
0ed0: 22 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  "\n");.    }else
0ee0: 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 7d 27 20 29   if( z[0]=='}' )
0ef0: 7b 0a 20 20 20 20 20 20 69 66 28 20 21 69 6e 52  {.      if( !inR
0f00: 75 6c 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20  ules ){.        
0f10: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  fprintf(stderr, 
0f20: 22 25 73 3a 25 64 3a 20 73 75 72 70 6c 75 73 20  "%s:%d: surplus 
0f30: 43 53 53 20 72 75 6c 65 20 74 65 72 6d 69 6e 61  CSS rule termina
0f40: 74 6f 72 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  tor\n",.        
0f50: 20 20 20 20 20 20 20 20 7a 49 6e 46 69 6c 65 2c          zInFile,
0f60: 20 6e 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 20   nLine);.       
0f70: 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20   exit(1);.      
0f80: 7d 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28  }.      fprintf(
0f90: 6f 75 74 2c 20 22 20 20 7d 2c 5c 6e 22 29 3b 0a  out, "  },\n");.
0fa0: 20 20 20 20 20 20 69 6e 52 75 6c 65 73 20 3d 20        inRules = 
0fb0: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
0fc0: 20 7a 5b 6e 2d 31 5d 3d 3d 27 7b 27 20 29 7b 0a   z[n-1]=='{' ){.
0fd0: 20 20 20 20 20 20 69 66 28 20 69 6e 52 75 6c 65        if( inRule
0fe0: 73 20 29 7b 0a 20 20 20 20 20 20 20 20 66 70 72  s ){.        fpr
0ff0: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
1000: 3a 25 64 3a 20 73 65 6c 65 63 74 6f 72 20 77 68  :%d: selector wh
1010: 65 72 65 20 74 68 65 72 65 20 73 68 6f 75 6c 64  ere there should
1020: 20 62 65 20 72 75 6c 65 5c 6e 22 2c 0a 20 20 20   be rule\n",.   
1030: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 49 6e               zIn
1040: 46 69 6c 65 2c 20 6e 4c 69 6e 65 29 3b 0a 20 20  File, nLine);.  
1050: 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20        exit(1);. 
1060: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 6e 52       }.      inR
1070: 75 6c 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20  ules = 1;.      
1080: 69 53 74 61 72 74 20 3d 20 6e 4c 69 6e 65 3b 0a  iStart = nLine;.
1090: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75        fprintf(ou
10a0: 74 2c 20 22 20 20 7b 20 5c 22 22 29 3b 0a 20 20  t, "  { \"");.  
10b0: 20 20 20 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 77      n--;.      w
10c0: 68 69 6c 65 28 20 6e 3e 30 20 26 26 20 69 73 73  hile( n>0 && iss
10d0: 70 61 63 65 28 7a 5b 6e 2d 31 5d 29 20 29 7b 20  pace(z[n-1]) ){ 
10e0: 7a 5b 2d 2d 6e 5d 20 3d 20 30 3b 20 7d 0a 20 20  z[--n] = 0; }.  
10f0: 20 20 20 20 63 6c 61 6e 67 5f 70 75 74 73 28 6f      clang_puts(o
1100: 75 74 2c 20 7a 29 3b 0a 20 20 20 20 20 20 66 70  ut, z);.      fp
1110: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 22 2c 5c  rintf(out, "\",\
1120: 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  n");.    }else{.
1130: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
1140: 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 73 79  derr, "%s:%d: sy
1150: 6e 74 61 78 20 65 72 72 6f 72 5c 6e 22 2c 0a 20  ntax error\n",. 
1160: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 49 6e               zIn
1170: 46 69 6c 65 2c 20 6e 4c 69 6e 65 29 3b 0a 20 20  File, nLine);.  
1180: 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
1190: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 6e 52   }.  }.  if( inR
11a0: 75 6c 65 73 20 29 7b 0a 20 20 20 20 66 70 72 69  ules ){.    fpri
11b0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a  ntf(stderr, "%s:
11c0: 25 64 3a 20 75 6e 74 65 72 6d 69 6e 61 74 65 64  %d: unterminated
11d0: 20 43 53 53 20 72 75 6c 65 5c 6e 22 2c 20 7a 49   CSS rule\n", zI
11e0: 6e 46 69 6c 65 2c 20 69 53 74 61 72 74 29 3b 0a  nFile, iStart);.
11f0: 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d      exit(1);.  }
1200: 0a 20 20 63 6c 6f 73 65 5f 66 69 6c 65 28 69 6e  .  close_file(in
1210: 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74  );.  fprintf(out
1220: 2c 20 22 20 20 7b 30 2c 30 7d 5c 6e 7d 3b 5c 6e  , "  {0,0}\n};\n
1230: 22 29 3b 0a 20 20 63 6c 6f 73 65 5f 66 69 6c 65  ");.  close_file
1240: 28 6f 75 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  (out);.  return 
1250: 30 3b 0a 7d 0a                                   0;.}.