|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#31
|
||||
|
||||
Цитата:
Imikle, координируешь ты, как самый опытный. Надеюсь, с этим все согласны? Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#32
|
|||
|
|||
Ладненько. Сегодня, если будет время вечерком, набросаю скелет.
Делаем D7 + synEdit. У кого нет - поставьте. Пока для желающих подумать задачка. Есть разные типы текстовых файлов: Ansi text, UTF8, UTF16 (Unicode). Кстати, можно сделать еще свой формат, думаю, xml-based, но это на будущее. Так вот, нм нужен класс-конвертер. Т.е. ему дается на вход имя файла, а он перекодирует, если надо, и выдает результат в виде Ansi-текста в SynEdit. Кстати, сразу подумайте над расширением этого класса плагинами. Подсказка. Файл UTF8 начинается с символа EF (потом, кажется, идет номер страницы, потом 1-байтовые символы) Файл UTF16 начинается с символов FF FE, потом идут 2х-байтовые символы. |
#33
|
||||
|
||||
Вечерком? 00:10, хороший вечер
Задача простая, создай конфу в аське, напишу решение Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#34
|
|||
|
|||
sorry, у меня всего пол-пятого вечера. И аски нет по корпоративным правилам.
Да, и обратная операция тоже нужна. Из synEdit'а в файл соотв. формата. Делай и выкладывай сюда. |
#35
|
|||
|
|||
Цитата:
Как и обещал - скелет. Не делает ничего, но набор функций первой версии понять можно. |
#36
|
||||
|
||||
Да я ничего не предлагаю. Просто не хочу делать "обертку" под готовые решения. Блокнот наверно уже каждый сделал. Да и подсветку синтаксиса на синэдите для себя все делали. Какой опыт-то получаем? Вобщем, затея есть, но решения ищем легкие. Я ж не говорю про велосипед. Я говорю про командную работу над любой проблемой. Пусть даже это получится очередной синэдит. Но он будет реализован по-другому, с другим функционалом и может даже лучше. Да Бог с вами, друзья. Давайте делать как хотите. Главное чтоб координатор не забывал, что он не один в команде и не поступал "вот я накидал, дальше вы тут присобачивайте". Надо же координировать действия. Кто в какую область и что копать будет. Давайте не будем загибать проект в самом его начале.
И вообще, для начала (ну это сугубо мое личное мнение) определился командой "что хотим видеть", обсудил функционал, дизайнерские решения. Ну а уже потом "рыбу" рисовал. P.S. ну да...я говорю про велосипед но не в том смысле в каком он есть. То что вы хотите - это все равно, что пожарить яичницу в кастрюле. Суть та же что и на сковородке: плитка, масло, жарка разбитого яйца... но только в кастрюле. Да, все круто, удобнее, масло не выплескивается, ещё там чего-то...но суть от этого не изменилась...ну только если яиц можно нашарашить целую кастрюлю и полчить яичницу в 20 см высотой ... а нафига? может попробовать приготовить другое блюдо просто? Последний раз редактировалось dr. F.I.N., 14.07.2010 в 07:04. |
#37
|
||||
|
||||
Цитата:
Может они не знают VCL? Шучу, шучу. А вообще поддерживаю тебя. Нет смысла писать на готовом, хотя для кого как. Желаю удачи в проекте. я в жж |
#38
|
|||
|
|||
Ну что ж SynEdit я поставил...еще бы разобраться в нем, но впрочем я готов
Тут мысля пришла такая.. а не сделать ли несколько вкладок, и чтоб на каждой вкладке независимый документ можно было редактировать Последний раз редактировалось ChinYan, 14.07.2010 в 17:00. |
#39
|
|||
|
|||
Ответы.
1. По поводу SynEdit'а и других компонент. Лично я считаю, что заниматься достаточно нудной и не интересной работой никому не надо. Да, я способен сделать самостоятельно и подсветку синтаксиса, и code folding и многое другое. Но зачем мне этим заниматься, когда можно использовать хорошее решение. Я лучше сконцентрируюсь на решении задач для конкретной программы, чем н реализации (даже не изобретении) очередного велосипеда. 2. Если не интересно возиться с реализацией именно блокнота, то можншь заняться написанием визуальных тем для него. Т.е. перекрытие отрисовки. Или присоединиться к Фениксу в разработке кодера/декодера текста (кстати, где Феникс?). 3. По поводу многостаничгого документа я думал. Там есть несколько проблем (вполне решаемых, как их разрешить я знаю). Думаю, это можно записать в ToDo и сделать попозже. Более того, можно юудет предложить пользователю выбор модели работы - Single or Multiple document. Думаю отложим на следующую версию. |
#40
|
|||
|
|||
Пропал куда-то Феникс. Насчет эдита я поторопился с выводами - там просто установилось еще куча компонентов и я сразу не понял для чего они. В принципе, действительно могу присоеденится к Фениксу с кодировками... осталось только его найти
|
#41
|
||||
|
||||
Феникс всю ночь мотался, отлаживал упавшую защитную прогу на своём сервере. И, разумеется, после такого весь день спал. Проснулся часа два назад, успешно "позавтракал".
Насчёт кодировок, нарыл пару интересных функций, щас немного оптимизирую и вылью сюда. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 14.07.2010 в 21:17. |
#42
|
||||
|
||||
Нашёл вот это:
Код:
function IsTextUTF8(const Source: AnsiString): Boolean; var Chr: Byte; I, Octets: Integer; AllAscii: Boolean; begin if Source <> '' then begin Octets := 0; AllAscii := True; for I := 1 to Length(Source) do begin Chr := Byte(Source[i]); if Chr and $80 <> 0 then AllAscii := False; if Octets = 0 then begin if Chr >= $80 then begin repeat Chr := Chr shl 1; Inc(Octets); until Chr and $80 = 0; Dec(Octets); if Octets = 0 then begin Result := False; Exit; end; end; end else begin if Chr and $C0 <> $80 then begin Result := False; Exit; end; Dec(Octets); end; end; Result := (Octets <= 0) and not AllAscii; end else Result := False; end; А функция IsTextUnicode в Delphi7 есть "искаропки", можно юзать Конвертация... ща найду толковое что-нибудь Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 14.07.2010 в 21:17. |
#43
|
|||
|
|||
Нашел компонент, который перекодирует много кодировок друг в друга... однако решили же не брать сторонних нароботок
На всякий случай выложу http://ifolder.ru/18539267 Последний раз редактировалось ChinYan, 14.07.2010 в 21:52. |
#44
|
||||
|
||||
Накидал макет сайта, зарегаетесь, отпишите мне в ЛС (на этом форуме), сделаю модераторами и дам доступ "везде-куда-хочется-залезть"
Ссылка. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#45
|
|||
|
|||
Как я сказал, нам нужен класс со следующим функционалом:
1. Распознавание кодировки по данным и перекодирование в Ansi 2. Перекодирование в любую кодировку (из тех, что будем поддерживать) 3. Возможность расширения на основе классов/плагинов. На вскидку я бы сделал классы с такими интерфейсами: Код:
TBaseFormatter = class public class function IsThisFormat(AFileName : Srtirng) : Boolean; constructor Load(AFileName : String); property Name : String; end; TTextCoder = class public procedure LoadFile(AFileName : String); procedure SaveFile(AFileName : String; AFormatter : TBaseFormatter); property Formatters[Index : Integer] : TBaseFormatter; end; Это очень грубо и в первой пристрелке. Реально, как я себе это представляю. У нас есть инстанс класса TTextCoder, к которому мы обращаемся для загрузки и сохранения файла. Этот класс так же хранить коллекцию форматтеров для разных кодировок (одна из них дефолтная, т.е. применяемая тогда, когда мы не можем распознать кодировку). Отдельные форматтеры выполнены в виде некоторых классов, занимающихся не только перекодированием текста, но и могущих хранить доп. информацию (например, мы можем сделать некоторые свои форматы, расширенные относительно текста и сохраняющиеся в каком-либо виде). Форматтеры могут быть в виде DLL (плагинов). В этом случае нам потребуется некоторая универсальная обертка для таких форматтеров, но это потом. Для начала надо сделать эти базовые классы. |