コード例 #1
0
ファイル: lab3.c プロジェクト: mhixon/CIS308
void recognizeAlphabet(int size){
	//recognize alphabet
	char line[2048];
	unsigned char *c;
	int lenptr;
 	unsigned int codepoint;
 	int blockIndex = 0;

 	while(fgets(line, 2048, stdin) != NULL){
 		c = line;
 		while(*c != '\0' && *c != '\n'){
 			codepoint = utf8_to_codepoint(c, &lenptr);
			if(codepoint > 0){ 
				int blockIndex = findMatch(codepoint, size);
				if(blockIndex != -1){ blocks[blockIndex].counter += 1; }	 
				c = c + lenptr; 
			}
			if(codepoint == 0){c++;}
 		}
 	}
}
コード例 #2
0
ファイル: si_db_ops.c プロジェクト: sfaroult/slide_index
extern void generate_index(void) {
   sqlite3_stmt *stmt = (sqlite3_stmt *)NULL;
   char         *ztail = (char *)NULL;
   char          initial = '\0';
   char          prevword[MAX_WORD_LEN];
   char         *w;
   char         *d;   // deck
   char         *s;   // slide list
   char         *p;
   int           slast;  // Slide or page number
   int           sn = 0;  // Slide or page number
   short         range;
   char          last_out;
   int           rc;
   short         kw;
   char          keyword;
   char          rtf = get_mode() & OPT_RTF;
   unsigned int  codepoint;
   int           len;

   if ((sqlite3_prepare(G_db,
                        "select case ? when 0 then word"
                        "              else replace(word,'\\','\\\\') end,"
                        "       shortname,slidenum,kw"
                        " from(select x.word,x.shortname,"
                        "       group_concat(x.slidenum) as slidenum,"
                        "       case x.kw when 'Y' then 1 else 0 end as kw"
                        " from (select distinct coalesce(w.stem, w.word)"
                        "         as word, d.shortname,"
                        "         case ?"
                        "           when 0 then s.slidenum"
                        "           when 1 then s.slidenum"
                        "           else cast(round((s.slidenum"
                        "                     - 1)/?)+1 as int)"
                        "         end as slidenum,"
                        "         w.kw"
                        "       from words w"
                        "            join slides s"
                        "              on s.slideid = w.slideid"
                        "            join decks d"
                        "              on d.deckid = s.deckid"
                        "       where length(trim(word))>0"
                        "       order by 1, 2, 3) x"
                        " group by x.word,x.shortname,x.kw) y"
                        " order by case when substr(upper(word),1,1)"
                        "  between 'A' and 'Z' then 1 else 0 end,"
                        " upper(word),shortname",
                        -1,
                        &stmt,
                        (const char **)&ztail) != SQLITE_OK)
                || (sqlite3_bind_int(stmt, 1,
                                     (int)rtf)!= SQLITE_OK)
                || (sqlite3_bind_int(stmt, 2,
                                     (int)get_pages())!= SQLITE_OK)
                || (sqlite3_bind_int(stmt, 3,
                                     (int)get_pages())!= SQLITE_OK)) {
     fprintf(stderr, "generate_index 0: %s\n",
                     (char *)sqlite3_errmsg(G_db));
     (void)sqlite3_close(G_db);
     exit(1);
   }
   if (rtf) {
     printf("{\\rtf1\\ansi\\ansicpg1252\\cocoartf1404\\cocoasubrtf340\n");
     printf("{\\fonttbl\\f0\\fswiss\\fcharset0 Helvetica;\\f1\\fnil\\fcharset0 Consolas-Bold;}\n");
     printf("{\\colortbl;\\red255\\green255\\blue255;\\red59\\green0\\blue164;}\n");
    printf("\\margl1440\\margr1440\\vieww18540\\viewh14540\\viewkind0\n");
    printf("\\pard\\tx566\\tx1133\\tx1700\\tx2267\\tx2834\\tx3401\\tx3968\\tx4535\\tx5102\\tx5669\\tx6236\\tx6803\\pardirnatural\\partightenfactor0\n");
    printf("\n\\f0\\fs24 \\cf0 \\\n");
   }
   prevword[0] = '\0';
   while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
     w = (char *)sqlite3_column_text(stmt, 0);
     kw = (char)sqlite3_column_int(stmt, 3);
     if ((toupper(*w) != initial) && isalpha(*w)) {
       if (rtf) {
         printf("\\\n\\\n\\b\\fs44 \\cf2 %c\n\\b0\\fs24 \\cf0 \\\n",
                toupper(*w));
       } else {
         printf("\n\n--- %c ---", toupper(*w));
       }
       initial = toupper(*w);
     }
     w = index_entry(w, &kw);
     keyword = (kw == 1);
     if (strncmp(w, prevword, MAX_WORD_LEN)) {
       if (rtf && autokw() && !keyword) {
         keyword = lowercase_word(w);
       }
       if (rtf) { 
         if (keyword) {
           printf("\\\n\\f1\\b %s\n\\f0\\b0 \\\n", w);
         } else {
           printf("\\\n");
           p = w;
           while (*p) {
             codepoint = utf8_to_codepoint((const unsigned char *)p, &len);
             if (len == 1) {
               putchar(*p);
             } else {
               printf("\\u%ld?", (long)codepoint);
             }
             p += len;
           }
           printf("\\\n");
         }
       } else {
         printf("\n%s\n", w);
       }
       strncpy(prevword, w, MAX_WORD_LEN);
     } else {
       if (rtf) {
         putchar('\\');
       }
       putchar('\n');
     }
     d = (char *)sqlite3_column_text(stmt, 1);
     printf("   %s%-30.30s%s %s ",
            (rtf ? "\\i ":""),
            d,
            (rtf ? "\n\\i0":""),
            (get_pages() ? "p." : ""));
     s = strdup((char *)sqlite3_column_text(stmt, 2));
     // Try to condense by replacing three or more consecutive
     // page or slide values with a n-m range
     range = 0;
     slast = -1;
     p = strtok(s, ",");
     last_out = 0;
     while (p) {
       if (sscanf(p, "%d", &sn)) {
         if (sn == 1 + slast) {
           range++;
           last_out = 0;
         } else {
           // Not in the same range of values
           if (slast > 0) {
             if (range) {
               if (range > 1) {
                 printf("-%d,%d", slast, sn);
                 last_out = 1;
               } else {
                 if (slast > 0) {
                   if (!last_out) {
                     printf(",%d", slast);
                   }
                   printf(",%d", sn);
                 } else {
                   printf("%d", sn);
                 }
                 last_out = 1;
               }
               range = 0;
             } else {
               printf(",%d", sn);
               last_out = 1;
             }
           } else {
             printf("%d", sn);
             last_out = 1;
           }
         }
         slast = sn;
       }
       p = strtok(NULL, ",");
     }
     if (!last_out) {
       if (range > 1) {
         printf("-%d", sn);
       } else {
         printf(",%d", sn);
       }
     }
     if (s) {
       free(s);
     }
   }
   if (rtf) {
     putchar('\\');
   }
   putchar('\n');
   fflush(stdout);
   if (rc != SQLITE_DONE) {
     fprintf(stderr, "generate_index 1: %s\n",
                     (char *)sqlite3_errmsg(G_db));
     (void)sqlite3_close(G_db);
     exit(1);
   } else {
     (void)sqlite3_finalize(stmt);
   }
   if (rtf) {
     printf("}\n");
   }
}