Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Text editor with syntax highlighting and line numbers?

This is a bit challenging even probably for a team project, let alone for a one-man implementation, but I was trying to put together a simple yet elegant text editor with syntax highlighting, using a JEditorPane. I stumbled upon this which was discontinued and really hard for me to understand with all the lexer files and .lex stuff inside. I even found in some blog that this project was later taken on by some other team but even yet again discontinued. I don't need it to be too fancy, like having code folding and stuff (even though I am tempted to find out how to do this), but I need at least a basic syntax highlighting to exist and pretty much line numbers on the far left side just like Notepad++ for example. Keep in mind that I only need it to highlight Java source-code, at least for now.

What I am looking for is either a tutorial, a well-documented example and sample code, a pre-made package, even a tool for NetBeans can do the trick, I do not neccesarily need the source code written from scratch, I just need an implementation that can be of use. Thanks in advance!

P.S.This is not gonna be commercial or too big, don't ask why I want to reinvent the wheel when there are so many programming editors out there, I am learning and this came up as a nice exercise for me!

like image 432
Angelos Chalaris Avatar asked Oct 01 '12 17:10

Angelos Chalaris


People also ask

Do all code editors put line numbers?

Largely due to the prevalence of interactive text editing in modern operating systems, line numbers are not a feature of most programming languages, even modern Fortran and Basic.

Can notepad Show line numbers?

Open a Notepad file.Go to View and select Status Bar. Enter text and move the cursor to the line you want to find the number for. Look at the bottom in the status bar and you will see the line number.

What is syntax highlighting text editor?

Syntax highlighting refers to the ability to recognize predefined words or patterns of text and display these in different colors or font styles. This is particularly useful for coding and can also be useful for general text editing where you want certain words in a file to display in a different color.


2 Answers

RSyntaxTextArea is BSD licensed and supports your requirements, plus code folding and more. Very simple to use.

like image 95
bobby_light Avatar answered Oct 01 '22 22:10

bobby_light


Well I worked on a similar project and here's what I came up with. As far the line numbers go I used a scrollpane attached to the actual textpane. The scrollpane was then changing numbers with the following code:

public class LineNumberingTextArea extends JTextArea
{
private JTextPane textArea;


/**
 * This is the contructor that creates the LinNumbering TextArea.
 *
 * @param textArea The textArea that we will be modifying to add the 
 * line numbers to it.
 */
public LineNumberingTextArea(JTextPane textArea)
{
    this.textArea = textArea;
    setBackground(Color.BLACK);
    textArea.setFont(new Font("Consolas", Font.BOLD, 14));
    setEditable(false);
}

/**
 * This method will update the line numbers.
 */
public void updateLineNumbers()
{
    String lineNumbersText = getLineNumbersText();
    setText(lineNumbersText);
}


/**
 * This method will set the line numbers to show up on the JTextPane.
 *
 * @return This method will return a String which will be added to the 
 * the lineNumbering area in the JTextPane.
 */
private String getLineNumbersText()
{
    int counter = 0;
    int caretPosition = textArea.getDocument().getLength();
    Element root = textArea.getDocument().getDefaultRootElement();
    StringBuilder lineNumbersTextBuilder = new StringBuilder();
    lineNumbersTextBuilder.append("1").append(System.lineSeparator());

    for (int elementIndex = 2; elementIndex < root.getElementIndex(caretPosition) +2; 
        elementIndex++)
    {
        lineNumbersTextBuilder.append(elementIndex).append(System.lineSeparator());
    }
    return lineNumbersTextBuilder.toString();
}
}

The syntax highlighting is not an easy task, but what I started with was being able to search for strings based off some text files that contained all keywords for a certain language. Basically based off the extension of a file the function would find the correct file and look for words in that file that were contained within the text area.

like image 25
GreenSkies Avatar answered Oct 01 '22 23:10

GreenSkies