Esempio n. 1
0
 /**
  * Show style sheet.
  *
  * @param styleSheet the style sheet
  */
 private void showStyleSheet(CSSStyleSheet styleSheet) {
   StringWriter stringWriter = new StringWriter();
   PrintWriter writer = new PrintWriter(stringWriter);
   writer.println("<DL>");
   CSSRuleList ruleList = styleSheet.getCssRules();
   int length = ruleList.getLength();
   for (int i = 0; i < length; i++) {
     CSSRule rule = ruleList.item(i);
     writer.println(
         "<DT><strong>Rule: type="
             + rule.getType()
             + ",class="
             + rule.getClass().getName()
             + "</strong></DT>");
     writer.println("<DD>");
     this.writeRuleInfo(writer, rule);
     writer.println("</DD>");
   }
   writer.println("</DL>");
   writer.flush();
   String html = stringWriter.toString();
   HtmlRendererContext rcontext =
       new SimpleHtmlRendererContext(this.cssOutput, (UserAgentContext) null);
   this.cssOutput.setHtml(html, "about:css", rcontext);
 }
 /**
  * Adds the style sheet.
  *
  * @param styleSheet the style sheet
  * @throws MalformedURLException the malformed url exception
  * @throws UnsupportedEncodingException
  */
 private final void addStyleSheet(CSSStyleSheet styleSheet)
     throws MalformedURLException, UnsupportedEncodingException {
   CSSRuleList ruleList = styleSheet.getCssRules();
   int length = ruleList.getLength();
   for (int i = 0; i < length; i++) {
     CSSRule rule = ruleList.item(i);
     this.addRule(styleSheet, rule);
   }
 }
  public void _testInsertText1() throws IOException {
    ICSSModel model = getModel();
    IStructuredDocument structuredDocument = model.getStructuredDocument();
    structuredDocument.set(
        FileUtil.createString(
            "src/org/eclipse/wst/css/core/tests/testfiles", "CSSFontFaceRuleTest.css"));

    CSSStyleSheet sheet = (CSSStyleSheet) model.getDocument();
    CSSRuleList ruleList = sheet.getCssRules();
    assertEquals(3, ruleList.getLength());

    CSSRule rule;
    CSSStyleDeclaration declaration;
    CSSValue value;
    CSSValueList valueList;

    // rule 1

    rule = ruleList.item(0);
    assertEquals(CSSRule.FONT_FACE_RULE, rule.getType());
    assertTrue(rule instanceof CSSFontFaceRule);

    declaration = ((CSSFontFaceRule) rule).getStyle();
    assertEquals(4, declaration.getLength());

    value = declaration.getPropertyCSSValue("font-family");
    checkPrimitiveString(value, new PrimitiveString(CSSPrimitiveValue.CSS_STRING, "Swiss 721"));

    value = declaration.getPropertyCSSValue("src");
    checkPrimitiveString(value, new PrimitiveString(CSSPrimitiveValue.CSS_URI, "swiss721blk.pfr"));

    value = declaration.getPropertyCSSValue("font-style");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(3, valueList.getLength());

    checkPrimitiveString(
        valueList.item(0), new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "normal"));
    checkPrimitiveString(valueList.item(1), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveString(
        valueList.item(2), new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "italic"));

    value = declaration.getPropertyCSSValue("font-weight");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(3, valueList.getLength());

    checkPrimitiveNumber(
        valueList.item(0), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 800));
    checkPrimitiveString(valueList.item(1), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveNumber(
        valueList.item(2), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 900));
  }
  private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {

    cssRules_ = (CSSRuleList) in.readObject();
    if (cssRules_ != null) {
      for (int i = 0; i < cssRules_.getLength(); i++) {
        final CSSRule cssRule = cssRules_.item(i);
        if (cssRule instanceof AbstractCSSRuleImpl) {
          ((AbstractCSSRuleImpl) cssRule).setParentRule(this);
          ((AbstractCSSRuleImpl) cssRule).setParentStyleSheet(getParentStyleSheetImpl());
        }
      }
    }
    media_ = (MediaList) in.readObject();
  }
  /**
   * Parse CSS and create completion informations.
   *
   * @param css CSS
   */
  private void processStylesheet(String css) {
    try {
      CSSOMParser parser = new CSSOMParser();
      InputSource is = new InputSource(new StringReader(css));
      CSSStyleSheet stylesheet = parser.parseStyleSheet(is);
      CSSRuleList list = stylesheet.getCssRules();
      //			ArrayList assists = new ArrayList();
      for (int i = 0; i < list.getLength(); i++) {
        CSSRule rule = list.item(i);
        if (rule instanceof CSSStyleRule) {
          CSSStyleRule styleRule = (CSSStyleRule) rule;
          String selector = styleRule.getSelectorText();
          SelectorList selectors =
              parser.parseSelectors(new InputSource(new StringReader(selector)));
          for (int j = 0; j < selectors.getLength(); j++) {
            Selector sel = selectors.item(j);
            if (sel instanceof ConditionalSelector) {
              Condition cond = ((ConditionalSelector) sel).getCondition();
              SimpleSelector simple = ((ConditionalSelector) sel).getSimpleSelector();

              if (simple instanceof ElementSelector) {
                String tagName = ((ElementSelector) simple).getLocalName();
                if (tagName == null) {
                  tagName = "*";
                } else {
                  tagName = tagName.toLowerCase();
                }
                if (cond instanceof AttributeCondition) {
                  AttributeCondition attrCond = (AttributeCondition) cond;
                  if (rules.get(tagName) == null) {
                    List<String> classes = new ArrayList<String>();
                    classes.add(attrCond.getValue());
                    rules.put(tagName, classes);
                    //									} else {
                    //										ArrayList classes = (ArrayList)rules.get(tagName);
                    ////										classes.add(new AssistInfo(attrCond.getValue()));
                    //										classes.add(attrCond.getValue());
                  }
                }
              }
            }
          }
        }
      }
    } catch (Throwable ex) {
      // java.lang.Error: Missing return statement in function
    }
  }
Esempio n. 6
0
 /**
  * Returns the length of this list.
  *
  * @return the length of this list.
  */
 @JsxGetter
 public int getLength() {
   if (rules_ != null) {
     return rules_.getLength();
   }
   return 0;
 }
Esempio n. 7
0
 /** {@inheritDoc} */
 @Override
 public Object get(final int index, final Scriptable start) {
   if (index < 0 || getLength() <= index) {
     return NOT_FOUND;
   }
   return CSSRule.create(stylesheet_, rules_.item(index));
 }
 /**
  * find and returns a {@link StyleSheet} which represent "jeeeyul-custom.css".
  *
  * @param documentCSS
  * @return
  * @since 1.2
  */
 private StyleSheet findCustomThemeSheet(DocumentCSS documentCSS) {
   StyleSheet customThemeSheet = null;
   StyleSheetList styleSheets = documentCSS.getStyleSheets();
   SearchCustomThemeSheet:
   for (int i = 0; i < styleSheets.getLength(); i++) {
     StyleSheet eachSheet = styleSheets.item(i);
     if (eachSheet instanceof CSSStyleSheet) {
       CSSRuleList cssRules = ((CSSStyleSheet) eachSheet).getCssRules();
       for (int j = 0; j < cssRules.getLength(); j++) {
         ExtendedCSSRule rule = (ExtendedCSSRule) cssRules.item(j);
         SelectorList selectorList = rule.getSelectorList();
         String selectorText = selectorList.item(0).toString();
         if (CUSTOM_THEME_FIRST_SELECTOR.equals(selectorText)) {
           customThemeSheet = eachSheet;
           break SearchCustomThemeSheet;
         }
       }
     }
   }
   return customThemeSheet;
 }
Esempio n. 9
0
 private void parseFile(String filename) throws IOException {
   Reader r = new FileReader(filename);
   InputSource is = new InputSource(r);
   CSSOMParser parser = new CSSOMParser();
   CSSStyleSheet styleSheet = parser.parseStyleSheet(is);
   CSSRuleList list = styleSheet.getCssRules();
   for (int i = 0; i < list.getLength(); i++) {
     CSSRule rule = list.item(i);
     switch (rule.getType()) {
       case CSSRule.UNKNOWN_RULE:
         throw new IOException("Unknown rule in css file");
       case CSSRule.STYLE_RULE:
         //				CSSStyleRule srule = (CSSStyleRule) rule;
         //				System.out.println(srule.getSelectorText());
         break;
       default:
         System.out.println(rule);
         break;
     }
   }
 }
  public void testInsertRule() {
    final String RULE =
        "@font-face { font-family: \"Swiss 721\"; src: url(swiss721.pfr); /* The expanded Swiss 721 */ font-stretch: expanded; }";
    CSSStyleSheet sheet = getStyleSheet();
    assertEquals(0, sheet.insertRule(RULE, 0));

    CSSRuleList ruleList = sheet.getCssRules();
    CSSRule rule = ruleList.item(0);
    assertTrue(rule instanceof CSSFontFaceRule);

    CSSStyleDeclaration declaration = ((CSSFontFaceRule) rule).getStyle();
    assertEquals(3, declaration.getLength());

    CSSValue value;
    CSSPrimitiveValue primitiveValue;

    value = declaration.getPropertyCSSValue("font-family");
    assertTrue(value instanceof CSSPrimitiveValue);

    primitiveValue = (CSSPrimitiveValue) value;
    assertEquals(CSSPrimitiveValue.CSS_STRING, primitiveValue.getPrimitiveType());
    assertEquals("Swiss 721", primitiveValue.getStringValue());

    value = declaration.getPropertyCSSValue("src");
    assertTrue(value instanceof CSSPrimitiveValue);

    primitiveValue = (CSSPrimitiveValue) value;
    assertEquals(CSSPrimitiveValue.CSS_URI, primitiveValue.getPrimitiveType());
    assertEquals("swiss721.pfr", primitiveValue.getStringValue());

    value = declaration.getPropertyCSSValue("font-stretch");
    assertTrue(value instanceof CSSPrimitiveValue);

    primitiveValue = (CSSPrimitiveValue) value;
    assertEquals(CSSPrimitiveValue.CSS_IDENT, primitiveValue.getPrimitiveType());
    assertEquals("expanded", primitiveValue.getStringValue());
  }
  public void _testInsertText3() throws IOException {
    ICSSModel model = getModel();
    IStructuredDocument structuredDocument = model.getStructuredDocument();
    structuredDocument.set(
        FileUtil.createString(
            "src/org/eclipse/wst/css/core/tests/testfiles", "CSSFontFaceRuleTest.css"));

    CSSStyleSheet sheet = (CSSStyleSheet) model.getDocument();
    CSSRuleList ruleList = sheet.getCssRules();
    assertEquals(3, ruleList.getLength());

    CSSRule rule;
    CSSStyleDeclaration declaration;
    CSSValue value;
    CSSValueList valueList;

    // rule 3

    rule = ruleList.item(2);
    assertEquals(CSSRule.FONT_FACE_RULE, rule.getType());
    assertTrue(rule instanceof CSSFontFaceRule);

    declaration = ((CSSFontFaceRule) rule).getStyle();
    assertEquals(5, declaration.getLength());

    value = declaration.getPropertyCSSValue("src");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(4, valueList.getLength());

    checkPrimitiveString(
        valueList.item(0), new PrimitiveString(ICSSPrimitiveValue.CSS_LOCAL, "Alabama Italic"));
    checkPrimitiveString(valueList.item(1), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveString(
        valueList.item(2),
        new PrimitiveString(CSSPrimitiveValue.CSS_URI, "http://www.fonts.org/A/alabama-italic"));
    checkPrimitiveString(
        valueList.item(3), new PrimitiveString(ICSSPrimitiveValue.CSS_FORMAT, "truetype"));

    value = declaration.getPropertyCSSValue("panose-1");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(10, valueList.getLength());

    checkPrimitiveNumber(valueList.item(0), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 2));
    checkPrimitiveNumber(valueList.item(1), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 4));
    checkPrimitiveNumber(valueList.item(2), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 5));
    checkPrimitiveNumber(valueList.item(3), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 2));
    checkPrimitiveNumber(valueList.item(4), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 5));
    checkPrimitiveNumber(valueList.item(5), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 4));
    checkPrimitiveNumber(valueList.item(6), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 5));
    checkPrimitiveNumber(valueList.item(7), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 9));
    checkPrimitiveNumber(valueList.item(8), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 3));
    checkPrimitiveNumber(valueList.item(9), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 3));

    value = declaration.getPropertyCSSValue("font-family");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(3, valueList.getLength());

    checkPrimitiveString(
        valueList.item(0), new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "Alabama"));
    checkPrimitiveString(valueList.item(1), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveString(
        valueList.item(2), new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "serif"));

    value = declaration.getPropertyCSSValue("font-weight");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(5, valueList.getLength());

    checkPrimitiveNumber(
        valueList.item(0), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 300));
    checkPrimitiveString(valueList.item(1), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveNumber(
        valueList.item(2), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 400));
    checkPrimitiveString(valueList.item(3), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveNumber(
        valueList.item(4), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 500));

    value = declaration.getPropertyCSSValue("font-style");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(3, valueList.getLength());

    checkPrimitiveString(
        valueList.item(0), new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "italic"));
    checkPrimitiveString(valueList.item(1), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveString(
        valueList.item(2), new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "oblique"));
  }
  public void _testInsertText2() throws IOException {
    ICSSModel model = getModel();
    IStructuredDocument structuredDocument = model.getStructuredDocument();
    structuredDocument.set(
        FileUtil.createString(
            "src/org/eclipse/wst/css/core/tests/testfiles", "CSSFontFaceRuleTest.css"));

    CSSStyleSheet sheet = (CSSStyleSheet) model.getDocument();
    CSSRuleList ruleList = sheet.getCssRules();
    assertEquals(3, ruleList.getLength());

    CSSRule rule;
    CSSStyleDeclaration declaration;
    CSSValue value;
    CSSValueList valueList;

    // rule 2

    rule = ruleList.item(1);
    assertEquals(CSSRule.FONT_FACE_RULE, rule.getType());
    assertTrue(rule instanceof CSSFontFaceRule);

    declaration = ((CSSFontFaceRule) rule).getStyle();
    assertEquals(6, declaration.getLength());

    value = declaration.getPropertyCSSValue("src");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(9, valueList.getLength());

    checkPrimitiveString(
        valueList.item(0), new PrimitiveString(ICSSPrimitiveValue.CSS_LOCAL, "Palatino"));
    checkPrimitiveString(valueList.item(1), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveString(
        valueList.item(2), new PrimitiveString(ICSSPrimitiveValue.CSS_LOCAL, "Times New Roman"));
    checkPrimitiveString(valueList.item(3), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveString(
        valueList.item(4), new PrimitiveString(ICSSPrimitiveValue.CSS_LOCAL, "New York"));
    checkPrimitiveString(valueList.item(5), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveString(
        valueList.item(6), new PrimitiveString(ICSSPrimitiveValue.CSS_LOCAL, "Utopia"));
    checkPrimitiveString(valueList.item(7), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveString(
        valueList.item(8),
        new PrimitiveString(CSSPrimitiveValue.CSS_URI, "http://somewhere/free/font"));

    value = declaration.getPropertyCSSValue("font-family");
    checkPrimitiveString(value, new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "serif"));

    value = declaration.getPropertyCSSValue("font-weight");
    assertTrue(value instanceof CSSValueList);

    valueList = (CSSValueList) value;
    assertEquals(9, valueList.getLength());

    checkPrimitiveNumber(
        valueList.item(0), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 100));
    checkPrimitiveString(valueList.item(1), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveNumber(
        valueList.item(2), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 200));
    checkPrimitiveString(valueList.item(3), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveNumber(
        valueList.item(4), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 300));
    checkPrimitiveString(valueList.item(5), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveNumber(
        valueList.item(6), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 400));
    checkPrimitiveString(valueList.item(7), new PrimitiveString(ICSSPrimitiveValue.CSS_COMMA, ","));
    checkPrimitiveNumber(
        valueList.item(8), new PrimitiveNumber(ICSSPrimitiveValue.CSS_INTEGER, 500));

    value = declaration.getPropertyCSSValue("font-style");
    checkPrimitiveString(value, new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "normal"));

    value = declaration.getPropertyCSSValue("font-variant");
    checkPrimitiveString(value, new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "normal"));

    value = declaration.getPropertyCSSValue("font-size");
    checkPrimitiveString(value, new PrimitiveString(CSSPrimitiveValue.CSS_IDENT, "all"));
  }
  /**
   * Adds the rule.
   *
   * @param styleSheet the style sheet
   * @param rule the rule
   * @throws MalformedURLException the malformed url exception
   * @throws UnsupportedEncodingException
   */
  private final void addRule(CSSStyleSheet styleSheet, CSSRule rule)
      throws MalformedURLException, UnsupportedEncodingException {
    HTMLDocumentImpl document = this.document;
    if (rule instanceof CSSStyleRule) {
      CSSStyleRule sr = (CSSStyleRule) rule;
      String selectorList = sr.getSelectorText();
      StringTokenizer commaTok = new StringTokenizer(selectorList, ",");
      while (commaTok.hasMoreTokens()) {
        String selectorPart = commaTok.nextToken().toLowerCase();
        ArrayList<SimpleSelector> simpleSelectors = null;
        String lastSelectorText = null;
        StringTokenizer tok = new StringTokenizer(selectorPart, " \t\r\n");
        if (tok.hasMoreTokens()) {
          simpleSelectors = new ArrayList<SimpleSelector>();
          SimpleSelector prevSelector = null;
          SELECTOR_FOR:
          for (; ; ) {
            String token = tok.nextToken();
            if (">".equals(token)) {
              if (prevSelector != null) {
                prevSelector.setSelectorType(SimpleSelector.PARENT);
              }
              continue SELECTOR_FOR;
            } else if ("+".equals(token)) {
              if (prevSelector != null) {
                prevSelector.setSelectorType(SimpleSelector.PRECEEDING_SIBLING);
              }
              continue SELECTOR_FOR;
            }
            int colonIdx = token.indexOf(':');
            String simpleSelectorText = colonIdx == -1 ? token : token.substring(0, colonIdx);
            String pseudoElement = colonIdx == -1 ? null : token.substring(colonIdx + 1);
            prevSelector = new SimpleSelector(simpleSelectorText, pseudoElement);
            simpleSelectors.add(prevSelector);
            if (!tok.hasMoreTokens()) {
              lastSelectorText = simpleSelectorText;
              break;
            }
          }
        }
        if (lastSelectorText != null) {
          int dotIdx = lastSelectorText.indexOf('.');
          if (dotIdx != -1) {
            String elemtl = lastSelectorText.substring(0, dotIdx);
            String classtl = lastSelectorText.substring(dotIdx + 1);
            this.addClassRule(elemtl, classtl, sr, simpleSelectors);
          } else {
            int poundIdx = lastSelectorText.indexOf('#');
            if (poundIdx != -1) {
              String elemtl = lastSelectorText.substring(0, poundIdx);
              String idtl = lastSelectorText.substring(poundIdx + 1);
              this.addIdRule(elemtl, idtl, sr, simpleSelectors);
            } else {
              String elemtl = lastSelectorText;
              this.addElementRule(elemtl, sr, simpleSelectors);
            }
          }
        }
      }
      // TODO: Attribute selectors
    } else if (rule instanceof CSSImportRule) {
      UserAgentContext uacontext = document.getUserAgentContext();
      if (uacontext.isExternalCSSEnabled()) {
        CSSImportRule importRule = (CSSImportRule) rule;
        if (CSSUtilities.matchesMedia(importRule.getMedia(), uacontext)) {

          String href = importRule.getHref();

          CSSStyleSheet sheet = null;
          try {
            sheet = CSSUtilities.parse(href, document);
          } catch (Exception err) {
            logger.severe("Unable to parse CSS. URI=[" + href + "]." + err);
          }

          if (sheet != null) {
            this.addStyleSheet(sheet);
          }
        }
      }
    } else if (rule instanceof CSSMediaRule) {
      CSSMediaRule mrule = (CSSMediaRule) rule;
      MediaList mediaList = mrule.getMedia();
      if (CSSUtilities.matchesMedia(mediaList, document.getUserAgentContext())) {
        CSSRuleList ruleList = mrule.getCssRules();
        int length = ruleList.getLength();
        for (int i = 0; i < length; i++) {
          CSSRule subRule = ruleList.item(i);
          this.addRule(styleSheet, subRule);
        }
      }
    }
  }