Package com.google.caja.lexer

Examples of com.google.caja.lexer.FilePosition


  Expression sanitizeFrameTargetValue(AttrValue attr) {
    // If the guest code supplied an attribute value for 'target', we get it
    // in 'attr.src'. Otherwise, TemplateCompiler gives us an 'attr.src' with
    // a value equal to the empty string, which Domado's rewriteTargetAttribute
    // interprets to mean that the guest code did not supply a value.
    FilePosition pos = attr.valuePos;
    boolean unspecified = null !=
        attr.src.getUserData(TemplateCompiler.ATTRIBUTE_VALUE_WAS_UNSPECIFIED);
    Expression value = unspecified
        ? new NullLiteral(pos)
        : new StringLiteral(pos, attr.src.getValue());
View Full Code Here


   * Now this just turns a list of modules into a single module.
   */
  public CajoledModule rewrite(List<CajoledModule> modules) {
    if (modules.size() == 1) { return modules.get(0); }

    FilePosition unk = FilePosition.UNKNOWN;
    BuildInfo buildInfo = mgr.getBuildInfo();

    Expression moduleInvocations = null;
    for (CajoledModule module : modules) {
      Expression invocation = (Expression) QuasiBuilder.substV(
View Full Code Here

    // look for any labels preceding statement
    Mark m = tq.mark();
    Token<JsTokenType> t = tq.peek();
    if (JsTokenType.WORD == t.type) {
      String label = parseIdentifier(false);
      FilePosition labelPos = t.pos;
      if (tq.checkToken(Punctuation.COLON)) {
        t = tq.peek();
        AbstractStatement s = null;
        if (JsTokenType.KEYWORD == t.type) {
          switch (Keyword.fromString(t.text)) {
View Full Code Here

      Token<JsTokenType> quotedString = tq.pop();

      if (!tq.checkToken(Punctuation.SEMI)) {
        Token<JsTokenType> t = !tq.isEmpty() ? tq.peek() : null;
        if ((t == null || !continuesExpr(t.text)) && semicolonInserted()) {
          FilePosition semiPoint = FilePosition.endOf(tq.lastPosition());
          MessageLevel lvl = tq.isEmpty()
              || tq.lookaheadToken(Punctuation.RCURLY)
              ? MessageLevel.LOG : MessageLevel.LINT;
          mq.addMessage(MessageType.SEMICOLON_INSERTED, lvl, semiPoint);
        } else {
View Full Code Here

        s = new DoWhileLoop(posFrom(start), label, body, cond);
        // http://code.google.com/p/google-caja/issues/detail?id=1316
        // ES[35] requires ; after do-while, but browsers are ok without it.
        // Here we either eat a ; or warn if it's missing.
        if (!tq.checkToken(Punctuation.SEMI)) {
          FilePosition pos = FilePosition.endOf(tq.lastPosition());
          mq.addMessage(
              MessageType.SEMICOLON_INSERTED, MessageLevel.LINT, pos);
        }
        break;
      }
      case SWITCH:
      {
        tq.advance();
        tq.expectToken(Punctuation.LPAREN);
        Expression switchValue = parseExpressionInt(true);
        tq.expectToken(Punctuation.RPAREN);
        tq.expectToken(Punctuation.LCURLY);
        List<SwitchCase> cases = Lists.newArrayList();
        while (!tq.checkToken(Punctuation.RCURLY)) {
          Mark caseMark = tq.mark();
          Expression caseValue;
          if (tq.checkToken(Keyword.DEFAULT)) {
            caseValue = null;
          } else {
            tq.expectToken(Keyword.CASE);
            caseValue = parseExpressionInt(false);
          }
          tq.expectToken(Punctuation.COLON);
          FilePosition colonPos = tq.lastPosition();
          Mark caseBodyStart = tq.mark();
          List<Statement> caseBodyContents = Lists.newArrayList();
          while (!(tq.lookaheadToken(Keyword.DEFAULT)
                   || tq.lookaheadToken(Keyword.CASE)
                   || tq.lookaheadToken(Punctuation.RCURLY))) {
            caseBodyContents.add(parseTerminatedStatement());
          }
          FilePosition caseBodyPos = caseBodyContents.isEmpty()
              ? FilePosition.endOf(colonPos) : posFrom(caseBodyStart);
          Block caseBody = new Block(caseBodyPos, caseBodyContents);
          finish(caseBody, caseBodyStart);
          SwitchCase caseStmt = (null != caseValue)
              ? new CaseStmt(posFrom(caseMark), caseValue, caseBody)
View Full Code Here

          if (semicolonInserted()) {
            List<Message> messages = mq.getMessages();
            if (nMessages < messages.size()) {
              messages.subList(nMessages, messages.size()).clear();
            }
            FilePosition semiPoint = FilePosition.endOf(tq.lastPosition());
            messages.add(new Message(
                             MessageType.SEMICOLON_INSERTED, semiPoint));
            return left;
          } else {
            tq.rewind(m3);
View Full Code Here

    return left;
  }

  private boolean semicolonInserted() throws ParseException {
    if (tq.isEmpty() || tq.lookaheadToken(Punctuation.RCURLY)) { return true; }
    FilePosition last = tq.lastPosition(),
              current = tq.currentPosition();
    if (last == null) { return true; // Can insert at beginning
    if (current.startLineNo() == last.endLineNo()) { return false; }
    for (Token<JsTokenType> filtered : tq.filteredTokens()) {
      if (filtered.type == JsTokenType.LINE_CONTINUATION) { return false; }
    }
    return true;
  }
View Full Code Here

    }
    return true;
  }

  private void checkForMissingSemicolon() throws ParseException {
    FilePosition current = tq.currentPosition();
    FilePosition last = tq.lastPosition();
    if (current.source().equals(last.source())
        && current.startLineNo() > last.endLineNo()) {
      mq.addMessage(MessageType.MAYBE_MISSING_SEMI, FilePosition.endOf(last));
    }
  }
View Full Code Here

    if (null == e) {
      if (recoverFromFailure) {
        tq.rewind(m);
        // create a placeholder expression
        FilePosition pos = FilePosition.span(
            tq.lastPosition(), tq.currentPosition());
        mq.addMessage(MessageType.PLACEHOLDER_INSERTED, pos);
        Identifier idNode = new Identifier(pos, "_");
        e = new Reference(idNode);
      } else {
View Full Code Here

    // Look for a semicolon
    if (tq.checkToken(Punctuation.SEMI)) { return; }
    // None found, so maybe do insertion.
    if (tq.isEmpty()) { return; }
    if (semicolonInserted()) {
      FilePosition semiPoint = FilePosition.endOf(tq.lastPosition());
      MessageLevel lvl = tq.isEmpty() || tq.lookaheadToken(Punctuation.RCURLY)
          ? MessageLevel.LOG : MessageLevel.LINT;
      mq.addMessage(MessageType.SEMICOLON_INSERTED, lvl, semiPoint);
    } else {
      tq.expectToken(Punctuation.SEMI)// Just used to throw an exception
View Full Code Here

TOP

Related Classes of com.google.caja.lexer.FilePosition

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.