محرر النصوص مع تسليط الضوء على بناء الجملة وأرقام الأسطر؟

StackOverflow https://stackoverflow.com//questions/12678104

سؤال

يعد هذا أمرًا صعبًا بعض الشيء حتى بالنسبة لمشروع جماعي، ناهيك عن التنفيذ الفردي، لكنني كنت أحاول إنشاء محرر نصوص بسيط ولكنه أنيق مع تمييز بناء الجملة، باستخدام JEditorPane.لقد تعثرت هذا والذي تم إيقافه وكان من الصعب جدًا بالنسبة لي أن أفهمه مع جميع ملفات lexer وأشياء .lex بداخلها.حتى أنني وجدت في بعض المدونات أن هذا المشروع قد تم تنفيذه لاحقًا من قبل فريق آخر ولكن تم إيقافه مرة أخرى.لا أحتاج أن يكون الأمر خياليًا جدًا، مثل طي التعليمات البرمجية وأشياء أخرى (على الرغم من أنني أميل إلى معرفة كيفية القيام بذلك)، ولكني بحاجة على الأقل إلى تسليط الضوء على بناء الجملة الأساسي في الوجود وإلى حد كبير أرقام الأسطر في أقصى الجانب الأيسر تمامًا مثل برنامج Notepad++ على سبيل المثال.ضع في اعتبارك أنني أحتاج فقط إلى إبراز كود مصدر Java، على الأقل في الوقت الحالي.

ما أبحث عنه هو إما برنامج تعليمي، أو مثال موثق جيدًا ونموذج للتعليمات البرمجية، أو حزمة معدة مسبقًا، أو حتى أداة لـ NetBeans يمكنها القيام بالخدعة، ولست بحاجة بالضرورة إلى كود المصدر المكتوب من الصفر، أنا فقط بحاجة التنفيذ الذي يمكن أن تكون ذات فائدة.شكرا لك مقدما!

ملحوظة: لن يكون هذا تجاريًا أو كبيرًا جدًا، لا تسأل لماذا أرغب في إعادة اختراع العجلة عندما يكون هناك الكثير من محرري البرمجة، فأنا أتعلم وقد جاء هذا كتمرين جيد بالنسبة لي!

هل كانت مفيدة؟

المحلول

RSyntaxTextArea مرخص من BSD ويدعم متطلباتك، بالإضافة إلى طي التعليمات البرمجية والمزيد.سهل الاستخدام للغاية.

نصائح أخرى

حسنًا، لقد عملت في مشروع مماثل وإليكم ما توصلت إليه.بقدر ما تذهب أرقام الأسطر، استخدمت شريط التمرير المرفق بجزء النص الفعلي.كان جزء التمرير يقوم بعد ذلك بتغيير الأرقام بالرمز التالي:

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();
}
}

إن تسليط الضوء على بناء الجملة ليس بالمهمة السهلة، ولكن ما بدأت به هو القدرة على البحث عن سلاسل بناءً على بعض الملفات النصية التي تحتوي على جميع الكلمات الرئيسية للغة معينة.بناءً على امتداد الملف، تقوم الوظيفة بالعثور على الملف الصحيح والبحث عن الكلمات الموجودة في هذا الملف والتي كانت موجودة داخل منطقة النص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top