Нужны идеи по следующему вопросу. Нужно реализовать текстовый редактор. ОС значения не имеет, так как ее возможности я использовать не хочу. Т.е. текстовый редактор пишется без использования RichEdit и библиотек Qt, GTK, и так далее. Необходима идея, как эффективно хранить текст : 1. Быстрое редактирование ( вставка, удаление символов и кусков текста ) 2. Быстрое перемещение по тексту ( есть идея, как сделать редактирование быстро, но это очень замедлит скорость перемещения ) 3. Возможность быстрой отрисовки части текста, попадающей в окно. Какие будут идеи? Возможно кто-нибудь подскажет, как это реализовано например в Windows или Qt, GTK, wxWidgets?
Forever если не интересны рич возможности, то, не исключено, что вас заинтересует ропс из состава боехм гц. Там и пример гуй едитора в конплекте.
Мне нужна простая работа с текстом. В дальнейшем в планах добавить подсветку синтаксиса и прочии нужные вещи. Но это потом. Можешь ссылочку дать или хотя бы подробнее про этот редактор?
на sf - boehm garbage collector. (Или гну?) есть и другие. Попроще. Например Code Browser. (это не лучшее. это то, что вспомнилось и авторов на форуме не присутствует лично). Есть еще сцинтилла. PS я ошибся. не ропс, а корд.
несколько интересных моментов: ширина символов разная, если обрабатывать файл в памяти - как учесть это? предположим - нужно делать jusnufication обрабатываем в памяти и выводим всё таки в Рич Эдит - он не индексирует 0Ah 0Dh, в результате индексы симоволов в памяти и в РичЭдите не будут совпадать... - это допустим когда нужно сделать подсветку... У Iczeliona Рич Эдит сначала отрисовывает текст, потом уже используя индексацию эдита, текст перерисовывается... Если установить какойнибудь другой шрифт, а не системный - получается бяка...никак не могу решить эту проблему... т.е решил - нужно отключить транспарент, но теперь появилась другая - при выделении области бэграунд подсвеченых символов - не выделятеся, нужно как-то обрабатывать это... интеллигенты, проживающие в кремневой долине слишком увлекаются пивом, мне кажется... столько напридумывали...чтобы реализовать простую функцию - нужно перерыть горы документации, читаешь, а там - всё страньше и страньше...
Как ты представляешь себе это? Допустим мне нужно вставить в середину текста один символ. Что тогда делать? Переместить половину текста на один символ вперед? А если я решу отредактировать текст, и начну в его середине что-нибудь набирать? Ты хоть представляешь себе как это все будет тормозить? Ширина символов меня не волнует вообще. Я собираюсь использовать моноширинный шрифт. Я об этом говорил. Я не собираюсь использовать Рич Эдит. Мне нужна замена для него. Текст будет отрисовываться в ручную. Причем возможна реализация и в консоли. Мне нужно только идея о том, как хранить текст в памяти. Остальное неважно. Если проще, то мне нужна структура данных, хранящая текст, поддерживающая следующие операции : 1. Вставка символа в любое место. 2. Удаление символа из любого места. 3-4. То же, что и выше, только для нескольких символов. 5. Получение куска текста в данном диапазоне. Таким образом, меня совершенно не беспокоят тонкости реализации как то : отрисовка, рич едиты, шрифты и прочее...
сам подумай - в определённой области памяти записаны байты, есть адрес первого байта - вот что получаем после создания файла и записи его в память... алгоритмы работы с этими байтами уже есть , мне кажется , найти бы их - на великом и могучем и реализацию на нормальном человеческом масме, а не на птичьем каконить языке... фасм - свалка пуш-попов - ещё хужее, но многим нравится... щас сижу, извращаюсь - резервирую память, открываю файл, делаю в буфере ещё два "раздела" с помощью которых и какой-то матери манипулирую байтами... задача - обработать файл до ввода его в редактор... вроде чего-то получается, а может и нет, не понять пока...
Может быть разбить текст на куски, а их хранить в памяти в виде связного списка? Можно посмотреть исходники открытых редакторов, как реализовано там.
Forever Про корды, вроде, писал уже. для таких именно случаев либа и создавалась (во всяком случае так сказано в доке). Впрочем, как хотите. Язык - С.
Blackbeam С чего ты взял, что афтар собирается это делать на ассемблере? ) Vov4ick Имхо, во всех нормальных редакторах RichEdit...
" Лучший метод (на мой взгляд) - это создать собственный edit control. Именно этот метод применяется во многих коммерческих приложений." Iczelion, пер. Aquila В нормальных ( часто - коммерческих ) редакторах использование РичЭдита проблематично с юридической точки зрения, полной документации по нему может и не быть ... в свободном хождении..
Фразой "ОС значения не имеет" я хотел сказать, что на данном этапе это неважно. В моем понимании редактор будет иметь несколько уровней. Самый низкий уровень - хранение текста и редактирование. Отрисовка текста, получение ввода пользователя - это уже совсем другой уровень. Этим я займусь позже. Глянул, спасибо за информацию. Идея прикольная, но он использует Boehm GC, а мне он в проекте не нужен. Идея неплохая. Думаю над ней. Здесь есть одна проблема - фрагментация. Нужно придумать как обрабатывать все операции, чтобы в конце концов у меня не получился список, каждый элемент которого хранит один символ. Этим собственно и занимаюсь последнее время. Проблема в том, что редакторов написаных с нуля довольно мало. Большая часть редакторов - это надстройки над RichEdit и другими уже готовыми компонентами.
Вот, вот. Практически этим я и занимаюсь. Точнее, я пытаюсь придумать основу, с помощью которой можно будет реализовать edit control. Отрисовка и прочее, не такая сложная вещь. Самое главное - как хранить текст. Если реализовать эффективное хранение текста, то можно быстренько написать свой контрол. Он будет просто интерфейсом.
Мне кажется лучше использовать не связной список, а просто список строк. Во многих библиотеках (VCL, MFC, ATL) есть эффективные классы для работы со списками.
Blackbeam Iczelion случаем не имел ввиду сабклассирование ричедита? Forever Имхо, зачем еще делать редактор без ричедита, кроме как для работы в линуксах?
K10 совсем таки нет. Большинство серьезных ком редакторов используют свои контролы. Некоторые, но достаточно много, используют сцинтилу. А вот так чтоб класс был "ричедит32", что ли, пока особо не наблюдал. Forever То есть гц вам мешает. А чем? В бинаре он берет ~30кб места.
K10 вы думаете в лине компонентов типа ричедита нет? Вы очень заблуждаетесь. Вообще с позиции "У меня есть старший брат. Он все за меня сделает и вам потом за меня нащелкает", так ничего самому делать не надо. Просто рисоваться достижениями брата и убеждать всех, что вы ничего не делаете, потому что ничего и не надо. Брат уже все поделал. Вот только может ненароком возникнуть ситуация, что дальнейшая братняя помощь начнет приходить только через позицию "баба маня моет пол" с вашей стороны. Для женщин это допустимо, но вы ведь вроде не? Если ошибся - прошу извинить.
была идея - парсить текст на слова, знаки препинания и создавать объекты - поместить их в базу данных и так далее, пробел или два пробела - тоже слово, т.е - объект. тадысь мы будем иметь быстрый доступ к любому объекту, независимо от его расположения в строке, строки как таковой не будет - она будет создаваться из объектов - слов, когда файл нужно будет сохранить...картинки можно ещё воткнуть туда...