コード例 #1
0
ファイル: tok.c プロジェクト: 8l/myrddin
static Tok *toknext()
{
    Tok *t;
    int c;

    eatspace();
    c = peek();
    if (c == End) {
        t =  mktok(0);
    } else if (c == '\n') {
        curloc.line++;
        next();
        t =  mktok(Tendln);
    } else if (isalpha(c) || c == '_' || c == '$') {
        t =  kwident();
    } else if (c == '"') {
        t =  strlit();
    } else if (c == '\'') {
        t = charlit();
    } else if (isdigit(c)) {
        t =  numlit();
    } else if (c == '@') {
        t = typaram();
    } else {
        t = oper();
    }

    if (!t || t->type == Terror)
        lfatal(curloc, "Unable to parse token starting with %c", c);
    return t;
}
コード例 #2
0
nsresult
NumberingScheme::Init (nsIRDFDataSource* aDS, nsIRDFResource* aResource)
{
  mComponents.Clear();

  NS_ENSURE_ARG(aDS);
  NS_ENSURE_ARG(aResource);

  mResource = aResource;
  nsresult rv;

  nsCOMPtr<nsIRDFService> rdfsvc(
    do_GetService("@mozilla.org/rdf/rdf-service;1"));

  nsCOMPtr<nsIRDFDataSource> schemads;
  rdfsvc->GetDataSourceBlocking("chrome://celtx/content/schema.rdf",
    getter_AddRefs(schemads));

  nsCOMPtr<nsIRDFCompositeDataSource> compds = do_CreateInstance(
    "@mozilla.org/rdf/datasource;1?name=composite-datasource");
  compds->AddDataSource(schemads);
  compds->AddDataSource(aDS);

  nsCOMPtr<nsIRDFResource> posarc, numarc, prearc, sufarc;
  rdfsvc->GetResource(NS_LITERAL_CSTRING("http://celtx.com/NS/v1/position"),
    getter_AddRefs(posarc));
  rdfsvc->GetResource(NS_LITERAL_CSTRING("http://celtx.com/NS/v1/numbering"),
    getter_AddRefs(numarc));
  rdfsvc->GetResource(NS_LITERAL_CSTRING("http://celtx.com/NS/v1/prefix"),
    getter_AddRefs(prearc));
  rdfsvc->GetResource(NS_LITERAL_CSTRING("http://celtx.com/NS/v1/suffix"),
    getter_AddRefs(sufarc));

  nsCOMPtr<nsIRDFContainer> cont = do_CreateInstance(
    "@mozilla.org/rdf/container;1");
  rv = cont->Init(compds, aResource);
  NS_ENSURE_SUCCESS(rv, rv);

  nsCOMPtr<nsISimpleEnumerator> elements;
  rv = cont->GetElements(getter_AddRefs(elements));
  NS_ENSURE_SUCCESS(rv, rv);
  if (! elements)
    return NS_ERROR_INVALID_ARG;

  PRUint32 processed = 0;
  PRBool hasMore;
  rv = elements->HasMoreElements(&hasMore);
  while (NS_SUCCEEDED(rv) && hasMore) {
    nsCOMPtr<nsISupports> elem;
    rv = elements->GetNext(getter_AddRefs(elem));
    if (NS_FAILED(rv) || ! elem)
      break;

    nsCOMPtr<nsIRDFResource> scheme(do_QueryInterface(elem));
    if (! scheme)
      break;

    nsCOMPtr<nsIRDFNode> posnode, numnode, prenode, sufnode;
    compds->GetTarget(scheme, posarc, PR_TRUE, getter_AddRefs(posnode));
    compds->GetTarget(scheme, numarc, PR_TRUE, getter_AddRefs(numnode));
    compds->GetTarget(scheme, prearc, PR_TRUE, getter_AddRefs(prenode));
    compds->GetTarget(scheme, sufarc, PR_TRUE, getter_AddRefs(sufnode));

    nsCOMPtr<nsIRDFLiteral> numlit(do_QueryInterface(numnode)),
                            poslit(do_QueryInterface(posnode)),
                            prelit(do_QueryInterface(prenode)),
                            suflit(do_QueryInterface(sufnode));

    NumberingComponent component;
    nsXPIDLString position, numbering, prefix, suffix;

    if (numlit)
      numlit->GetValue(getter_Copies(numbering));

    if (numbering.IsEmpty())
      break;

    if (poslit)
      poslit->GetValue(getter_Copies(position));

    if (! position.IsEmpty()) {
      if (position.Equals(NS_LITERAL_STRING("before")))
        component.position = NumberingComponent::BEFORE;
      else if (position.Equals(NS_LITERAL_STRING("after")))
        component.position = NumberingComponent::AFTER;
      else
        break;
    }
    else if (processed > 0)
      break;

    if (numbering.Equals(NS_LITERAL_STRING("number")))
      component.numbering = NumberingComponent::NUMBER;
    else if (numbering.Equals(NS_LITERAL_STRING("letter")))
      component.numbering = NumberingComponent::LETTER;
    else
      break;

    if (prelit)
      prelit->GetValue(getter_Copies(prefix));

    if (! prefix.IsEmpty())
      component.prefix.Assign(prefix);

    if (suflit)
      suflit->GetValue(getter_Copies(suffix));

    if (! suffix.IsEmpty())
      component.suffix.Assign(suffix);

    mComponents.AppendElement(component);
    ++processed;

    rv = elements->HasMoreElements(&hasMore);
  }

  return mComponents.Length() ? NS_OK : NS_ERROR_FAILURE;
}