텍스트 에디터를 만들려고 합니다.

choim의 이미지

텍스트 에디터를 만들려고 합니다.

실은 과제입니다만, 어디서부터 시작해야 할지 막막한 관계로 고수님들의 조언을 구하고자 합니다.

지금단계에서 고민하는 부분은, 텍스트를 메모리상에 어떻게 올려야 할지

강사분은 링크드 리스트를 이용하라고 말씀하셨습니다만, 링크드 리스트로 메모리상에 올린다고 하면, 단어단위로 노드를 만들어 올려야 할지, 문자단위로 올려야 할지...

단어단위로 한다고 하면, 아마도 띄어쓰기가 없는 문자같은것은, 노드에 지정된 배열범위를 벋어나 버릴테니 생각하기 힘들거 같은데요...

그렇다고 문자단위로 노드를 만든다고 하면, C 에서 제공하는 문자열 관련 함수를 쓰기 힘들어질거 같아서 그것도 고민입니다.(아닌가요? 제가 아는게 많지 않아서...)

혹시 참고할만한(이용할만한) 라이브러리나, 자료를 아시는 분은 그것도 좀 부탁드리고 싶습니다.

그럼... 고수님들의 도움을 부탁드리며...

미리 감사의 말을 남깁니다.

kewlbear의 이미지

에디터를 만들 때는 줄 단위의 링크드 리스트를 많이 쓰지 않나요?

mike의 이미지


김상형의 Windows API 실전 프로그래밍

텍스트 에디터를 만드는 과정을 보여주는 책이죠.. 윈도우지만..

익명 사용자의 이미지

김상현님의 당근에디터가 포함되어있어요,
참고로 http://www.soen.kr/project/dangeun/dangeun.htm 에서 소스자료 다운받을수있어요.
GPL이라 다양하게 응용할수도있습니다.
홧팅입니다.

pk0001의 이미지

"김상"님의 당근편집기입니다.

dormael의 이미지

저는 자바가 주 언어라 큰 도움이 안되겠지만, 그래도 이것저것 컴포넌트는 만들어 보긴 했습니다.

우선 과제로 만드시는 거고 제 생각에 텍스트 에디터는 그리 단순한게 아니기 때문에 구현할 대상에 대해 충분한 기능이 있는 고수준의 라이브러리를 최대한 활용하시는게 나을거 같습니다.

기본적으로 제공되는 것들은 대부분 어플리케이션을 만들기에는 개발자가 구현하고 신경써야 할 부분이 너무 많으니까요.

강사분께서 링크드리스트를 이용하라고 하셨으니까 우선 그걸 이용해 큰 문자열을 다양하게 처리해주는 오픈소스 라이브러리를 이용하시거나 참조하셔서 개발하는것이 좋을것 같습니다.

아, vi나 emacs의 소스를 보시면 찾을수 있을듯 하네요. nano두 있구요.

결과물의 기능과 과제 기간을 잘 몰라서 제가 추천하는 방법이 맞는지는 모르겠네요.
뭐 과제니까 실제와 같은 결과물을 기대하는게 아니긴 하겠지만 텍스트 에디터는 제가 알고있는 상황에서는 아주 어려운 과제 같네요.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

babynewton의 이미지

걍 에디터를 만든다고 하시니,,,
vi도 에디터고 vs도 에디터인데,
기능과 성능의 바운더리가 없네요...
그걸 먼저 정의하심이 좋을듯 하네요...
notepad 수준이라면 링크드 리스트도 필요없을듯 하고,
vi 수준으로 원하신다면, flyweight와 command 패턴말고도 동원해야될 기술이 많을듯...

choim의 이미지

답변주신 kewlbear님 mike님 dormael님 babynewton님

모두 감사합니다. ^^

예 일단 기존에 만들어진 editor 들의 소스는 살펴보고 있습니다만, 제가 아는 수준에서 유명한 editor 들은 이미 너무 덩치가 커서, 제 수준에선 분석하기가 영 까다롭네요. ^^;

기능이라고 하면, 노트패드보다 좀더 기능이 나은 수준(?) 정도 됩니다.
단 console 기반으로 돌아가야 하구요.

실은 강사님이 리눅스 유저인지는 몰라도, 정의된 내용은 UI 부터 기능키 작동방식(편집모드의 구분) 까지 little vi 라고 봐도 무리는 없겠네요.

일단 답변주신 내용을 가지고 열심히 구글링 해봐야 할것 같습니다. ^^
(flyweight와 command패턴이 문자열 처리와 관련된 기술인가요? 음... 아무튼 참고해서 머리좀 써 보겠습니다. ^^)

그럼 답변주신분모두 다시 한번 감사드립니다. (__

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.