Рубрика «highlighting»

Недавно заинтересовался, как устроена подсветка кода изнутри. Сначала казалось, что там все дико сложно — синтаксическое дерево, рекурсия и вот это все. Однако при более близком рассмотрении оказалось, что ничего трудного здесь нет. Всю работу можно проделать в одном цикле с заглядываниями вперед и назад, более того, в получившемся скрипте почти не используются регулярные выражения.

Демо-страница: Javascript Code Highlighter

Читать полностью »

Поиск по большим документам в ElasticSearch - 1

Продолжаем цикл статей о том, как мы постигали ES в процессе создания Ambar. Первая статья цикла была о Хайлайтинге больших текстовых полей в ElasticSearch.

В этой статье мы расскажем о том как заставить ES работать быстро с документами более 100 Мб. Поиск в таких документах при подходе "в лоб" занимает десятки секунд. У нас получилось уменьшить это время до 6 мс.

Заинтересовавшихся просим под кат.

Читать полностью »

Привет! Я создал контрол на основе TextBlock с возможностью подсветки текста. Для начала приведу пример его использования, затем опишу, как он создавался.

Пример использования контрола

<local:HighlightTextBlock TextWrapping="Wrap">
    <local:HighlightTextBlock.HighlightRules>
        <local:HighlightRule HightlightedText="{Binding Filter, Source={x:Reference thisWindow}}">
            <local:HighlightRule.Highlights>
                <local:HighlightBackgroung Brush="Yellow"/>
                <local:HighlightForeground Brush="Black"/>
            </local:HighlightRule.Highlights>
        </local:HighlightRule>
    </local:HighlightTextBlock.HighlightRules>
    <Run FontWeight="Bold">Property:</Run>
    <Run Text="{Binding Property}"/>
</local:HighlightTextBlock>

Начало разработки

Потребовалось мне подсветить текст в TextBlock, введенный в строку поиска. На первый взгляд задача показалась простой. Пришло в голову разделить текст на 3 элемента Run, которые бы передавали в конвертер весь текст, строку поиска и свое положение (1/2/3). Средний Run имеет Backgroung.

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

Была еще мысль формировать Xaml «на лету», парсить его при помощи XamlReader и кидать в TextBlock. Но эта мысль тоже сразу отвалилась, потому что попахивает.

Следующей (и окончательной) идеей стало создать систему правил подсветки и прикрутить ее к TextBlock. Тут 2 варианта: свой контрол с блэкджеком и девочками на основе TextBlock или AttachedProperty. После недолгих раздумий, я решил, что все таки лучше создать отдельный контрол, потому что функционал подсветки может наложить некоторые ограничения на функциональность самого TextBlock, а разруливать это проще, если от него унаследоваться.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js