int main() { list *l = list_create(NULL); printf("0 list_length %d\n", list_length(l)); list_append_string(l, _STRDUP("niels")); printf("1 list_length %d\n", list_length(l)); list_append_string(l, _STRDUP("nes")); printf("1 list_length %d\n", list_length(l)); list_append_string(l, _STRDUP("lilian")); printf("1 list_length %d\n", list_length(l)); list_append_string(l, _STRDUP("nes")); printf("1 list_length %d\n", list_length(l)); list_append_string(l, _STRDUP("max")); printf("1 list_length %d\n", list_length(l)); list_append_string(l, _STRDUP("nes")); printf("1 list_length %d\n", list_length(l)); list_traverse(l, print_data, NULL); printf("\n"); list_traverse(l, destroy_data, NULL); list_destroy(l); }
/* * Handle marks in the viminfo file: * fp_out != NULL: copy marks for buffers not in buffer list * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles */ void copy_viminfo_marks(vir_T *virp, FILE *fp_out, int count, int eof, int flags) { char_u *line = virp->vir_line; buf_T *buf; int num_marked_files; int load_marks; int copy_marks_out; char_u *str; int i; char_u *p; char_u *name_buf; pos_T pos; list_T *list = NULL; if ((name_buf = alloc(LSIZE)) == NULL) return; *name_buf = NUL; if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT))) { list = list_alloc(); if (list != NULL) set_vim_var_list(VV_OLDFILES, list); } num_marked_files = get_viminfo_parameter('\''); while (!eof && (count < num_marked_files || fp_out == NULL)) { if (line[0] != '>') { if (line[0] != '\n' && line[0] != '\r' && line[0] != '#') { if (viminfo_error("E576: ", _("Missing '>'"), line)) break; /* too many errors, return now */ } eof = vim_fgets(line, LSIZE, virp->vir_fd); continue; /* Skip this dud line */ } /* * Handle long line and translate escaped characters. * Find file name, set str to start. * Ignore leading and trailing white space. */ str = skipwhite(line + 1); str = viminfo_readstring(virp, (int)(str - virp->vir_line), FALSE); if (str == NULL) continue; p = str + STRLEN(str); while (p != str && (*p == NUL || vim_isspace(*p))) p--; if (*p) p++; *p = NUL; if (list != NULL) list_append_string(list, str, -1); /* * If fp_out == NULL, load marks for current buffer. * If fp_out != NULL, copy marks for buffers not in buflist. */ load_marks = copy_marks_out = FALSE; if (fp_out == NULL) { if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL) { if (*name_buf == NUL) /* only need to do this once */ home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE); if (fnamecmp(str, name_buf) == 0) load_marks = TRUE; } } else { /* fp_out != NULL */ /* This is slow if there are many buffers!! */ for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_ffname != NULL) { home_replace(NULL, buf->b_ffname, name_buf, LSIZE, TRUE); if (fnamecmp(str, name_buf) == 0) break; } /* * copy marks if the buffer has not been loaded */ if (buf == NULL || !buf->b_marks_read) { copy_marks_out = TRUE; fputs("\n> ", fp_out); viminfo_writestring(fp_out, str); count++; } } vim_free(str); pos.coladd = 0; while (!(eof = viminfo_readline(virp)) && line[0] == TAB) { if (load_marks) { if (line[1] != NUL) { unsigned u; sscanf((char *)line + 2, "%ld %u", &pos.lnum, &u); pos.col = u; switch (line[1]) { case '"': curbuf->b_last_cursor = pos; break; case '^': curbuf->b_last_insert = pos; break; case '.': curbuf->b_last_change = pos; break; case '+': /* changelist positions are stored oldest * first */ if (curbuf->b_changelistlen == JUMPLISTSIZE) /* list is full, remove oldest entry */ mch_memmove(curbuf->b_changelist, curbuf->b_changelist + 1, sizeof(pos_T) * (JUMPLISTSIZE - 1)); else ++curbuf->b_changelistlen; curbuf->b_changelist[ curbuf->b_changelistlen - 1] = pos; break; default: if ((i = line[1] - 'a') >= 0 && i < NMARKS) curbuf->b_namedm[i] = pos; } } } else if (copy_marks_out) fputs((char *)line, fp_out); } if (load_marks) { win_T *wp; FOR_ALL_WINDOWS(wp) { if (wp->w_buffer == curbuf) wp->w_changelistidx = curbuf->b_changelistlen; } break; } } vim_free(name_buf); }
static PyObject* Majka_tags(const char * tag_string) { PyObject* tags = PyDict_New(); char category = ' '; char tmp[] = {'\0', '\0'}; PyObject* type = PyList_New(0); if (*tag_string == 'k') { ++tag_string; category = *tag_string; switch (category) { case '1': dict_set_string(tags, "pos", "substantive"); break; case '2': dict_set_string(tags, "pos", "adjective"); break; case '3': dict_set_string(tags, "pos", "pronomina"); break; case '4': dict_set_string(tags, "pos", "numeral"); break; case '5': dict_set_string(tags, "pos", "verb"); break; case '6': dict_set_string(tags, "pos", "adverb"); break; case '7': dict_set_string(tags, "pos", "preposition"); break; case '8': dict_set_string(tags, "pos", "conjuction"); break; case '9': dict_set_string(tags, "pos", "particle"); break; case '0': dict_set_string(tags, "pos", "interjection"); break; case 'I': dict_set_string(tags, "pos", "punctuation"); break; } ++tag_string; } if (*tag_string == 'e') { ++tag_string; switch (*tag_string) { case 'A': PyDict_SetItemString(tags, "negation", Py_False); break; case 'N': PyDict_SetItemString(tags, "negation", Py_True); break; } ++tag_string; } if (*tag_string == 'a') { ++tag_string; switch (*tag_string) { case 'P': dict_set_string(tags, "aspect", "perfect"); break; case 'I': dict_set_string(tags, "aspect", "imperfect"); break; } ++tag_string; } if (*tag_string == 'm') { ++tag_string; switch (*tag_string) { case 'F': dict_set_string(tags, "mode", "infinitive"); break; case 'I': dict_set_string(tags, "mode", "present indicative"); break; case 'R': dict_set_string(tags, "mode", "imperative"); break; case 'A': dict_set_string(tags, "mode", "active participle"); break; case 'N': dict_set_string(tags, "mode", "passive participle"); break; case 'S': dict_set_string(tags, "mode", "adverbium participle, present"); break; case 'D': dict_set_string(tags, "mode", "adverbium participle, past"); break; case 'B': dict_set_string(tags, "mode", "future indicative"); break; } ++tag_string; } if (*tag_string == 'p') { ++tag_string; tmp[0] = *tag_string; dict_set_numeric(tags, "person", tmp); ++tag_string; } if (*tag_string == 'g') { ++tag_string; switch (*tag_string) { case 'M': dict_set_string(tags, "gender", "masculine"); PyDict_SetItemString(tags, "animate", Py_True); break; case 'I': dict_set_string(tags, "gender", "masculine"); PyDict_SetItemString(tags, "animate", Py_False); break; case 'F': dict_set_string(tags, "gender", "feminine"); break; case 'N': dict_set_string(tags, "gender", "neuter"); break; } ++tag_string; } if (*tag_string == 'n') { ++tag_string; switch (*tag_string) { case 'S': PyDict_SetItemString(tags, "singular", Py_True); break; case 'P': PyDict_SetItemString(tags, "plural", Py_True); break; } ++tag_string; } if (*tag_string == 'c') { ++tag_string; tmp[0] = *tag_string; dict_set_numeric(tags, "case", tmp); ++tag_string; } if (*tag_string == 'p') { // Duplicate ++tag_string; tmp[0] = *tag_string; dict_set_numeric(tags, "person", tmp); ++tag_string; } if (*tag_string == 'd') { ++tag_string; tmp[0] = *tag_string; dict_set_numeric(tags, "degree", tmp); ++tag_string; } if (*tag_string == 'x') { ++tag_string; switch (category) { case '1': switch (*tag_string) { case 'P': list_append_string(type, "half"); break; case 'F': list_append_string(type, "family surname"); break; } break; case '3': switch (*tag_string) { case 'P': list_append_string(type, "personal"); break; case 'O': list_append_string(type, "possessive"); break; case 'D': list_append_string(type, "demonstrative"); break; case 'T': list_append_string(type, "deliminative"); break; } break; case '4': switch (*tag_string) { case 'C': list_append_string(type, "cardinal"); break; case 'O': list_append_string(type, "ordinal"); break; case 'R': list_append_string(type, "reproductive"); break; } break; case '6': switch (*tag_string) { case 'D': list_append_string(type, "demonstrative"); break; case 'T': list_append_string(type, "delimitative"); break; } break; case '8': switch (*tag_string) { case 'C': list_append_string(type, "coordinate"); break; case 'S': list_append_string(type, "subordinate"); break; } break; case 'I': switch (*tag_string) { case '.': list_append_string(type, "stop"); break; case ',': list_append_string(type, "semi-stop"); break; case '"': list_append_string(type, "parenthesis"); break; case '(': list_append_string(type, "opening"); break; case ')': list_append_string(type, "closing"); break; case '~': list_append_string(type, "other"); break; } break; } ++tag_string; } if (*tag_string == 'y') { ++tag_string; switch (*tag_string) { case 'F': list_append_string(type, "reflective"); break; case 'Q': list_append_string(type, "interrogative"); break; case 'R': list_append_string(type, "relative"); break; case 'N': list_append_string(type, "negative"); break; case 'I': list_append_string(type, "indeterminate"); break; } ++tag_string; } if (*tag_string == 't') { ++tag_string; switch (*tag_string) { case 'S': list_append_string(type, "status"); break; case 'D': list_append_string(type, "modal"); break; case 'T': list_append_string(type, "time"); break; case 'A': list_append_string(type, "respect"); break; case 'C': list_append_string(type, "reason"); break; case 'L': list_append_string(type, "place"); break; case 'M': list_append_string(type, "manner"); break; case 'Q': list_append_string(type, "extent"); break; } ++tag_string; } if (*tag_string == 'z') { ++tag_string; switch (*tag_string) { case 'S': dict_set_string(tags, "subclass", "-s enclictic"); break; case 'Y': dict_set_string(tags, "subclass", "conditional"); break; case 'A': dict_set_string(tags, "subclass", "abbreviation"); break; } ++tag_string; } if (*tag_string == 'w') { ++tag_string; switch (*tag_string) { case 'B': dict_set_string(tags, "style", "poeticism"); break; case 'H': dict_set_string(tags, "style", "conversational"); break; case 'N': dict_set_string(tags, "style", "dialectal"); break; case 'R': dict_set_string(tags, "style", "rare"); break; case 'Z': dict_set_string(tags, "style", "obsolete"); break; } ++tag_string; } if (*tag_string == '~') { ++tag_string; tmp[0] = *tag_string; dict_set_numeric(tags, "frequency", tmp); ++tag_string; } if (PyList_Size(type)) { dict_set(tags, "type", type); } else { Py_DECREF(type); } if (*tag_string) { dict_set_string(tags, "other", tag_string); } return tags; }