java Eclipse插件开发:文本编辑器和多语言的文档验证程序
所以今天我有两个问题:
我想为文本编辑器开发一个文档验证器,当我用一个通用编辑器生成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为我编写的代码
我有行规则作为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) 个答案