/** Initialize the tokenizer. */ void vtkParse_InitTokenizer( StringTokenizer *tokens, const char *text, parse_space_t wstype) { tokens->tok = 0; tokens->hash = 0; tokens->text = text; tokens->len = 0; tokens->ws = wstype; vtkParse_NextToken(tokens); }
/* Write code for execution after the method parameters are evaluated */ static void vtkWrapPython_SubstituteCode( FILE *fp, ClassInfo *data, FunctionInfo *func, const char *code) { StringTokenizer t; int qualified = 0; int matched; int j; /* tokenize the code according to C/C++ rules */ vtkParse_InitTokenizer(&t, code, WS_DEFAULT); do { /* check whether we have found an unqualified identifier */ matched = 0; if ((t.tok == TOK_ID || t.tok == '#') && !qualified) { /* check for "this" */ if (t.len == 4 && strncmp(t.text, "this", 4) == 0) { fprintf(fp, "op"); matched = 1; } if (!matched) /* check for parameters */ { ValueInfo *arg = NULL; /* check for positional parameter "#n" */ if (t.tok == '#' && vtkParse_NextToken(&t) && t.tok == TOK_NUMBER) { j = (int)atol(t.text); arg = func->Parameters[j]; } else { for (j = 0; j < func->NumberOfParameters; j++) { const char *name; arg = func->Parameters[j]; name = arg->Name; if (name && strlen(name) == t.len && strncmp(name, t.text, t.len) == 0) { break; } arg = NULL; } } if (arg) { matched = 1; if (vtkWrap_IsSpecialObject(arg) && !vtkWrap_IsPointer(arg)) { fprintf(fp, "(*temp%d)", j); } else { fprintf(fp, "temp%d", j); } } } if (!matched) /* check for class members */ { for (j = 0; j < data->NumberOfItems; j++) { ItemInfo *item = &data->Items[j]; const char *name = NULL; int is_static = 0; if (item->Type == VTK_FUNCTION_INFO) { /* methods */ name = data->Functions[item->Index]->Name; is_static = data->Functions[item->Index]->IsStatic; } else if (item->Type == VTK_VARIABLE_INFO) { /* member variables */ name = data->Variables[item->Index]->Name; is_static = data->Variables[item->Index]->IsStatic; } else if (item->Type == VTK_CONSTANT_INFO) { /* enum values and other constants */ name = data->Constants[item->Index]->Name; is_static = 1; } if (name && strlen(name) == t.len && strncmp(name, t.text, t.len) == 0) { if (is_static) { fprintf(fp, "%s::%s", data->Name, name); } else { fprintf(fp, "op->%s", name); } matched = 1; break; } } } } if (!matched) { fprintf(fp, "%*.*s", (int)t.len, (int)t.len, t.text); } /* if next character is whitespace, add a space */ if (vtkParse_CharType(t.text[t.len], CPRE_WHITE)) { fprintf(fp, " "); } /* check whether the next identifier is qualified */ qualified = (t.tok == TOK_SCOPE || t.tok == TOK_ARROW || t.tok == '.'); } while (vtkParse_NextToken(&t)); }