Пример #1
0
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);
}
Пример #2
0
/*
 * 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);
}
Пример #3
0
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;
}