Архив: Функция для переноса стилей оформления текста из одной строки в другую
Бюджет
50$
/ 3000
руб
в месяц
Создан: 6 лет назад
Закрыт
- Описание
- Нужен алгоритм (функция) для переноса стилей оформления текста из одной строки (произвольной длины) в другую (с сохранением стилей внутри каждого слова, каждой строки). JavaScript
Аргументы функции исходный текст (строка), новый текст (строка), таблица стилей (массив).
Стили оформления описываются массивом, содержащим координаты каждого стиля внутри исходного текста и объект содержащий сам стиль. Например, для описания стилей оформления текста “Аргентина манит негра” (см прикрепленную картинку) используется следующий массив (пробелы могут иметь свой стиль, даже если он не виден):
[0][2][StyleObj]
[2][5][StyleObj]
[5][7][StyleObj]
[7][9][StyleObj]
[9][10][StyleObj]
[10][13][StyleObj]
[13][22][StyleObj]
(в принципе, массив можно оформить иным образом есть отдельная функция, которая получает координаты каждого стиля и объект стиля)
Если текст состоит из нескольких строк, то они переносятся ‘r’, который также считается за отдельный символ.
Нужно перенести эти стили в новый текст с произвольным количеством слов (произвольной длины), произвольным количеством строк, сохраняя оформление каждого слова и каждой строки.
С моей точки зрения алгоритм должен:
а) определять границу каждого слова исходного текста, определять какие стили входят в это слово полностью или частично (стили не обязательно совпадают с границей слов каждая буква слова может быть как описана отдельным стилем, так может быть один стиль на всю строку)
б) если текст имеет несколько строк, то определять границу каждой строки, определять какие стили входят в строку полностью или частично
в) пересчитывать координаты стилей старого текста, составив массив аналогичный входному описанию стилей описывающий новый текст с учетом следующих моментов:
нужно сохранять стили внутри каждого слова. Т.е. если первое слово имеет три стиля с определенными координатами, то они должны последовательно переноситься в первое слово нового текста. Если новое слово длиннее старого, то к буквам выходящим за границы старого слова применяется стиль последней буквы старого слова (например, если слово “Аргентина” ([0][2][StyleObj],[2][5][StyleObj],[5][7][StyleObj],[7][9][StyleObj] заменить словом “Обсерватория”, то мы должны получить массив [0][2][StyleObj],[2][5][StyleObj],[5][7][StyleObj],[7][12][StyleObj] )), а если новое слово короче старого слова, то наоборот выкидывать лишние стили, пересчитав координату последнего (в соответствии с длиной слова). Например если “Аргентина” заменить на “Обь”, то массив стилей должен выглядеть следующим образом: [0][2][StyleObj],[2][3][StyleObj] (при этом элементы массива [5][7][StyleObj],[7][12][StyleObj] проигнорировать).
нужно сохранять стили внутри строки (аналогично словам) если новая строка уже кончилась, а в старой строке еще были слова со своими стилями их выкинуть, если новая строка длиннее старой, то все последующие слова описываются стилем последней буквы последнего слова старой строки (включая случаи, когда количество строк текста не совпадает если количество строк нового текста больше, то все строки выходящие за пределы старого текста описываются по последней букве исходного текста)
Пробелы, символы переноса строки являются значащими т.е. всегда входят в интервал того или иного стиля.
На выходе мы должны получить новый массив стилей, описывающий их аналогично исходному (но уже для нового текста). Объекты стилей являются обычными объектами их можно копировать, координаты стилей можно кроить произвольным образом, главное обеспечивать неразрывность координат (т.е.все буквы нового текста должны быть описаны последовательными координатами стилей, без пропусков)
- Категория
Похожие проекты
0
3
Необходимо разработать систему, которая: Подключается к API Diagnocat и iDent (через токены доступа). Получает данные о пациенте, результатах диагностики, снимках и назначениях. Автоматически формирует структурированный отчет по шаблону (включая врачей, этапы лечения, стоимость и описание процедур).......
2 месяца назад
0
0
Необходимо связать БД 1C:ERP с БД Outlook, MS Access, Битрикс24. Например при вводе нового сотрудника в 1С:ERP он должен автоматически появляться в вышеперечисленных БД....
2 месяца назад
0
1
Требуется реализация отчёта на кастомизированной 1С:УПП 1. 2, ТЗ и контрольный пример во вложении, 80% кода должно быть покрыто модульными тестами....
2 месяца назад
$7
0
2
Мне нужно копировать мой текст и вставлять в одну группу ВК с открытой стеной для публикации рекламы. Задача скрипта/сервиса/программы - примерно каждые 10 секунд брать мой текст и вставлять в эту группу. Я пробовал через одну программу, которая записывает действия мышки и потом повторяет, но она как-то......
4 месяца назад
0
0
Написать прошивку для A94B114, используя 2 подобные рабочие прошивки. Все файлы есть....
5 месяцев назад
$21
0
2
Нужно разархивировать файл архив. ujems, есть распаковщик, но выдает ошибку. Прислать пруфы(скрины)....
7 месяцев назад
0
1
Входные: Имеется скрипт по обработке email писем и добавление их в систему Redmine Проблема: Система обработки этих писем написана некорректная и негибкая Задача: Переписать логику обработки входящих писем, чтобы исключить их потерю при незначительных отклонениях от ожидаемой структуры....
7 месяцев назад
$37
0
1
- В обязанности сотрудника входит поддержание мобильного приложения системы автоматизации бизнеса. - Работа сдельная: задачи выдаются на оценку, далее после согласования передаются на реализацию. - Заключаем договор и NDA (соглашение о неразглашении)....
7 месяцев назад
$71
0
0
Информация о проекте: Проект включает в себя React Native приложение с Expo внутри которого находится webview с сайтом На устройствах с ОС IOS проблема с воспроизведением видео....
7 месяцев назад
0
0
Разрабатываю десктопные программы на языке Java, а так же Java + SQL....
7 месяцев назад
0
0
0
6
1. Чтобы можно было писать описание события (без заголовка) - превью в списке берется N количества букв с начала. (в списке писать дату события и сколько осталось до него) . Выставление даты и времени напоминания и ИНТЕРВАЛА ПОВТОРА ОТ 1 МИНУТЫ! Выставлять количество повторов, далее напоминания прекращаются.......
8 месяцев назад
0
4
Сайт arg2028t. beget. tech/. Нужно сделать вот такой калькулятор. airprint. by/outdoor/wide-format. и еще некоторые доработки....
8 месяцев назад
$214
0
1
0
7
Краткое описание: Мы ищем исполнителя для тестирования функционала мобильного приложения на платформе Android. Задача включает проверку основных функций приложения, таких как работа комнаты, передача видео, звука и чата, а также создание подробной отчетности о найденных ошибках. Требования к исполнителю:......
9 месяцев назад
0
12
$143
0
0
Oпpocы (1008pyб/чaс) Заходитe на сaйт: gonsù....
10 месяцев назад
0
4
Требуется создать скрипт для premiere pro. Данная суть скрипта: в выделеном бине нужно что бы автоматически проставлялся in out ровно по серидине файла так что бы выделенная область была длиной 3 секунды. И требуется кнопка что бы работало через окно expressions. Проблема текущего в том что он не работает......
11 месяцев назад
0
2
Нужно создать приложения под гемблинг/беттинг, на котлин. Приложение должно работать Firebase. Детали вышлю при обсуждение....
11 месяцев назад
$21
0
4
Нужно разархивировать файл archive. ujems, есть распаковщик, но выдает ошибку. Прислать пруфы ....
1 год назад
0
3
Разработать впн сервис ( Приложения на ios и android + сайт для оплаты подписки). Настройка Серверов. Оплата по договоренности. Работаем черед безопасную сделку....
1 год назад
Похожая удалённая работа
- Удаленная работа для веб-программиста
- Удаленная работа для разработчика баз данных
- Удаленная работа для прикладного программиста
- Удаленная работа для системного программиста
- Удаленная работа для разработчика игр
- Удаленная работа для разработчика мобильных приложений
- Удаленная работа для тестировщика ПО
- Удаленная работа для 1С программиста
- Удаленная работа для разработчика встраиваемых систем
- Удаленная работа для разработчика CRM и ERP