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;
}
Esempio n. 2
0
File: quine.c Progetto: kahrs/cda
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);
}
Esempio n. 4
0
File: cover.c Progetto: kahrs/cda
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);
}
Esempio n. 5
0
File: xpal.c Progetto: kahrs/cda
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;
}