static int kplib_sort_pairs(ktap_state *ks) { ktap_value *v = kp_arg(ks, 1); ktap_closure *cmp_func = NULL; ktap_tab *t; if (is_table(v)) { t = hvalue(v); } else if (is_ptable(v)) { t = kp_ptab_synthesis(ks, phvalue(v)); } else if (is_nil(v)) { kp_error(ks, "table is nil in pairs\n"); return 0; } else { kp_error(ks, "wrong argument for pairs\n"); return 0; } if (kp_arg_nr(ks) > 1) { kp_arg_check(ks, 2, KTAP_TYPE_FUNCTION); cmp_func = clvalue(kp_arg(ks, 2)); } kp_tab_sort(ks, t, cmp_func); set_cfunction(ks->top++, table_sort_iter_next); set_table(ks->top++, t); set_nil(ks->top++); return 3; }
static int kplib_histogram(ktap_state *ks) { ktap_value *v = kp_arg(ks, 1); if (is_table(v)) kp_tab_histogram(ks, hvalue(v)); else if (is_ptable(v)) kp_ptab_histogram(ks, phvalue(v)); return 0; }
static int kplib_histogram(ktap_state *ks) { ktap_value *v = kp_arg(ks, 1); int n = HISTOGRAM_DEFAULT_TOP_NUM; if (kp_arg_nr(ks) >= 2) { kp_arg_check(ks, 2, KTAP_TYPE_NUMBER); n = nvalue(kp_arg(ks, 2)); if (n > 1000) n = 1000; } n = max(n, HISTOGRAM_DEFAULT_TOP_NUM); if (is_table(v)) kp_tab_histogram(ks, hvalue(v), n); else if (is_ptable(v)) kp_ptab_histogram(ks, phvalue(v), n); return 0; }
static int kplib_pairs(ktap_state *ks) { ktap_value *v = kp_arg(ks, 1); ktap_tab *t; if (is_table(v)) { t = hvalue(v); } else if (is_ptable(v)) { t = kp_ptab_synthesis(ks, phvalue(v)); } else if (is_nil(v)) { kp_error(ks, "table is nil in pairs\n"); return 0; } else { kp_error(ks, "wrong argument for pairs\n"); return 0; } set_cfunction(ks->top++, table_iter_next); set_table(ks->top++, t); set_nil(ks->top++); return 3; }
void lutok::state::push_userdata(const void * data, const std::string& name){ luaL_getmetatable(_pimpl->lua_state, "lua_userdata"); if(!is_table()){ // create new weak table luaL_newmetatable( _pimpl->lua_state, "lua_userdata" ); push_string("v"); lua_setfield( _pimpl->lua_state, -2, "__mode" ); } lua_getfield( _pimpl->lua_state, -1, name.c_str()); if( is_userdata()) return lua_remove( _pimpl->lua_state, -2 ); pop(1);// didnt exist yet - getfield is nil -> need to pop that void * userdata = lua_newuserdata(_pimpl->lua_state, sizeof(void *)); *reinterpret_cast<void **>( userdata ) = (void *)( data ); this->push_value(); lua_setfield( _pimpl->lua_state, -3, name.c_str()); lua_remove( _pimpl->lua_state, -2 ); }
static grn_obj * command_tag_synonym(grn_ctx *ctx, GNUC_UNUSED int nargs, GNUC_UNUSED grn_obj **args, GNUC_UNUSED grn_user_data *user_data) { GNUC_UNUSED grn_obj *flags = grn_ctx_pop(ctx); grn_obj *newvalue = grn_ctx_pop(ctx); grn_obj *oldvalue = grn_ctx_pop(ctx); GNUC_UNUSED grn_obj *id = grn_ctx_pop(ctx); grn_obj buf; grn_obj record; grn_obj *domain; grn_obj *table; grn_obj *column; int i,n; if (GRN_BULK_VSIZE(newvalue) == 0 || GRN_INT32_VALUE(flags) == 0) { return NULL; } table = grn_ctx_at(ctx, oldvalue->header.domain); if (table && !is_table(table)) { GRN_PLUGIN_LOG(ctx, GRN_LOG_WARNING, "[tag-synonym] " "hooked column must be reference type"); return NULL; } column = grn_obj_column(ctx, table, SYNONYM_COLUMN_NAME, SYNONYM_COLUMN_NAME_LEN); if (!column) { GRN_PLUGIN_LOG(ctx, GRN_LOG_WARNING, "[tag-synonym] " "couldn't open synonym column"); return NULL; } GRN_TEXT_INIT(&buf, 0); domain = grn_ctx_at(ctx, newvalue->header.domain); if (domain && is_string(domain)) { GRN_RECORD_INIT(&record, GRN_OBJ_VECTOR, oldvalue->header.domain); grn_table_tokenize(ctx, table, GRN_TEXT_VALUE(newvalue), GRN_TEXT_LEN(newvalue), &record, GRN_TRUE); } else if (newvalue->header.type == GRN_UVECTOR) { record = *newvalue; } if (is_string(domain) || newvalue->header.type == GRN_UVECTOR) { grn_obj value; GRN_RECORD_INIT(newvalue, GRN_OBJ_VECTOR, oldvalue->header.domain); GRN_UINT32_INIT(&value, 0); n = grn_vector_size(ctx, &record); for (i = 0; i < n; i++) { grn_id tid; tid = grn_uvector_get_element(ctx, &record, i, NULL); GRN_BULK_REWIND(&value); grn_obj_get_value(ctx, column, tid, &value); if (GRN_UINT32_VALUE(&value)) { GRN_PLUGIN_LOG(ctx, GRN_LOG_INFO, "[tag-synonym] " "changed: tid %d -> %d", tid, GRN_UINT32_VALUE(&value)); tid = GRN_UINT32_VALUE(&value); } grn_uvector_add_element(ctx, newvalue, tid, 0); } grn_obj_unlink(ctx, &value); } else { grn_id tid; grn_obj value; tid = GRN_RECORD_VALUE(newvalue); GRN_UINT32_INIT(&value, 0); grn_obj_get_value(ctx, column, tid, &value); if (GRN_UINT32_VALUE(&value)) { GRN_PLUGIN_LOG(ctx, GRN_LOG_INFO, "[tag-synonym] " "changed: tid %d -> %d", tid, GRN_UINT32_VALUE(&value)); tid = GRN_UINT32_VALUE(&value); GRN_BULK_REWIND(newvalue); GRN_RECORD_SET(ctx, newvalue, tid); } grn_obj_unlink(ctx, &value); } grn_obj_unlink(ctx, &buf); return NULL; }
void concater_rep::typeset (tree t, path ip) { // cout << "Typeset " << t << "\n"; // cout << "Typeset " << t << ", " << ip << ", " << obtain_ip (t) << "\n"; /* if (obtain_ip (t) != ip) cout << "TeXmacs] Wrong ip: " << t << "\n" << " ] " << obtain_ip (t) << " -> " << ip << "\n"; */ if (!is_accessible (ip)) { path ip2= obtain_ip (t); //if (ip2 != ip) cout << t << ", " << ip << " -> " << ip2 << "\n"; if (ip2 != path (DETACHED)) ip= ip2; } if (env->hl_lan != 0) env->lan->highlight (t); if (is_atomic (t)) { if (env->mode == 1) typeset_text_string (t, ip, 0, N(t->label)); else if (env->mode == 2) typeset_math_string (t, ip, 0, N(t->label)); else if (env->mode == 3) typeset_prog_string (t, ip, 0, N(t->label)); else typeset_text_string (t, ip, 0, N(t->label)); return; } switch (L (t)) { case UNINIT: case ERROR: typeset_error (t, ip); break; case RAW_DATA: typeset_inactive (t, ip); break; case DOCUMENT: typeset_document (t, ip); break; case PARA: typeset_paragraph (t, ip); break; case SURROUND: typeset_surround (t, ip); break; case CONCAT: typeset_concat (t, ip); break; case RIGID: typeset_rigid (t, ip); break; case HIDDEN: //(void) env->exec (t); if (N(t) != 1) typeset_error (t, ip); else (void) typeset_as_concat (env, t[0], descend (ip, 0)); break; case FREEZE: if (N(t) != 1) typeset_error (t, ip); else typeset (attach_middle (t[0], ip)); //typeset (freeze (t[0]), decorate_middle (ip)); break; case UNFREEZE: if (N(t) != 1) typeset_error (t, ip); else typeset (t[0], descend (ip, 0)); break; case HSPACE: t= env->exec (t); typeset_hspace (t, ip); break; case VAR_VSPACE: flag (env->drd->get_name (L(t)), ip, brown); t= tree (VAR_VSPACE, env->exec (tree (TMLEN, A(t)))); control (t, ip); break; case VSPACE: flag (env->drd->get_name (L(t)), ip, brown); t= tree (VSPACE, env->exec (tree (TMLEN, A(t)))); control (t, ip); break; case SPACE: t= env->exec (t); typeset_space (attach_here (t, ip)); break; case HTAB: if (N(t) != 1 && N(t) != 2) { typeset_error (t, ip); break; } if (N(a)==0) print (empty_box (ip, 0, 0, 0, env->fn->yx)); print (space (env->as_length (t[0]))); control (t, ip); break; case MOVE: typeset_move (t, ip); break; case SHIFT: typeset_shift (t, ip); break; case RESIZE: typeset_resize (t, ip); break; case CLIPPED: typeset_clipped (t, ip); break; case REPEAT: typeset_repeat (t, ip); break; case _FLOAT: typeset_float (t, ip); break; case DATOMS: typeset_formatting (t, ip, ATOM_DECORATIONS); break; case DLINES: typeset_formatting (t, ip, LINE_DECORATIONS); break; case DPAGES: typeset_formatting (t, ip, PAGE_DECORATIONS); break; case DBOX: typeset_decorated_box (t, ip); break; case LINE_NOTE: typeset_line_note (t, ip); break; case PAGE_NOTE: typeset_page_note (t, ip); break; case WITH_LIMITS: with_limits (LIMITS_DISPLAY); flag ("with-limits", ip, brown); control (t, ip); break; case LINE_BREAK: if (N(a)>0) a[N(a)-1]->penalty = 0; flag ("line-break", ip, brown); control (t, ip); break; case NEW_LINE: case NEXT_LINE: { string name= env->drd->get_name (L(t)); flag (name, ip, brown); control (t, ip); break; } case NO_BREAK: if (N(a)>0) a[N(a)-1]->penalty = HYPH_INVALID; if ((N(a)>1) && (a[N(a)-1]->type == STRING_ITEM) && (a[N(a)-1]->b->get_leaf_string () == "")) a[N(a)-2]->penalty = HYPH_INVALID; flag ("no line break", ip, brown); control (t, ip); break; case YES_INDENT: flag ("yes-first-indent", ip, brown); control (tuple ("env_par", PAR_FIRST, env->read (PAR_FIRST)), ip); break; case NO_INDENT: flag ("no-first-indent", ip, brown); control (tuple ("env_par", PAR_FIRST, "0cm"), ip); break; case VAR_YES_INDENT: flag ("yes-first-indent-after", ip, brown); control (tuple ("env_par", PAR_NO_FIRST, "false"), ip); break; case VAR_NO_INDENT: flag ("no-first-indent-after", ip, brown); control (tuple ("env_par", PAR_NO_FIRST, "true"), ip); break; case VAR_PAGE_BREAK: case PAGE_BREAK: case VAR_NO_PAGE_BREAK: case NO_PAGE_BREAK: case VAR_NO_BREAK_HERE: case NO_BREAK_HERE: case NO_BREAK_START: case NO_BREAK_END: case VAR_NEW_PAGE: case NEW_PAGE: case VAR_NEW_DPAGE: case NEW_DPAGE: { string name= env->drd->get_name (L(t)); flag (name, ip, brown); control (t, ip); break; } case AROUND: case VAR_AROUND: case BIG_AROUND: typeset_around (t, ip, env->get_string (MATH_NESTING_MODE) != "off"); break; case LEFT: typeset_large (t, ip, LEFT_BRACKET_ITEM, OP_OPENING_BRACKET, "<left-"); break; case MID: typeset_large (t, ip, MIDDLE_BRACKET_ITEM, OP_MIDDLE_BRACKET, "<mid-"); break; case RIGHT: typeset_large (t, ip, RIGHT_BRACKET_ITEM, OP_CLOSING_BRACKET, "<right-"); break; case BIG: typeset_bigop (t, ip); break; case LONG_ARROW: typeset_long_arrow (t, ip); break; case LPRIME: typeset_lprime (t, ip); break; case RPRIME: typeset_rprime (t, ip); break; case BELOW: typeset_below (t, ip); break; case ABOVE: typeset_above (t, ip); break; case LSUB: case LSUP: typeset_script (t, ip, false); break; case RSUB: case RSUP: typeset_script (t, ip, true); break; case FRAC: typeset_frac (t, ip); break; case SQRT: typeset_sqrt (t, ip); break; case WIDE: typeset_wide (t, ip, true); break; case VAR_WIDE: typeset_wide (t, ip, false); break; case NEG: typeset_neg (t, ip); break; case TREE: typeset_tree (t, ip); break; case SYNTAX: typeset_syntax (t, ip); break; case TFORMAT: if ((N(t)>0) && is_table (t[N(t)-1])) typeset_table (t, ip); else typeset_formatting (t, ip, CELL_FORMAT); break; case TWITH: case CWITH: case TMARKER: typeset_inactive (t, ip); break; case TABLE: typeset_table (t, ip); break; case ROW: case CELL: case SUBTABLE: break; case ASSIGN: typeset_assign (t, ip); break; case WITH: typeset_with (t, ip); break; case PROVIDES: typeset_executable (t, ip); break; case QUOTE_VALUE: typeset_inactive (t, ip); break; case VALUE: typeset_value (t, ip); break; case MACRO: typeset_inactive (t, ip); break; case DRD_PROPS: typeset_drd_props (t, ip); break; case ARG: typeset_argument (t, ip); break; case QUOTE_ARG: typeset_inactive (t, ip); break; case COMPOUND: typeset_compound (t, ip); break; case XMACRO: typeset_inactive (t, ip); break; case GET_LABEL: typeset_executable (t, ip); break; case GET_ARITY: typeset_executable (t, ip); break; case MAP_ARGS: typeset_rewrite (t, ip); break; case EVAL_ARGS: typeset_eval_args (t, ip); break; case MARK: typeset_mark (t, ip); break; case EXPAND_AS: typeset_expand_as (t, ip); break; case EVAL: typeset_eval (t, ip); break; case QUOTE: typeset_inactive (t, ip); break; case QUASI: typeset_eval (tree (EVAL, tree (QUASIQUOTE, t[0])), ip); break; case QUASIQUOTE: case UNQUOTE: case VAR_UNQUOTE: case COPY: typeset_executable (t, ip); break; case IF: typeset_if (t, ip); break; case VAR_IF: typeset_var_if (t, ip); break; case CASE: typeset_case (t, ip); break; case WHILE: case FOR_EACH: typeset_executable (t, ip); break; case EXTERN: typeset_rewrite (t, ip); break; case VAR_INCLUDE: typeset_include (t, ip); break; case INCLUDE: typeset_compound (t, ip); break; case USE_PACKAGE: case USE_MODULE: typeset_executable (t, ip); break; case OR: case XOR: case AND: case NOT: case PLUS: case MINUS: case TIMES: case OVER: case DIV: case MOD: case MINIMUM: case MAXIMUM: case MATH_SQRT: case EXP: case LOG: case POW: case COS: case SIN: case TAN: case MERGE: case LENGTH: typeset_executable (t, ip); break; case RANGE: typeset_range (t, ip); break; case NUMBER: case _DATE: case TRANSLATE: case CHANGE_CASE: case FIND_FILE: case FIND_FILE_UPWARDS: case IS_TUPLE: case LOOK_UP: case EQUAL: case UNEQUAL: case LESS: case LESSEQ: case GREATER: case GREATEREQ: case BLEND: case BOX_INFO: case FRAME_DIRECT: case FRAME_INVERSE: typeset_executable (t, ip); break; case CM_LENGTH: case MM_LENGTH: case IN_LENGTH: case PT_LENGTH: case BP_LENGTH: case DD_LENGTH: case PC_LENGTH: case CC_LENGTH: case FS_LENGTH: case FBS_LENGTH: case EM_LENGTH: case LN_LENGTH: case SEP_LENGTH: case YFRAC_LENGTH: case EX_LENGTH: case FN_LENGTH: case FNS_LENGTH: case BLS_LENGTH: case SPC_LENGTH: case XSPC_LENGTH: case PAR_LENGTH: case PAG_LENGTH: case GW_LENGTH: case GH_LENGTH: case GU_LENGTH: case TMPT_LENGTH: case PX_LENGTH: typeset_executable (t, ip); break; case STYLE_ONLY: case VAR_STYLE_ONLY: case ACTIVE: case VAR_ACTIVE: case INACTIVE: case VAR_INACTIVE: typeset_compound (t, ip); break; case REWRITE_INACTIVE: typeset_rewrite (t, ip); break; case INLINE_TAG: case OPEN_TAG: case MIDDLE_TAG: case CLOSE_TAG: typeset_src_tag (t, ip); break; case SYMBOL: case LATEX: case HYBRID: typeset_inactive (t, ip); break; case LOCUS: typeset_locus (t, ip); break; case ID: typeset_inactive (t, ip); break; case HARD_ID: typeset_executable (t, ip); break; case LINK: case URL: case SCRIPT: case OBSERVER: case FIND_ACCESSIBLE: typeset_inactive (t, ip); break; case HLINK: case ACTION: typeset_compound (t, ip); break; case SET_BINDING: typeset_set_binding (t, ip); break; case GET_BINDING: typeset_executable (t, ip); break; case LABEL: case REFERENCE: case PAGEREF: typeset_compound (t, ip); break; case GET_ATTACHMENT: typeset_executable (t, ip); break; case WRITE: typeset_write (t, ip); break; case TOC_NOTIFY: typeset_toc_notify (t, ip); break; case TUPLE: case ATTR: case TMLEN: case COLLECTION: case ASSOCIATE: case BACKUP: typeset_inactive (t, ip); break; case PATTERN: case GRADIENT: marker (descend (ip, 0)); typeset_inactive (env->exec (t), decorate (ip)); marker (descend (ip, 1)); break; case SPECIFIC: typeset_specific (t, ip); break; case FLAG: typeset_flag (t, ip); break; case HYPHENATE_AS: typeset_hyphenate_as (t, ip); break; case ANIM_STATIC: case ANIM_DYNAMIC: case MORPH: case ANIM_TIME: case ANIM_PORTION: typeset_executable (t, ip); break; case ANIM_COMPOSE: typeset_anim_compose (t, ip); break; case ANIM_REPEAT: typeset_anim_repeat (t, ip); break; case ANIM_CONSTANT: typeset_anim_constant (t, ip); break; case ANIM_ACCELERATE: typeset_anim_accelerate (t, ip); break; case ANIM_TRANSLATE: typeset_anim_translate (t, ip); break; case ANIM_PROGRESSIVE: typeset_anim_progressive (t, ip); break; case VIDEO: typeset_video (t, ip); break; case SOUND: typeset_sound (t, ip); break; case GRAPHICS: typeset_graphics (t, ip); break; case SUPERPOSE: typeset_superpose (t, ip); break; case GR_GROUP: typeset_gr_group (t, ip); break; case GR_TRANSFORM: typeset_gr_transform (t, ip); break; case GR_EFFECT: typeset_gr_effect (t, ip); break; case TEXT_AT: typeset_text_at (t, ip); break; case MATH_AT: typeset_math_at (t, ip); break; case DOCUMENT_AT: typeset_document_at (t, ip); break; case _POINT: typeset_point (t, ip); break; case LINE: typeset_line (t, ip, false); break; case CLINE: typeset_line (t, ip, true); break; case ARC: typeset_arc (t, ip, false); break; case CARC: typeset_arc (t, ip, true); break; case SPLINE: typeset_spline (t, ip, false); break; case VAR_SPLINE: typeset_var_spline (t, ip); break; case CSPLINE: typeset_cspline (t, ip); break; case BEZIER: case CBEZIER: case SMOOTH: case CSMOOTH: typeset_bezier (t, ip); break; case FILL: typeset_fill (t, ip); break; case IMAGE: typeset_image (t, ip); break; case TRANSFORM_3D: case OBJECT_3D: case TRIANGLE_3D: case LIGHT_3D: typeset_graphics_3d (t, ip); break; case LIGHT_DIFFUSE: case LIGHT_SPECULAR: typeset_inactive (t, ip); break; case EFF_MOVE: case EFF_MAGNIFY: case EFF_BUBBLE: case EFF_TURBULENCE: case EFF_FRACTAL_NOISE: case EFF_GAUSSIAN: case EFF_OVAL: case EFF_RECTANGULAR: case EFF_MOTION: case EFF_BLUR: case EFF_OUTLINE: case EFF_THICKEN: case EFF_ERODE: case EFF_DEGRADE: case EFF_DISTORT: case EFF_GNAW: case EFF_SUPERPOSE: case EFF_ADD: case EFF_SUB: case EFF_MUL: case EFF_MIN: case EFF_MAX: case EFF_MIX: case EFF_NORMALIZE: case EFF_MONOCHROME: case EFF_COLOR_MATRIX: case EFF_MAKE_TRANSPARENT: case EFF_MAKE_OPAQUE: typeset_inactive (t, ip); break; case CANVAS: typeset_canvas (t, ip); break; case ORNAMENT: typeset_ornament (t, ip); break; default: if (L(t) < START_EXTENSIONS) print (test_box (ip)); else typeset_compound (t, ip); break; } }