Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Разное > Флейм
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 13.07.2010, 22:57
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от dr. F.I.N
вот ЭТО сделал Я...и ТОЛЬКО Я
Кто-то же писал и Delphi, и Windows... и создал компьютеры... Предлагаешь изобрести заного компьютер, и написать свою операционку? Флаг те в руки

Imikle, координируешь ты, как самый опытный. Надеюсь, с этим все согласны?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #32  
Старый 14.07.2010, 00:04
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,233
Версия Delphi: 7, XE3, 10.2
Репутация: 49087
По умолчанию

Ладненько. Сегодня, если будет время вечерком, набросаю скелет.
Делаем D7 + synEdit. У кого нет - поставьте.

Пока для желающих подумать задачка.
Есть разные типы текстовых файлов: Ansi text, UTF8, UTF16 (Unicode).
Кстати, можно сделать еще свой формат, думаю, xml-based, но это на будущее. Так вот, нм нужен класс-конвертер. Т.е. ему дается на вход имя файла, а он перекодирует, если надо, и выдает результат в виде Ansi-текста в SynEdit. Кстати, сразу подумайте над расширением этого класса плагинами.

Подсказка.
Файл UTF8 начинается с символа EF (потом, кажется, идет номер страницы, потом 1-байтовые символы)
Файл UTF16 начинается с символов FF FE, потом идут 2х-байтовые символы.
Ответить с цитированием
  #33  
Старый 14.07.2010, 00:11
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Вечерком? 00:10, хороший вечер
Задача простая, создай конфу в аське, напишу решение
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #34  
Старый 14.07.2010, 00:32
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,233
Версия Delphi: 7, XE3, 10.2
Репутация: 49087
По умолчанию

sorry, у меня всего пол-пятого вечера. И аски нет по корпоративным правилам.

Да, и обратная операция тоже нужна. Из synEdit'а в файл соотв. формата.
Делай и выкладывай сюда.
Ответить с цитированием
  #35  
Старый 14.07.2010, 06:11
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,233
Версия Delphi: 7, XE3, 10.2
Репутация: 49087
По умолчанию

Цитата:
Сообщение от lmikle
Ладненько. Сегодня, если будет время вечерком, набросаю скелет.

Как и обещал - скелет.
Не делает ничего, но набор функций первой версии понять можно.
Вложения
Тип файла: zip Notepad.zip (15.5 Кбайт, 17 просмотров)
Ответить с цитированием
  #36  
Старый 14.07.2010, 06:55
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 615
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Да я ничего не предлагаю. Просто не хочу делать "обертку" под готовые решения. Блокнот наверно уже каждый сделал. Да и подсветку синтаксиса на синэдите для себя все делали. Какой опыт-то получаем? Вобщем, затея есть, но решения ищем легкие. Я ж не говорю про велосипед. Я говорю про командную работу над любой проблемой. Пусть даже это получится очередной синэдит. Но он будет реализован по-другому, с другим функционалом и может даже лучше. Да Бог с вами, друзья. Давайте делать как хотите. Главное чтоб координатор не забывал, что он не один в команде и не поступал "вот я накидал, дальше вы тут присобачивайте". Надо же координировать действия. Кто в какую область и что копать будет. Давайте не будем загибать проект в самом его начале.
И вообще, для начала (ну это сугубо мое личное мнение) определился командой "что хотим видеть", обсудил функционал, дизайнерские решения. Ну а уже потом "рыбу" рисовал.

P.S. ну да...я говорю про велосипед но не в том смысле в каком он есть. То что вы хотите - это все равно, что пожарить яичницу в кастрюле. Суть та же что и на сковородке: плитка, масло, жарка разбитого яйца... но только в кастрюле. Да, все круто, удобнее, масло не выплескивается, ещё там чего-то...но суть от этого не изменилась...ну только если яиц можно нашарашить целую кастрюлю и полчить яичницу в 20 см высотой ... а нафига? может попробовать приготовить другое блюдо просто?

Последний раз редактировалось dr. F.I.N., 14.07.2010 в 07:04.
Ответить с цитированием
  #37  
Старый 14.07.2010, 11:49
Аватар для jijidesign
jijidesign jijidesign вне форума
Прохожий
 
Регистрация: 08.07.2010
Адрес: В 59 районе
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от dr. F.I.N.
Да я ничего не предлагаю. Просто не хочу делать "обертку" под готовые решения. Блокнот наверно уже каждый сделал. Да и подсветку синтаксиса на синэдите для себя все делали. Какой опыт-то получаем? Вобщем, затея есть, но решения ищем легкие. Я ж не говорю про велосипед. Я говорю про командную работу над любой проблемой. Пусть даже это получится очередной синэдит. Но он будет реализован по-другому, с другим функционалом и может даже лучше. Да Бог с вами, друзья. Давайте делать как хотите. Главное чтоб координатор не забывал, что он не один в команде и не поступал "вот я накидал, дальше вы тут присобачивайте". Надо же координировать действия. Кто в какую область и что копать будет. Давайте не будем загибать проект в самом его начале.
И вообще, для начала (ну это сугубо мое личное мнение) определился командой "что хотим видеть", обсудил функционал, дизайнерские решения. Ну а уже потом "рыбу" рисовал.

P.S. ну да...я говорю про велосипед но не в том смысле в каком он есть. То что вы хотите - это все равно, что пожарить яичницу в кастрюле. Суть та же что и на сковородке: плитка, масло, жарка разбитого яйца... но только в кастрюле. Да, все круто, удобнее, масло не выплескивается, ещё там чего-то...но суть от этого не изменилась...ну только если яиц можно нашарашить целую кастрюлю и полчить яичницу в 20 см высотой ... а нафига? может попробовать приготовить другое блюдо просто?

Может они не знают VCL? Шучу, шучу. А вообще поддерживаю тебя. Нет смысла писать на готовом, хотя для кого как. Желаю удачи в проекте.
__________________
я в жж
Ответить с цитированием
  #38  
Старый 14.07.2010, 16:24
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Ну что ж SynEdit я поставил...еще бы разобраться в нем, но впрочем я готов
Тут мысля пришла такая.. а не сделать ли несколько вкладок, и чтоб на каждой вкладке независимый документ можно было редактировать

Последний раз редактировалось ChinYan, 14.07.2010 в 17:00.
Ответить с цитированием
  #39  
Старый 14.07.2010, 20:08
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,233
Версия Delphi: 7, XE3, 10.2
Репутация: 49087
По умолчанию

Ответы.
1. По поводу SynEdit'а и других компонент. Лично я считаю, что заниматься достаточно нудной и не интересной работой никому не надо. Да, я способен сделать самостоятельно и подсветку синтаксиса, и code folding и многое другое. Но зачем мне этим заниматься, когда можно использовать хорошее решение. Я лучше сконцентрируюсь на решении задач для конкретной программы, чем н реализации (даже не изобретении) очередного велосипеда.
2. Если не интересно возиться с реализацией именно блокнота, то можншь заняться написанием визуальных тем для него. Т.е. перекрытие отрисовки. Или присоединиться к Фениксу в разработке кодера/декодера текста (кстати, где Феникс?).
3. По поводу многостаничгого документа я думал. Там есть несколько проблем (вполне решаемых, как их разрешить я знаю). Думаю, это можно записать в ToDo и сделать попозже. Более того, можно юудет предложить пользователю выбор модели работы - Single or Multiple document. Думаю отложим на следующую версию.
Ответить с цитированием
  #40  
Старый 14.07.2010, 20:31
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Пропал куда-то Феникс. Насчет эдита я поторопился с выводами - там просто установилось еще куча компонентов и я сразу не понял для чего они. В принципе, действительно могу присоеденится к Фениксу с кодировками... осталось только его найти
Ответить с цитированием
  #41  
Старый 14.07.2010, 20:47
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Феникс всю ночь мотался, отлаживал упавшую защитную прогу на своём сервере. И, разумеется, после такого весь день спал. Проснулся часа два назад, успешно "позавтракал".

Насчёт кодировок, нарыл пару интересных функций, щас немного оптимизирую и вылью сюда.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 14.07.2010 в 21:17.
Ответить с цитированием
  #42  
Старый 14.07.2010, 21:11
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Нашёл вот это:
Код:
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  
Старый 14.07.2010, 21:47
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Нашел компонент, который перекодирует много кодировок друг в друга... однако решили же не брать сторонних нароботок
На всякий случай выложу
http://ifolder.ru/18539267

Последний раз редактировалось ChinYan, 14.07.2010 в 21:52.
Ответить с цитированием
  #44  
Старый 14.07.2010, 22:15
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Накидал макет сайта, зарегаетесь, отпишите мне в ЛС (на этом форуме), сделаю модераторами и дам доступ "везде-куда-хочется-залезть"
Ссылка.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #45  
Старый 14.07.2010, 22:18
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,233
Версия Delphi: 7, XE3, 10.2
Репутация: 49087
По умолчанию

Как я сказал, нам нужен класс со следующим функционалом:
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 (плагинов). В этом случае нам потребуется некоторая универсальная обертка для таких форматтеров, но это потом. Для начала надо сделать эти базовые классы.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2018

ВКонтакте   Facebook   Twitter