VString XLinuxIntlMgr::GetSymbol(Symbol inSymbolType) const { UErrorCode err=U_ZERO_ERROR; icu::DecimalFormatSymbols decimalFmt(fLocale, err); //jmo - We see U_USING_DEFAULT_WARNING with ICU 4.8 ; I don't uderstand really why ; I don't like it ! // But according to ICU doc and to this bug report https://bugs.webkit.org/show_bug.cgi?id=27220 // (and various other sources !)... It seems it's not really an error/warning we should care about. xbox_assert(err==U_ZERO_ERROR || err==U_USING_FALLBACK_WARNING || U_USING_DEFAULT_WARNING); icu::DecimalFormatSymbols::ENumberFormatSymbol icuSymbol; switch(inSymbolType) { case DECIMAL : icuSymbol=icu::DecimalFormatSymbols::kDecimalSeparatorSymbol; break; case THOUSAND : //(ICU doc) The grouping separator is commonly used for thousands, but in some countries for ten-thousands. icuSymbol=icu::DecimalFormatSymbols::kGroupingSeparatorSymbol; break; case CURRENCY : icuSymbol=icu::DecimalFormatSymbols::kCurrencySymbol; break; default : xbox_assert(0); return VString(""); } icu::UnicodeString symbolTmp=decimalFmt.getSymbol(icuSymbol); VString symb(symbolTmp.getTerminatedBuffer()); return symb; }
int rdata(void) { int s, c; long v; if(ndc < 0) ndc = 0; if(ndc) { for(s=0; s<ndc; s++) { itmp[itmpp++] = dctmp[s]; if(itmpp >= NTMP) { fprintf(stderr, "rdata: no room\n"); #ifdef PLAN9 exits("rdata no room"); #else exit(1); #endif } } ndc = -1; return 0; } mask = ~0L; loop: s = symb(); if(s == EON) return 1; if(s == ITER) { fprintf(stdout, ".r"); for(;;) { c = gchar(); if(c < 0) goto loop; putchar(c); if(c == '\n') goto loop; } } if(s == EXTERN) { fprintf(stdout, ".x"); while((c = gchar()) != '\n') putchar(c); putchar(c); goto loop; } if(s != OUT) expect(".o"); fflush(stdout); fprintf(stdout, ".o"); for(;;) { s = symb(); if(s == NUMB) { fprintf(stdout, " %ld", numb); continue; } if(s == NAME) { fprintf(stdout, " %s", name); continue; } break; } fprintf(stdout, "\n"); if(s != LINE) expect("new line"); for(;;) { s = symb(); if(s == LINE) continue; if(s != NUMB) break; v = numb; c = symb(); if(c != COLON && c != PERC) expect(":"); s = symb(); if(s != NUMB) expect("number"); if(c == PERC) { if(ndc >= NDC) { fprintf(stderr, "NDC(%d) too small\n", NDC); doexit(1); } dctmp[ndc++] = v; } if(mask == ~0L) mask = numb; else if(mask != numb) { fprintf(stderr, "whoops, masks different\n"); #ifdef PLAN9 exits("whoooops, masks different"); #else exit(1); #endif } v &= mask; if((itmpp == 0) || (itmp[itmpp-1] < v)) { itmp[itmpp++] = v; if(itmpp >= NTMP) { fprintf(stderr, "rdata: no room\n"); #ifdef PLAN9 exits("rdata no room"); #else exit(1); #endif } continue; } if(itmp[itmpp-1] > v) { fprintf(stderr, "input not sorted\n"); #ifdef PLAN9 exits("input not sorted"); #else exit(1); #endif } } peeks = s; return 0; }
void create_new_terminal(const iterator_t str, const iterator_t end) { string name(str, end); Symbol symb(name, k_terminal); attr_grammar->add_symbol(symb); }
rdata(void) { int s, c; long v; loop: s = symb(); if(s == EON) return(1); if(s == EXTERN) { fprintf(stdout, ".x"); while((c = gchar()) != '\n') putchar(c); putchar(c); goto loop; } if(s == ITER) { fprintf(stdout, ".r"); for(;;) { c = gchar(); if(c < 0) goto loop; putchar(c); if(c == '\n') goto loop; } } if(s != OUT) expect(".o"); fflush(stdout); fprintf(stdout, ".o"); opin = -1; for(;;) { s = symb(); if(s == NUMB) { fprintf(stdout, " %ld", numb); if(opin == -1) opin = numb; continue; } if(s == NAME) { fprintf(stdout, " %s", name); if(opin == -1) opin = 0; continue; } break; } fprintf(stdout, "\n"); if(s != LINE) expect("new line"); nimp = 0; ndtc = 0; for(;;) { s = symb(); if(s == LINE) continue; if(s != NUMB) break; v = numb; c = symb(); if(c != COLON && c != PERC) expect(":"); s = symb(); if(s != NUMB) expect("number"); if(c == PERC) { if(ndtc >= NDTC) { fprintf(stderr, "buffer[DTC] too small\n"); #ifdef PLAN9 exits("buffer[DTC] too small"); #else exit(1); #endif } dtc[ndtc].val = v; dtc[ndtc].mask = numb; ndtc++; /*oterm(v, numb, '%');*/ continue; } if(nimp >= NIMP) { fprintf(stderr, "buffer[IMP] too small\n"); #ifdef PLAN9 exits("buffer[IMP] too small"); #else exit(1); #endif } imp[nimp].val = v; imp[nimp].mask = numb; nimp++; } peeks = s; return(0); }
rdata(void) { char c; char *xcp; char *cmdlinepart = ""; int s, pindex, ipin; long v; loop: s = symb(); if(s == EON) { (void) postamble(); return 1; } if(s == EXTERN) { if (extern_id && strlen(extern_id) > 0) { /* seen -t */ cmdlinepart = malloc(strlen(extern_id) + 1); strcpy(cmdlinepart, extern_id); } else extern_id = malloc(STRLEN); while(isspace(c = gchar())); xcp = extern_id; *xcp++ = toupper(c); while((c = gchar()) != '\n') *xcp++ = toupper(c); *xcp = '\0'; if (strlen(cmdlinepart) > 0) if (strcmp(cmdlinepart, extern_id) != 0) fprint(2, "warning: -t %s and .x %s don't agree\n", cmdlinepart, extern_id); else; else (void) rdlibrary(); goto loop; } if(s == ITER) { fprint(2, ".r"); for(;;) { c = gchar(); if(c < 0) goto loop; fprint(2, "%c", (char) c); if(c == '\n') goto loop; } } if(s != OUT) expect(".o"); if (!extern_id || (strlen(extern_id) == 0)) expect(".x"); s = symb(); if(s != NUMB) expect("output pin"); opin = numb; if (opin > MAXPIN) { fprint(2, "output pin %d > MAXPIN! Time to recompile!\n", opin); exit(1); } if (!(pin_array[opin].properties & OUTPUT_TYPE)) fprint(2, "output pin %d not found\n", opin); if (pin_array[opin].flags & USED_FLAG) fprint(2, "pin %d already used\n", opin); pin_array[opin].flags |= USED_FLAG; if (iflag) fprint(2, "\n.o %d", opin); for(pindex=0;;) { s = symb(); if(s != NUMB) break; /*??*/ if(s == NAME) { fprint(2, "name %s unexpected", name); continue; } ipin = numb; if (!(pin_array[ipin].properties & INPUT_TYPE)) { fprint(2, "pin %d isn't an input\n", ipin); continue; } if (pindex > NINPUTS) { fprint(2, "too many inputs (NINPUTS too small)\n"); exit(0); } input_pin[pindex++] = ipin; if (iflag) fprint(2, " %d", ipin); } input_pin[pindex] = 0; if (iflag) fprint(2, "\n"); if(s != LINE) expect("new line"); nimp = 0; for(;;) { s = symb(); if(s == LINE) continue; if(s != NUMB) break; v = numb; c = symb(); if(c != COLON && c != PERC) expect(":"); s = symb(); if(s != NUMB) expect("number"); if(c == PERC) { expect("code for %"); /* tee hee */ continue; } if(nimp >= NIMP) { fprint(2, "buffer[IMP] too small\n"); exit(1); } if (iflag) fprint(2, " %d:%d", v, numb); imp[nimp].val = v; imp[nimp].mask = numb; nimp++; } if (iflag) fprint(2, "\n"); peeks = s; return 0; }