Хранение текста для редактирования

Тема в разделе "WASM.A&O", создана пользователем Forever, 30 дек 2008.

  1. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Нужны идеи по следующему вопросу. Нужно реализовать текстовый редактор. ОС значения не имеет, так как ее возможности я использовать не хочу. Т.е. текстовый редактор пишется без использования RichEdit и библиотек Qt, GTK, и так далее. Необходима идея, как эффективно хранить текст :
    1. Быстрое редактирование ( вставка, удаление символов и кусков текста )
    2. Быстрое перемещение по тексту ( есть идея, как сделать редактирование быстро, но это очень замедлит скорость перемещения )
    3. Возможность быстрой отрисовки части текста, попадающей в окно.
    Какие будут идеи? Возможно кто-нибудь подскажет, как это реализовано например в Windows или Qt, GTK, wxWidgets?
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Forever
    если не интересны рич возможности, то, не исключено, что вас заинтересует ропс из состава боехм гц. Там и пример гуй едитора в конплекте.
     
  3. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Мне нужна простая работа с текстом. В дальнейшем в планах добавить подсветку синтаксиса и прочии нужные вещи. Но это потом. Можешь ссылочку дать или хотя бы подробнее про этот редактор?
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    на sf - boehm garbage collector. (Или гну?) есть и другие. Попроще. Например Code Browser. (это не лучшее. это то, что вспомнилось и авторов на форуме не присутствует лично).

    Есть еще сцинтилла.

    PS я ошибся. не ропс, а корд.
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Мапить файл в память и работать как с обычным буфером.
     
  6. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    несколько интересных моментов:

    ширина символов разная, если обрабатывать файл в памяти - как учесть это? предположим - нужно делать jusnufication

    обрабатываем в памяти и выводим всё таки в Рич Эдит - он не индексирует 0Ah 0Dh, в результате индексы симоволов в памяти и в РичЭдите не будут совпадать... - это допустим когда нужно сделать подсветку... У Iczeliona Рич Эдит сначала отрисовывает текст, потом уже используя индексацию эдита, текст перерисовывается... Если установить какойнибудь другой шрифт, а не системный - получается бяка...никак не могу решить эту проблему... т.е решил - нужно отключить транспарент, но теперь появилась другая - при выделении области бэграунд подсвеченых символов - не выделятеся, нужно как-то обрабатывать это...

    интеллигенты, проживающие в кремневой долине слишком увлекаются пивом, мне кажется...
    столько напридумывали...чтобы реализовать простую функцию - нужно перерыть горы документации, читаешь, а там - всё страньше и страньше...
     
  7. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Как ты представляешь себе это? Допустим мне нужно вставить в середину текста один символ. Что тогда делать? Переместить половину текста на один символ вперед? А если я решу отредактировать текст, и начну в его середине что-нибудь набирать? Ты хоть представляешь себе как это все будет тормозить?
    Ширина символов меня не волнует вообще. Я собираюсь использовать моноширинный шрифт.
    Я об этом говорил. Я не собираюсь использовать Рич Эдит. Мне нужна замена для него. Текст будет отрисовываться в ручную. Причем возможна реализация и в консоли.
    Мне нужно только идея о том, как хранить текст в памяти. Остальное неважно. Если проще, то мне нужна структура данных, хранящая текст, поддерживающая следующие операции :
    1. Вставка символа в любое место.
    2. Удаление символа из любого места.
    3-4. То же, что и выше, только для нескольких символов.
    5. Получение куска текста в данном диапазоне.
    Таким образом, меня совершенно не беспокоят тонкости реализации как то : отрисовка, рич едиты, шрифты и прочее...
     
  8. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    сам подумай - в определённой области памяти записаны байты, есть адрес первого байта - вот что получаем после создания файла и записи его в память...

    алгоритмы работы с этими байтами уже есть , мне кажется :), найти бы их - на великом и могучем и реализацию на нормальном человеческом масме, а не на птичьем каконить языке... фасм - свалка пуш-попов - ещё хужее, но многим нравится...

    щас сижу, извращаюсь - резервирую память, открываю файл, делаю в буфере ещё два "раздела" с помощью которых и какой-то матери манипулирую байтами... задача - обработать файл до ввода его в редактор... вроде чего-то получается, а может и нет, не понять пока...
     
  9. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Может быть разбить текст на куски, а их хранить в памяти в виде связного списка?
    Можно посмотреть исходники открытых редакторов, как реализовано там.
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Forever
    Про корды, вроде, писал уже. для таких именно случаев либа и создавалась (во всяком случае так сказано в доке). Впрочем, как хотите. Язык - С.
     
  11. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Blackbeam
    С чего ты взял, что афтар собирается это делать на ассемблере?
    :))

    Vov4ick
    Имхо, во всех нормальных редакторах RichEdit...
     
  12. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    " Лучший метод (на мой взгляд) - это создать собственный edit control. Именно этот метод применяется во многих коммерческих приложений."
    Iczelion, пер. Aquila

    В нормальных ( часто - коммерческих ) редакторах использование РичЭдита проблематично с юридической точки зрения, полной документации по нему может и не быть ... в свободном хождении..
     
  13. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Фразой "ОС значения не имеет" я хотел сказать, что на данном этапе это неважно. В моем понимании редактор будет иметь несколько уровней. Самый низкий уровень - хранение текста и редактирование. Отрисовка текста, получение ввода пользователя - это уже совсем другой уровень. Этим я займусь позже.
    Глянул, спасибо за информацию. Идея прикольная, но он использует Boehm GC, а мне он в проекте не нужен.
    Идея неплохая. Думаю над ней. Здесь есть одна проблема - фрагментация. Нужно придумать как обрабатывать все операции, чтобы в конце концов у меня не получился список, каждый элемент которого хранит один символ.
    Этим собственно и занимаюсь последнее время. Проблема в том, что редакторов написаных с нуля довольно мало. Большая часть редакторов - это надстройки над RichEdit и другими уже готовыми компонентами.
     
  14. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Вот, вот. Практически этим я и занимаюсь. Точнее, я пытаюсь придумать основу, с помощью которой можно будет реализовать edit control. Отрисовка и прочее, не такая сложная вещь. Самое главное - как хранить текст. Если реализовать эффективное хранение текста, то можно быстренько написать свой контрол. Он будет просто интерфейсом.
     
  15. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Мне кажется лучше использовать не связной список, а просто список строк.
    Во многих библиотеках (VCL, MFC, ATL) есть эффективные классы для работы со списками.
     
  16. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Blackbeam
    Iczelion случаем не имел ввиду сабклассирование ричедита?

    Forever
    Имхо, зачем еще делать редактор без ричедита, кроме как для работы в линуксах?
     
  17. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    K10
    совсем таки нет. Большинство серьезных ком редакторов используют свои контролы. Некоторые, но достаточно много, используют сцинтилу. А вот так чтоб класс был "ричедит32", что ли, пока особо не наблюдал.

    Forever
    То есть гц вам мешает. А чем? В бинаре он берет ~30кб места.
     
  18. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    K10
    вы думаете в лине компонентов типа ричедита нет? Вы очень заблуждаетесь. Вообще с позиции "У меня есть старший брат. Он все за меня сделает и вам потом за меня нащелкает", так ничего самому делать не надо. Просто рисоваться достижениями брата и убеждать всех, что вы ничего не делаете, потому что ничего и не надо. Брат уже все поделал. Вот только может ненароком возникнуть ситуация, что дальнейшая братняя помощь начнет приходить только через позицию "баба маня моет пол" с вашей стороны. Для женщин это допустимо, но вы ведь вроде не? Если ошибся - прошу извинить.
     
  19. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    была идея - парсить текст на слова, знаки препинания и создавать объекты - поместить их в базу данных и так далее, пробел или два пробела - тоже слово, т.е - объект.

    тадысь мы будем иметь быстрый доступ к любому объекту, независимо от его расположения в строке, строки как таковой не будет - она будет создаваться из объектов - слов, когда файл нужно будет сохранить...картинки можно ещё воткнуть туда...
     
  20. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Извиняюсь, но что за набор слов?