static int store_tab(int attr, off_t pos) { int to_tab = column + cshift - lmargin; int i; if (ntabstops < 2 || to_tab >= tabstops[ntabstops-1]) to_tab = tabdefault - ((to_tab - tabstops[ntabstops-1]) % tabdefault); else { for (i = ntabstops - 2; i >= 0; i--) if (to_tab >= tabstops[i]) break; to_tab = tabstops[i+1] - to_tab; } if (column + to_tab - 1 + pwidth(' ', attr, 0) + attr_ewidth(attr) > sc_width) return (1); do { STORE_CHAR(' ', attr, " ", pos); } while (--to_tab > 0); return (0); }
Coord MacPrinterCanvas::width() const { #if carbon return Coord(pwidth()); #else Rect& r = (*prRecHdl)->prInfo.rPage; return Coord(r.right); #endif }
CScriptVal ICmpFootprint::GetShape_wrapper() { EShape shape; entity_pos_t size0, size1, height; GetShape(shape, size0, size1, height); JSContext* cx = GetSimContext().GetScriptInterface().GetContext(); JSObject* obj = JS_NewObject(cx, NULL, NULL, NULL); if (!obj) return JSVAL_VOID; if (shape == CIRCLE) { JS::RootedValue ptype(cx); JS::RootedValue pradius(cx); JS::RootedValue pheight(cx); ScriptInterface::ToJSVal<std::string>(cx, ptype.get(), "circle"); ScriptInterface::ToJSVal(cx, pradius.get(), size0); ScriptInterface::ToJSVal(cx, pheight.get(), height); JS_SetProperty(cx, obj, "type", ptype.address()); JS_SetProperty(cx, obj, "radius", pradius.address()); JS_SetProperty(cx, obj, "height", pheight.address()); } else { JS::RootedValue ptype(cx); JS::RootedValue pwidth(cx); JS::RootedValue pdepth(cx); JS::RootedValue pheight(cx); ScriptInterface::ToJSVal<std::string>(cx, ptype.get(), "square"); ScriptInterface::ToJSVal(cx, pwidth.get(), size0); ScriptInterface::ToJSVal(cx, pdepth.get(), size1); ScriptInterface::ToJSVal(cx, pheight.get(), height); JS_SetProperty(cx, obj, "type", ptype.address()); JS_SetProperty(cx, obj, "width", pwidth.address()); JS_SetProperty(cx, obj, "depth", pdepth.address()); JS_SetProperty(cx, obj, "height", pheight.address()); } return OBJECT_TO_JSVAL(obj); }
/* * Delete to the previous base character in the line buffer. * Return 1 if one is found. */ static int backc(void) { LWCHAR prev_ch; char *p = linebuf + curr; LWCHAR ch = step_char(&p, -1, linebuf + lmargin); int width; /* This assumes that there is no '\b' in linebuf. */ while (curr > lmargin && column > lmargin && (!(attr[curr - 1] & (AT_ANSI|AT_BINARY)))) { curr = p - linebuf; prev_ch = step_char(&p, -1, linebuf + lmargin); width = pwidth(ch, attr[curr], prev_ch); column -= width; if (width > 0) return (1); ch = prev_ch; } return (0); }
static int store_prchar(char c, off_t pos) { char *s; /* * Convert to printable representation. */ s = prchar(c); /* * Make sure we can get the entire representation * of the character on this line. */ if (column + (int)strlen(s) - 1 + pwidth(' ', binattr, 0) + attr_ewidth(binattr) > sc_width) return (1); for (; *s != 0; s++) { STORE_CHAR(*s, AT_BINARY, NULL, pos); } return (0); }
static int do_append(LWCHAR ch, char *rep, off_t pos) { int a; LWCHAR prev_ch; a = AT_NORMAL; if (ch == '\b') { if (bs_mode == BS_CONTROL) goto do_control_char; /* * A better test is needed here so we don't * backspace over part of the printed * representation of a binary character. */ if (curr <= lmargin || column <= lmargin || (attr[curr - 1] & (AT_ANSI|AT_BINARY))) { STORE_PRCHAR('\b', pos); } else if (bs_mode == BS_NORMAL) { STORE_CHAR(ch, AT_NORMAL, NULL, pos); } else if (bs_mode == BS_SPECIAL) { overstrike = backc(); } return (0); } if (overstrike > 0) { /* * Overstrike the character at the current position * in the line buffer. This will cause either * underline (if a "_" is overstruck), * bold (if an identical character is overstruck), * or just deletion of the character in the buffer. */ overstrike = utf_mode ? -1 : 0; /* To be correct, this must be a base character. */ prev_ch = get_wchar(linebuf + curr); a = attr[curr]; if (ch == prev_ch) { /* * Overstriking a char with itself means make it bold. * But overstriking an underscore with itself is * ambiguous. It could mean make it bold, or * it could mean make it underlined. * Use the previous overstrike to resolve it. */ if (ch == '_') { if ((a & (AT_BOLD|AT_UNDERLINE)) != AT_NORMAL) a |= (AT_BOLD|AT_UNDERLINE); else if (last_overstrike != AT_NORMAL) a |= last_overstrike; else a |= AT_BOLD; } else { a |= AT_BOLD; } } else if (ch == '_') { a |= AT_UNDERLINE; ch = prev_ch; rep = linebuf + curr; } else if (prev_ch == '_') { a |= AT_UNDERLINE; } /* Else we replace prev_ch, but we keep its attributes. */ } else if (overstrike < 0) { if (is_composing_char(ch) || is_combining_char(get_wchar(linebuf + curr), ch)) /* Continuation of the same overstrike. */ a = last_overstrike; else overstrike = 0; } if (ch == '\t') { /* * Expand a tab into spaces. */ switch (bs_mode) { case BS_CONTROL: goto do_control_char; case BS_NORMAL: case BS_SPECIAL: STORE_TAB(a, pos); break; } } else if ((!utf_mode || is_ascii_char(ch)) && control_char((char)ch)) { do_control_char: if (ctldisp == OPT_ON || (ctldisp == OPT_ONPLUS && IS_CSI_START(ch))) { /* * Output as a normal character. */ STORE_CHAR(ch, AT_NORMAL, rep, pos); } else { STORE_PRCHAR((char)ch, pos); } } else if (utf_mode && ctldisp != OPT_ON && is_ubin_char(ch)) { char *s; s = prutfchar(ch); if (column + (int)strlen(s) - 1 + pwidth(' ', binattr, 0) + attr_ewidth(binattr) > sc_width) return (1); for (; *s != 0; s++) STORE_CHAR(*s, AT_BINARY, NULL, pos); } else { STORE_CHAR(ch, a, rep, pos); } return (0); }
static int store_char(LWCHAR ch, char a, char *rep, off_t pos) { int w; int replen; char cs; int matches; w = (a & (AT_UNDERLINE|AT_BOLD)); /* Pre-use w. */ if (w != AT_NORMAL) last_overstrike = w; if (is_hilited(pos, pos+1, 0, &matches)) { /* * This character should be highlighted. * Override the attribute passed in. */ if (a != AT_ANSI) { if (highest_hilite != -1 && pos > highest_hilite) highest_hilite = pos; a |= AT_HILITE; } } if (ctldisp == OPT_ONPLUS && in_ansi_esc_seq()) { if (!is_ansi_end(ch) && !is_ansi_middle(ch)) { /* Remove whole unrecognized sequence. */ char *p = &linebuf[curr]; LWCHAR bch; do { bch = step_char(&p, -1, linebuf); } while (p > linebuf && !IS_CSI_START(bch)); curr = p - linebuf; return (0); } a = AT_ANSI; /* Will force re-AT_'ing around it. */ w = 0; } else if (ctldisp == OPT_ONPLUS && IS_CSI_START(ch)) { a = AT_ANSI; /* Will force re-AT_'ing around it. */ w = 0; } else { char *p = &linebuf[curr]; LWCHAR prev_ch = step_char(&p, -1, linebuf); w = pwidth(ch, a, prev_ch); } if (ctldisp != OPT_ON && column + w + attr_ewidth(a) > sc_width) /* * Won't fit on screen. */ return (1); if (rep == NULL) { cs = (char)ch; rep = &cs; replen = 1; } else { replen = utf_len(rep[0]); } if (curr + replen >= size_linebuf-6) { /* * Won't fit in line buffer. * Try to expand it. */ if (expand_linebuf()) return (1); } while (replen-- > 0) { linebuf[curr] = *rep++; attr[curr] = a; curr++; } column += w; return (0); }