ActionScript, выделение подстроки и кириллица

В посте «ActionScript 3.0: выделение подстроки в текстовом поле» рассматривалось готовое решение для подсветки искомых слов в текстовом поле. Ммм... Но выяснилось, что работает это хорошо только с английским текстом. А вот с кириллицей возникают проблемы: для регулярных выражений не срабатывает флаг «игнорировать регистр». То есть, если мы хотим выделить слово «Псков», то регулярное выражение выделит только слово «Псков», но пропустит такие варианты, как «ПСКОВ» и «псков». Вот так вот... Впрочем, эту ситуацию можно исправить и своими кривыми ручками. Например, так...

Код ActionScript 3.0:

/* текст, в котором будем искать и выделять подстроку или целые словосочетания */ var str:String = 'Псков, город, центр Псковской области РСФСР. Расположен на р. Великая (впадает в Псковское озеро) при слиянии её с р. Пскова. Узел ж.-д. линий (на Ленинград, Вильнюс, Бологое, Ригу) и шоссейных дорог. 146 тыс. жителей (1974; 43,2 тыс. в 1926; 60 тыс. в 1939; 81 тыс. в 1959). \nП. впервые упоминается под 903 ("Повесть временных лет", Лаврентьевская летопись). С 12 в. входил в состав Новгородской феодальной республики. С 1348 - центр самостоятельного княжества Псковской феодальной республики. В 13-16 вв. П. - крупный торгово-экономический и культурный центр. В П. получили распространение летописание (см. Псковские летописи), берестяные грамоты: псковская архитектура и живопись являются одной из основных школ древнерусского искусства (см. Псковская школа).П. - передовая крепость в борьбе русского народа против агрессии немецких рыцарей-феодалов (с середины 13 в. Ливонского ордена)и Великого княжества Литовского, успешно выдержавшая 26 осад. С 1510 П. - в составе Русского централизованного государства. В период Ливонской войны 1558-83 героическая Псковская оборона 1581-82 сорвала захватнические планы Батория. Обострение классовых противоречий в 17 в. проявилось в П. в двух крупных восстаниях: 1608-1611 и Псковском восстании 1650. К концу 17 в. П. начинает терять экономическое могущество, но в связи с Северной войной 1700-21 возрастает его оборонное значение. С 1777 - губернский город. Основание Петербурга ускорило экономический упадок П., а с присоединением Белоруссии к России в конце 18 в. он теряет значение и военной крепости. На протяжении 19 - начала 20 вв. П. - провинциальный город со слаборазвитой промышленностью (льняной, кожевенной, гончарной). \nС 26 февраля по 19 мая 1900 в П. под негласным надзором полиции жил В. И. Ленин (в апреле проводил Псковское совещание революционных марксистов и "легальных марксистов" по вопросу об их содействии изданию газеты "Искра"). Летом 1903 в П. оформилась социал-демократическая организация. В период 1-й мировой войны 1914-18 с конца 1915 в П. находился штаб Северного фронта и размещался 30-тысячный гарнизон. 2 (15) марта 1917 в П. царь Николай II отрекся от престола. 4 (17) марта в городе был создан Совет. Советская власть установлена 26 октября (8 ноября) 1917. С 26 февраля по 25 ноября 1918 П. был оккупирован германскими войсками. 9 июля 1941 в ходе Великой Отечественной войны 1941-45 был захвачен немецко-фашистскими оккупантами, разрушившими промышленные предприятия и культурно-исторические памятники. Освобожден Советской Армией 23 июля 1944. С 23 августа 1944 П. - областной центр. \nП. - значительный промышленный центр. Ведущая отрасль - машиностроение; заводы города выпускают электрооборудование, радиодетали, телефонную аппаратуру и аппаратуру дальней связи, машины для выработки искусственных и синтетических волокон и др. Развита также лёгкая (особенно льнообрабатывающая) и пищевая промышленность. производство стройматериалов. В П. - педагогический институт и филиал Ленинградского политехнического института; техникумы: индустриальный, строительный, кооперативный, совхоз-техникум, а также медицинское, музыкальное и культурно-просветительское училища. Два театра, историко-художественный и архитектурный музей-заповедник, Дом-музей и Квартира-музей В. И. Ленина. \nНа 1 января 1974 в П. было и больничных учреждений на 2,8 тыс. коек (19,1 койки на 1 тыс. жителей); работали 749 врачей (1 врач на 195 жителей). Детский общетерапевтический санаторий; в 75 км от П. - бальнеологический курорт Хилово. \nРеки Великая и Пскова делят город на 3 части: центр (основная часть П., расположенная на правом берегу р. Великой), Завеличье (левобережье р. Великой) и Запсковье (правобережье р. Псковы). С 13 в. строились каменные укрепления древнейшей части П. и его исторического центра - кремля (Крома; южная стена - Перши - перестраивалась в 1337, 1393-94, 1400-1425), расположенного на мысу при слиянии рр. Великой и Псковы (в Кроме - Троицкий собор, 1682-99). По мере роста П. возводились крепостные стены из местного камня-плитняка или деревянные (позднее обычно заменялись каменными), защищавшие новые районы города: Довмонтов город (1266), Средний город (каменная стена в 1309-75), Запсковье (каменная стена - 1465), Окольный город (каменная стена - 1465; в 16 в. стены длина 9 км укреплены и расширены, выстроены монументальные башни - Гремячая, 1524, и др.). Древнейшие постройки П., близкие к новгородской школе, - монументальные соборы монастырей: Мирожского (до 1156), Ивановского (до 1243), Снетогорского (1310; фрески - 1313). В 14-16 вв. из известняка строились характерные для псковской школы небольшие, с 2-, 3-, 5-пролётными звонницами приходские церкви (Василия с Горки, 1413; Косьмы и Дамиана с Примостья, 1463; Георгия со Взвоза, 1494; Успения с Пароменья, 1444, перестроена в 1521; Николы со Усохи, 1536), в 16-17 вв. - каменные жилые дома [3-этажные палаты Поганкиных (до 1645), дом Лапина ("Солодёжня"), дом Трубинского (1670-80-е гг.)]. По регулярному плану 1778 в П. строились по главным улицам каменные и деревянные 2-этажные дома по "образцовым" проектам в стиле классицизма. После Великой Отечественной войны 1941-45 П. застраивался по генеральному плану восстановления и дальнейшего развития (1945, архитекторы Н. В. Баранов, А. И. Наумов и др.). По новому генеральному плану (1971, архитекторы Г. П. Боренко, Н. В. Баранов и др.) П. застраивается жилыми и общественными зданиями с учётом расположения памятников архитектуры (массовое жилое строительство сосредоточено преимущественно в Запсковье и Завеличье). \nПамятники: В. И. Ленину на ул. Некрасова у Дома Советов (1945, скульптор М. Г. Манизер) и на площади Ленина у здания педагогического института (1960, скульптор Г. Е. Арапов, архитектор П. С. Бутенко, оба - бронза, гранит); монумент в честь первых побед Красной Армии под П. в 1918 (железобетон, 1969, архитектор И. Д. Билибин и др.; горельеф из кованой меди, скульптор Г. И. Мотовилов). (БСЭ)'; /* искомая подстрока или словосочетание */ var substr:String = 'город псков'; /* функция, которая будет выполнять поиск и выделение */ function func(str:String,substr:String,color:String='#ff0000'):String { var arr:Array = new Array(); arr = substr.split(" "); var newarr:Array = new Array(); var l:uint = arr.length; var i:uint = 0; while (i < l) { newarr.push(arr[i].toLowerCase(),arr[i].toUpperCase(),arr[i].substr(0,1).toUpperCase()+arr[i].substr(1,arr[i].length-1)); i++; } l = newarr.length; i = 0; while (i < l) { var p:RegExp = new RegExp(newarr[i],'g'); str = str.replace(p,'<font color="' + color + '">' + newarr[i] + '</font>'); i++; } return str; } /* текстовое поле */ var tf:TextField = new TextField(); tf.width = 450; tf.height = 300; tf.multiline = true; tf.wordWrap = true; tf.htmlText = func(str,substr); addChild(tf); tf.x = 50; tf.y = 50;

Результат следующий:

Конечно, не идеальное решение, но оно покрывает большинство случаев. И при этом работает довольно шустро даже на довольно больших текстах.

Автор: admin

Дата добавления: 2012-03-12

Просмотров: 1624

Рейтинг поста: +5-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-04-22
Да, вы правы. Но это не опечатка, а косяк движка блога :-) Исправил. Спасибо.
Комментатор
Комментарий добавил(а): Владимир
Дата добавления: 2012-04-22
while (i' + newarr[i] + '');
Я не очень понял эту строчку, тут нет опечатки?
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика