CodeArea(CodePanel panel) { this.contentPanel = panel; this.node = panel.getNode(); setMarkOccurrences(true); setEditable(false); loadSettings(); Caret caret = getCaret(); if (caret instanceof DefaultCaret) { ((DefaultCaret) caret).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); } caret.setVisible(true); setSyntaxEditingStyle(node.getSyntaxName()); if (node instanceof JClass) { JClass jClsNode = (JClass) this.node; ((RSyntaxDocument) getDocument()).setSyntaxStyle(new JadxTokenMaker(this, jClsNode)); setHyperlinksEnabled(true); CodeLinkGenerator codeLinkProcessor = new CodeLinkGenerator(contentPanel, this, jClsNode); setLinkGenerator(codeLinkProcessor); addHyperlinkListener(codeLinkProcessor); addMenuItems(jClsNode); } registerWordHighlighter(); setText(node.getContent()); }
/** * Sets what type of syntax highlighting this editor is doing. This method * fires a property change of type {@link #SYNTAX_STYLE_PROPERTY}. * * @param styleKey The syntax editing style to use, for example, * {@link SyntaxConstants#SYNTAX_STYLE_NONE} or * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. * @see #getSyntaxEditingStyle() * @see SyntaxConstants */ public void setSyntaxEditingStyle(String styleKey) { if (styleKey==null) { styleKey = SYNTAX_STYLE_NONE; } if (!styleKey.equals(syntaxStyleKey)) { String oldStyle = syntaxStyleKey; syntaxStyleKey = styleKey; ((RSyntaxDocument)getDocument()).setSyntaxStyle(styleKey); firePropertyChange(SYNTAX_STYLE_PROPERTY, oldStyle, styleKey); setActiveLineRange(-1, -1); } }
/** * Constructs a plain text document. A default root element is created, * and the tab size set to 5. * * @param tmf The <code>TokenMakerFactory</code> for this document. If * this is <code>null</code>, a default factory is used. * @param syntaxStyle The syntax highlighting scheme to use. */ public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) { putProperty(tabSizeAttribute, Integer.valueOf(5)); lastTokensOnLines = new DynamicIntArray(400); lastTokensOnLines.add(Token.NULL); // Initial (empty) line. s = new Segment(); setTokenMakerFactory(tmf); setSyntaxStyle(syntaxStyle); }
/** * Deserializes a document. * * @param in The stream to read from. * @throws ClassNotFoundException * @throws IOException */ private void readObject(ObjectInputStream in) throws ClassNotFoundException, IOException { in.defaultReadObject(); // Install default TokenMakerFactory. To support custom TokenMakers, // both JVM's should install default TokenMakerFactories that support // the language they want to use beforehand. setTokenMakerFactory(null); // Handle other transient stuff this.s = new Segment(); int lineCount = getDefaultRootElement().getElementCount(); lastTokensOnLines = new DynamicIntArray(lineCount); setSyntaxStyle(syntaxStyle); // Actually install (transient) TokenMaker }
@Test public void testGetSyntaxStyle() { String syntaxStyle = SyntaxConstants.SYNTAX_STYLE_C; doc = new RSyntaxDocument(syntaxStyle); Assert.assertEquals(syntaxStyle, doc.getSyntaxStyle()); syntaxStyle = SyntaxConstants.SYNTAX_STYLE_XML; doc.setSyntaxStyle(syntaxStyle); Assert.assertEquals(syntaxStyle, doc.getSyntaxStyle()); syntaxStyle = "text/custom"; doc.setSyntaxStyle(syntaxStyle); Assert.assertEquals(syntaxStyle, doc.getSyntaxStyle()); }
@Test public void testSetSyntaxStyle() { String syntaxStyle = SyntaxConstants.SYNTAX_STYLE_C; doc = new RSyntaxDocument(syntaxStyle); Assert.assertEquals(syntaxStyle, doc.getSyntaxStyle()); syntaxStyle = SyntaxConstants.SYNTAX_STYLE_XML; doc.setSyntaxStyle(syntaxStyle); Assert.assertEquals(syntaxStyle, doc.getSyntaxStyle()); syntaxStyle = "text/custom"; doc.setSyntaxStyle(syntaxStyle); Assert.assertEquals(syntaxStyle, doc.getSyntaxStyle()); }
@Test public void testSetTokenMakerFactory() { String syntaxStyle = SyntaxConstants.SYNTAX_STYLE_C; doc = new RSyntaxDocument(syntaxStyle); // By default, we do indeed get syntax highlighting for Java doc.setSyntaxStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); Assert.assertNotNull(doc.getLineCommentStartAndEnd(0)); // No mappings -> default to PlainTextTokenMaker doc.setTokenMakerFactory(new EmptyTokenMakerFactory()); doc.setSyntaxStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); // Ghetto test to show we are not picking up a JavaTokenMaker Assert.assertNull(doc.getLineCommentStartAndEnd(0)); // Verify restoring default instance doc.setTokenMakerFactory(null); doc.setSyntaxStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); Assert.assertNotNull(doc.getLineCommentStartAndEnd(0)); }
@Test public void testGetLanguageIsMarkup() { String syntaxStyle = SyntaxConstants.SYNTAX_STYLE_C; doc = new RSyntaxDocument(syntaxStyle); Assert.assertFalse(doc.getLanguageIsMarkup()); // Language that does not use curly braces syntaxStyle = SyntaxConstants.SYNTAX_STYLE_XML; doc.setSyntaxStyle(syntaxStyle); Assert.assertTrue(doc.getLanguageIsMarkup()); }
@Test public void testInsertBreakSpecialHandling() { String syntaxStyle = SyntaxConstants.SYNTAX_STYLE_C; doc = new RSyntaxDocument(syntaxStyle); Assert.assertTrue(doc.insertBreakSpecialHandling(null)); // Language that does not use curly braces syntaxStyle = SyntaxConstants.SYNTAX_STYLE_XML; doc.setSyntaxStyle(syntaxStyle); Assert.assertFalse(doc.insertBreakSpecialHandling(null)); }
@Test public void testSetSyntaxStyle_CustomTokenMaker() { String syntaxStyle = SyntaxConstants.SYNTAX_STYLE_C; doc = new RSyntaxDocument(syntaxStyle); Assert.assertEquals(syntaxStyle, doc.getSyntaxStyle()); TokenMaker tokenMaker = new HTMLTokenMaker(); doc.setSyntaxStyle(tokenMaker); Assert.assertNotEquals(syntaxStyle, doc.getSyntaxStyle()); }
@Test public void testGetLineCommentStartAndEnd() { String syntaxStyle = SyntaxConstants.SYNTAX_STYLE_C; doc = new RSyntaxDocument(syntaxStyle); String[] actual = doc.getLineCommentStartAndEnd(0); Assert.assertEquals(2, actual.length); Assert.assertEquals("//", actual[0]); Assert.assertNull(actual[1]); // Language that does not use curly braces syntaxStyle = SyntaxConstants.SYNTAX_STYLE_XML; doc.setSyntaxStyle(syntaxStyle); actual = doc.getLineCommentStartAndEnd(0); Assert.assertEquals(2, actual.length); Assert.assertEquals("<!--", actual[0]); Assert.assertEquals("-->", actual[1]); }
/** * Sets what type of syntax highlighting this editor is doing. This method * fires a property change of type {@link #SYNTAX_STYLE_PROPERTY}. * * @param styleKey The syntax editing style to use, for example, * {@link SyntaxConstants#SYNTAX_STYLE_NONE} or * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. * @see #getSyntaxEditingStyle() * @see SyntaxConstants */ public void setSyntaxEditingStyle(String styleKey) { if (styleKey==null) { styleKey = SYNTAX_STYLE_NONE; } if (!styleKey.equals(syntaxStyleKey)) { String oldStyle = syntaxStyleKey; syntaxStyleKey = styleKey; ((RSyntaxDocument)getDocument()).setSyntaxStyle(styleKey); firePropertyChange(SYNTAX_STYLE_PROPERTY, oldStyle, styleKey); } }
/** * Sets what type of syntax highlighting this editor is doing. This method * fires a property change of type {@link #SYNTAX_STYLE_PROPERTY}. * * @param styleKey The syntax editing style to use, for example, * {@link SyntaxConstants#SYNTAX_STYLE_NONE} or * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. * @see #getSyntaxEditingStyle() * @see SyntaxConstants */ public void setSyntaxEditingStyle(String styleKey) { if (styleKey==null) { styleKey = SYNTAX_STYLE_NONE; } if (!styleKey.equals(syntaxStyleKey)) { String oldStyle = syntaxStyleKey; syntaxStyleKey = styleKey; ((RSyntaxDocument)getDocument()).setSyntaxStyle(styleKey); firePropertyChange(SYNTAX_STYLE_PROPERTY, oldStyle, styleKey); } }
@Test public void testParse_noLanguage() throws Exception { TaskTagParser parser = new TaskTagParser(); parser.setTaskPattern(null); RSyntaxDocument doc = new RSyntaxDocument( SyntaxConstants.SYNTAX_STYLE_NONE); doc.insertString(0, "/* TODO: Fix this */ for", null); ParseResult res = parser.parse(doc, doc.getSyntaxStyle()); Assert.assertEquals(parser, res.getParser()); Assert.assertEquals(0, res.getFirstLineParsed()); Assert.assertEquals(0, res.getLastLineParsed()); List<ParserNotice> notices = res.getNotices(); Assert.assertEquals(0, notices.size()); doc.setSyntaxStyle((String)null); // Not really valid, but whatever res = parser.parse(doc, doc.getSyntaxStyle()); Assert.assertEquals(parser, res.getParser()); Assert.assertEquals(0, res.getFirstLineParsed()); Assert.assertEquals(0, res.getLastLineParsed()); notices = res.getNotices(); Assert.assertEquals(0, notices.size()); }
@Test public void testGetCurlyBracesDenoteCodeBlocks() { // Language that does use curly braces String syntaxStyle = SyntaxConstants.SYNTAX_STYLE_C; doc = new RSyntaxDocument(syntaxStyle); TokenMaker tokenMaker = new CTokenMaker(); Assert.assertEquals(tokenMaker.getCurlyBracesDenoteCodeBlocks(0), doc.getCurlyBracesDenoteCodeBlocks(0)); // Language that does not use curly braces syntaxStyle = SyntaxConstants.SYNTAX_STYLE_XML; doc.setSyntaxStyle(syntaxStyle); tokenMaker = new XMLTokenMaker(); Assert.assertEquals(tokenMaker.getCurlyBracesDenoteCodeBlocks(0), doc.getCurlyBracesDenoteCodeBlocks(0)); // Language in which some sub-languages do, some don't syntaxStyle = SyntaxConstants.SYNTAX_STYLE_HTML; doc.setSyntaxStyle(syntaxStyle); tokenMaker = new HTMLTokenMaker(); Assert.assertEquals(tokenMaker.getCurlyBracesDenoteCodeBlocks(0), doc.getCurlyBracesDenoteCodeBlocks(0)); Assert.assertEquals(tokenMaker.getCurlyBracesDenoteCodeBlocks(1), doc.getCurlyBracesDenoteCodeBlocks(1)); Assert.assertEquals(tokenMaker.getCurlyBracesDenoteCodeBlocks(2), doc.getCurlyBracesDenoteCodeBlocks(2)); // Sanity Assert.assertFalse(tokenMaker.getCurlyBracesDenoteCodeBlocks(0)); Assert.assertTrue(tokenMaker.getCurlyBracesDenoteCodeBlocks(1)); Assert.assertTrue(tokenMaker.getCurlyBracesDenoteCodeBlocks(2)); }
/** * Sets what type of syntax highlighting this editor is doing. This method * fires a property change of type {@link #SYNTAX_STYLE_PROPERTY}. * * @param styleKey The syntax editing style to use, for example, * {@link SyntaxConstants#SYNTAX_STYLE_NONE} or * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. * @see #getSyntaxEditingStyle() * @see SyntaxConstants */ public void setSyntaxEditingStyle(String styleKey) { if (styleKey==null) { styleKey = SYNTAX_STYLE_NONE; } if (!styleKey.equals(syntaxStyleKey)) { String oldStyle = syntaxStyleKey; syntaxStyleKey = styleKey; ((RSyntaxDocument)getDocument()).setSyntaxStyle(styleKey); firePropertyChange(SYNTAX_STYLE_PROPERTY, oldStyle, styleKey); setActiveLineRange(-1, -1); } }
/** * Constructs a plain text document. A default root element is created, * and the tab size set to 5. * * @param tmf The <code>TokenMakerFactory</code> for this document. If * this is <code>null</code>, a default factory is used. * @param syntaxStyle The syntax highlighting scheme to use. */ public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) { putProperty(tabSizeAttribute, Integer.valueOf(5)); lastTokensOnLines = new DynamicIntArray(400); lastTokensOnLines.add(Token.NULL); // Initial (empty) line. s = new Segment(); setTokenMakerFactory(tmf); setSyntaxStyle(syntaxStyle); }
/** * Deserializes a document. * * @param in The stream to read from. * @throws ClassNotFoundException * @throws IOException */ private void readObject(ObjectInputStream in) throws ClassNotFoundException, IOException { in.defaultReadObject(); // Install default TokenMakerFactory. To support custom TokenMakers, // both JVM's should install default TokenMakerFactories that support // the language they want to use beforehand. setTokenMakerFactory(null); // Handle other transient stuff this.s = new Segment(); int lineCount = getDefaultRootElement().getElementCount(); lastTokensOnLines = new DynamicIntArray(lineCount); setSyntaxStyle(syntaxStyle); // Actually install (transient) TokenMaker }
/** * Constructs a plain text document. A default root element is created, * and the tab size set to 5. * * @param tmf The <code>TokenMakerFactory</code> for this document. If * this is <code>null</code>, a default factory is used. * @param syntaxStyle The syntax highlighting scheme to use. */ public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) { super(new RGapContent()); putProperty(tabSizeAttribute, new Integer(5)); lastTokensOnLines = new DynamicIntArray(400); lastTokensOnLines.add(Token.NULL); // Initial (empty) line. s = new Segment(); setTokenMakerFactory(tmf); setSyntaxStyle(syntaxStyle); }
/** * Constructs a plain text document. A default root element is created, * and the tab size set to 5. * * @param tmf The <code>TokenMakerFactory</code> for this document. If * this is <code>null</code>, a default factory is used. * @param syntaxStyle The syntax highlighting scheme to use. */ public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) { super(new GapContent()); putProperty(tabSizeAttribute, new Integer(5)); lastTokensOnLines = new DynamicIntArray(400); lastTokensOnLines.add(Token.NULL); // Initial (empty) line. s = new Segment(); setTokenMakerFactory(tmf); setSyntaxStyle(syntaxStyle); }