Ivann писал(а): http://www.hiasm.com//getfile/8329 с кодировочкой та проблемки
Никаких проблем там нет и не было, качать надо через загрузку файлов, если у тебя Опера. Это проблемы сервера Dilmы, а не схемы
Вот, схема без ссылки, и где там проблемы
Add(MainForm,3879120,175,133) { Left=10 Top=10 Width=378 Height=329 Ctl3D=0 Position=1 } Add(InlineCode,7900557,238,189) { WorkPoints=#6:doWork| EventPoints=#8:onResult| DataPoints=#4:Text| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|1:{|9:Описание:|0:|94:Позволяет фильтровать нецензурные выражения в чате, на доске объявлений, комментариях режимов.|67:Облегченная версия - мат скорее просочится, чем будет заблокирован.|0:|0:|20:Разработчик: Dentall|31:Словарь подготовил: Agent Smith|0:|22:(c) 2004 GlumClub team|33:(c) 2004 Portnoff Company Limited|28:----------------------------|0:|0:|29:Последняя ревизия: 12/01/2005|0:|24:новые макросы исключений|0:|19:ревизия: 11/11/2004|28:1. Сделан словарь исключений|29:2. Теперь не теряется буква Ё|0:|19:ревизия: 08/11/2004|0:|21:1. Исправлен словарь.|50: (Проведен анализ на электронных книгах, а также|24: на чат-логах за год).|75:2. Проведена якобы оптимизация ;) Все равно не тестирвалось, чуда не ждите,|47: так сказать, по теории вроде как и должно...|0:|36:Оцененный ретинг обработки текста на|51:Athlon 2500+ / Nforce2 Ultra / 256Mb - 28-30 кб/сек|55:(Тест не совсем верный - чтение из файла и запись лога.|31:Реальная скорость гораздо выше)|0:|19:ревизия: 17/08/2004|27:[Fixed] обработка буквы "Ё"|36:[Fixed] обновлен и исправлен словарь|1:}|0:|1:{|16:Описание работы.|63:Из входной строки поочередно читаем массивы в 3,4,5,6 символов.|65:Двоичным поиском ищем, не попадают ли заданные кусочки в словарь.|50:Если попадают - заменяем найденный кусок на точки.|1:}|0:|54:// ВНИМАНИЕ!!! УДАЛЯЯ ИЛИ ДОБАВЛЯЯ ЭЛЕМЕНТЫ В СЛОВАРЬ,|59:// НЕ ЗАБЫВАЙТЕ МЕНЯТЬ ЗНАЧЕНИЯ HIGH В ФУНКЦИИ binarylookup|78:// ПОМНИТЕ, ВСЕ ЭЛЕМЕНТЫ ДОЛЖНЫ БЫТЬ *СТРОГО* ОТСОРТИРОВАНЫ ПО ВОЗРАСТАНИЮ !!!|0:|72:// Раскомментируйте для замены матов не точками, а случайными символами.|23:// {$DEFINE RANDOMSYMB}|0:|0:|30:uses Windows,kol,Share,Debug;|0:|44:const fuckdata3: array[1..34] of string[3] =|3: (|10: 'аеб',|10: 'бзд',|10: 'блд',|10: 'блт',|10: 'бля',|10: 'бсд',|10: 'вфл',|10: 'гвн',|10: 'гнд',|10: 'дрм',|10: 'дрч',|10: 'дрщ',|10: 'еби',|10: 'ебк',|10: 'ебс',|10: 'ебт',|10: 'ебу',|10: 'ебц',|10: 'епт',|10: 'жоп',|10: 'мнд',|10: 'пзд',|10: 'прд',|10: 'пэд',|10: 'пэз',|10: 'сри',|10: 'сру',|10: 'хер',|10: 'хуе',|10: 'хуи',|10: 'хуй',|10: 'хуя',|10: 'чмо',|11: 'яба');|0:|44:const fuckdata4: array[1..57] of string[4] =|3: (|11: 'блюю',|11: 'бляд',|11: 'блят',|11: 'боеб',|11: 'вофл',|11: 'гавн',|11: 'говн',|11: 'дрещ',|11: 'дрищ',|11: 'дроч',|11: 'дрст',|11: 'дрьм',|11: 'дрэч',|11: 'дрюч',|11: 'дряч',|11: 'ебал',|11: 'ебан',|11: 'ебар',|11: 'ебат',|11: 'ебет',|11: 'ебин',|11: 'ебну',|11: 'ебон',|11: 'ебор',|11: 'елда',|11: 'ибан',|11: 'курв',|11: 'монд',|11: 'муда',|11: 'муде',|11: 'муди',|11: 'мудк',|11: 'мудл',|11: 'мудо',|11: 'пдри',|11: 'педр',|11: 'пезд',|11: 'перд',|11: 'песд',|11: 'пидр',|11: 'пизд',|11: 'пирд',|11: 'писд',|11: 'пукн',|11: 'пэрд',|11: 'сука',|11: 'суки',|11: 'суку',|11: 'суча',|11: 'суче',|11: 'сучи',|11: 'сучк',|11: 'сучр',|11: 'сучу',|11: 'сцит',|11: 'хуле',|10: 'хуль'|6: );|0:|44:const fuckdata5: array[1..29] of string[5] =|3: (|12: 'гавен',|12: 'гандо',|12: 'говен',|12: 'гондо',|12: 'дрест',|12: 'дрист',|12: 'дрэст',|12: 'дряст',|12: 'ебень',|12: 'залуп',|12: 'здаты',|12: 'золуп',|12: 'какаш',|12: 'какть',|12: 'малаф',|12: 'менет',|12: 'минет',|12: 'педар',|12: 'педер',|12: 'педир',|12: 'педор',|12: 'педри',|12: 'пидар',|12: 'пидер',|12: 'пидор',|12: 'пипис',|12: 'письк',|12: 'уебок',|11: 'целка'|6: );|0:|43:const fuckdata6: array[1..2] of string[6] =|3: (|13: 'меньет',|12: 'миньет'|6: );|0:|45:const skipwords4: array[1..60] of string[4] =|3: (|11: 'абля',|11: 'асуч',|11: 'всуч',|11: 'гого',|11: 'деби',|11: 'дебн',|11: 'жебн',|11: 'заго',|11: 'зяба',|11: 'ипед',|11: 'ипид',|11: 'ихуй',|11: 'леба',|11: 'леби',|11: 'лебк',|11: 'лебл',|11: 'лебн',|11: 'лебу',|11: 'лебц',|11: 'лмуд',|11: 'неби',|11: 'небу',|11: 'небы',|11: 'непт',|11: 'обля',|11: 'одря',|11: 'осек',|11: 'рбля',|11: 'реба',|11: 'ребе',|11: 'реби',|11: 'ребл',|11: 'ребо',|11: 'ребс',|11: 'ребт',|11: 'ребу',|11: 'ребц',|11: 'репт',|11: 'риба',|11: 'рсук',|11: 'ряба',|11: 'септ',|11: 'срис',|11: 'сруб',|11: 'тебл',|11: 'тряс',|11: 'убля',|11: 'ухер',|11: 'хере',|15: 'херс', |11: 'херц',|11: 'хляб',|11: 'цепт',|11: 'чебн',|11: 'чебу',|11: 'чмок',|11: 'шебс',|11: 'шепт',|11: 'щебе',|10: 'юбля'|6: );|0:|44:const skipwords5: array[1..4] of string[5] =|3: (|12: 'махер',|12: 'педро',|12: 'сукач',|11: 'херув'|6: );|0:|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onResult:THI_Event;|19: Text:THI_Event;|48: procedure doWork(var _Data:TData; idx:word);|5: end;|0:|14:implementation|0:|28:// Grabbed from SysUtils.pas|0:|56:function AnsiCompareText(const S1, S2: string): Integer;|5:begin|74: Result := CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, PChar(S1),|43: Length(S1), PChar(S2), Length(S2)) - 2;|4:end;|0:|17:// Двоичный поиск|61:// здесь Delphi выдает 2 предупреждения, но они не сбудутся -|45:// мы всегда передаем параметр Size правильно|0:|74:function binarylookup(const phrase: string; const size: integer): boolean;|3:var|31: low, high, mid, cmp: integer;|5:begin|18: result := False;|11: low := 1;|0:|14: case size of|62: 3: high := 34; // Не забывайте корректировать эти значения|49: 4: high := 57; // при добавлении или удалении|42: 5: high := 29; // элементов из словаря|75: 6: high := 2; // !!! (Для ускорения работы здесь не стоит high(array);|18: 7: high := 60;|16: 8: high := 4|20: else high := 0; |6: end;|0:|24: if high > 0 then begin|30: while low <= high do begin|32: mid := (low + high) shr 1;|18: case size of|58: 3: cmp := AnsiCompareText(phrase, fuckdata3[mid]);|58: 4: cmp := AnsiCompareText(phrase, fuckdata4[mid]);|58: 5: cmp := AnsiCompareText(phrase, fuckdata5[mid]);|58: 6: cmp := AnsiCompareText(phrase, fuckdata6[mid]);|59: 7: cmp := AnsiCompareText(phrase, skipwords4[mid]);|58: 8: cmp := AnsiCompareText(phrase, skipwords5[mid])|22: else cmp := 0;|10: end;|37: if cmp < 0 then high := mid - 1|41: else if cmp > 0 then low := mid + 1|16: else begin|22: result := True;|13: break;|10: end;|8: end;|6: end;|4:end;|0:|67:procedure writechars(var data: string; const from, count: integer);|3:var|20: i, tolen: integer;|5:begin|24: tolen := from + count;|27: for i := from to tolen do|19: data[i] := '.';|4:end;|0:|28:function getplugname: PChar;|5:begin|28: result := 'АнтиматУльтра';|4:end;|0:|57:procedure yo_to_e(var input: string; const len: integer);|3:var|13: i: integer;|5:begin|22: for i := 1 to len do|47: if input[i] = 'ё' then input[i] := 'е' else|45: if input[i] = 'Ё' then input[i] := 'Е';|4:end;|0:|39:function workfunc(input: Pchar): Pchar;|3:var|16: s, s1: string;|18: i, len: integer;|20: block3: string[3];|20: block4: string[4];|20: block5: string[5];|20: block6: string[6];|5:begin|13: s := input;|14: s1 := input;|23: len := length(s) - 2;|22: yo_to_e(s, len + 2);|9: i := 1;|0:|21: while (i <= len) do|7: begin|0:|76:// Начинаем копировать с большего к меньшему - сперва первые 6 байт перейдут|73:// из памяти в кэш, остальное копирование будет происходить уже из кэша -|57:// мы не создадим пенальти. По вопросам оптимизации читай|80:// К. Касперски "Техника оптимизации программ: эффективное использование памяти"|0:|0:|14:// Примечание:|74:// Хотя, учитывая особенности архитектур современных компьютеров, порядок,|82:// скорее всего, не имеет значения - чтение и запись происходит все равно блоками,|63:// значительно превышающими по размеру используемые кусочки ;).|83:// Все равно рекомендую почитать указанную выше книгу, не смотря на ее дикую цену -|39:// она весьма занимательная и полезная.|0:|28: block6 := copy(s, i, 6);|28: block5 := copy(s, i, 5);|28: block4 := copy(s, i, 4);|28: block3 := copy(s, i, 3);|0:|50:// Поиск элементов производим в обратном порядке -|57:// наибольшая вероятность встретить короткий блок текста.|0:|14:// Примечание:|66:// Здесь тоже не все не совсем верно - кусочков по 4 буквы больше,|83:// чем трехбуквенных. У кого есть желание и время - погоняйте по тестам скорости ;)|67:// Родина вас не забудет. (Если вы не забудете выслать нам отчет на|22:// glumclub@mail.ru ;)|0:|26:// сперва ищем исключения!|35: if binarylookup(block5, 8) then|15: inc(i, 5)|8: else|37: if binarylookup(block4, 7) then|17: inc(i, 4)|10: else|39: if binarylookup(block4, 4) then|13: begin|31: writechars(s1, i, 3);|20: inc(i, 4);|16: end else|41: if binarylookup(block3, 3) then|15: begin|33: writechars(s1, i, 2);|47: inc(i, 3); // Здесь была ошибка !!!|18: end else|43: if binarylookup(block5, 5) then|17: begin|35: writechars(s1, i, 4);|24: inc(i, 5);|20: end else|45: if binarylookup(block6, 6) then|19: begin|37: writechars(s1, i, 5);|26: inc(i, 6);|30: end else inc(i);|6: end;|22: Result := PChar(s1);|4:end;|0:|29:procedure THiAsmClass.doWork;|16:var s: string;|5:begin|31: s:= ReadString(_Data, Text);|27: s := workfunc(PChar(s));|27: _hi_onEvent(onResult,s);|4:end;|0:|4:end.| link(onResult,4254544:doEvent1,[]) link(Text,5365275:Text,[]) } Add(ListBox,5365275,238,119) { Left=5 Top=10 Width=175 Height=225 Strings=#20:бля, ну вы и козлы !|14:гондоны сраные|14:пидары гнойные| } Add(ListBox,9798040,364,182) { Left=185 Top=10 Width=175 Height=225 } Add(Button,10794957,175,189) { Left=130 Top=250 Width=110 Height=35 Font=[MS Sans Serif,8,1,0,1] TabOrder=-1 link(onClick,7900557:doWork,[]) } Add(Hub,4254544,287,189) { link(onEvent1,9798040:doClear,[]) link(onEvent2,9798040:doText,[(341,202)(341,209)]) }
|