有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Eclipse插件开发:文本编辑器和多语言的文档验证程序

所以今天我有两个问题:

  1. 我想为文本编辑器开发一个文档验证器,当我用一个通用编辑器生成Eclipse插件时,它正在为XML创建一个验证器,我想把它改为文本编辑器。有人知道怎么做吗

            DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            documentBuilder.parse(new InputSource(reader));
        } catch (Exception ex) {
            try {
                if (this.marker != null)
                    this.marker.delete();
                this.marker = file.createMarker(IMarker.PROBLEM);
                this.marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
                this.marker.setAttribute(IMarker.MESSAGE, "nadav");
                // if (ex instanceof SAXParseException) {
                // SAXParseException saxParseException = (SAXParseException)ex;
                // int lineNumber = saxParseException.getLineNumber();
                // int offset = event.getDocument().getLineInformation(lineNumber -
                // 1).getOffset() + saxParseException.getColumnNumber() - 1;
                // this.marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
                // this.marker.setAttribute(IMarker.CHAR_START, offset);
                // this.marker.setAttribute(IMarker.CHAR_END, offset + 1);
                // }
            } catch (Exception e) {
                // e.printStackTrace();
            }
        }
    

    这里只是将文档解析为XML,这就是eclipse为我编写的代码

  2. 我有行规则作为SingleLineRule和WordRule,但我的问题是多行规则,因为它看起来不像是两行(3行或更多行)后的多行,它不匹配。我能用它做什么? 这是我的密码:

    RuleBasedScanner scanner = new RuleBasedScanner();
    IRule[] rules = new IRule[5];
    rules[2] = new SingleLineRule("\"", "\"", new Token(stringAttribute));
    rules[3] = new MultiLineRule("/*", "*/", new Token(commentAttribute));
    rules[4] = new SingleLineRule("//", null, new Token(commentAttribute));
    rules[1] = new NumberRule(new Token(number));
    WordRule rule = new WordRule(new IWordDetector() {
    
        @Override
        public boolean isWordStart(char c) {
            // TODO Auto-generated method stub
            return Character.isJavaIdentifierStart(c);
        }
    
        @Override
        public boolean isWordPart(char c) {
            // TODO Auto-generated method stub
            return Character.isLetterOrDigit(c);
        }
    }, new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(0, 0, 0)))), true);
    for (int i = 0; i < keywords.length; i++) {
        if(keywords[i].equals("#define") || keywords[i].equals("#include"))
            rule.addWord(keywords[i].toLowerCase(), new Token(define));
        else
            rule.addWord(keywords[i].toLowerCase(), new Token(wordAttribute));
    }
    rules[0] = rule;
    scanner.setRules(rules);
    DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);
    this.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
    this.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
    

共 (0) 个答案