### Настройка бегущей строки:
#### Общие правила
- Поддерживается 36 строк, каждая строка имеет номер '0'..'9','A'..'Z'
- "Макрос" - последовательность управляющих конструкций, каждая из которых заключена в фигурные скобки, например '{Exx}'
- Если строка с индексом '0' начинается с '#' - строка содержит последовательность строк к отображению, например '#123ZYX'  
  Эта последовательность задает порядок отображения строк '1','2','3','Z','Y','X' и далее по циклу
- Если строка с индексом '0' начинается с '##' - строки отображаются в случайном порядке
- Если строка с индексом '0' НЕ начинается с '#' или '##' - это обычная строка для отображения
- Если строка пустая, начинается с '-' или содержит '{-}' - строка отключена и не отображается
- Суммарный размер всех заданных строк не должен превышать 1500 символов, в противном случае строки, выходящие за размер не сохранятся

#### Макросы 
- **{-}**   в любом месте строки означает, что строка временно отключена, аналогично '-' в начале строки
- **{#n}**  в любом месте строки означает, что после отображения этой строки будет немедленно отображена строка с номером n, где n - 1..35 или '1'..'9','A'..'Z'
- **{An+}** при наличии MP3 DFPlayer воспроизводить звук n из папки SD://03; Если указан необязательный суффикс '+' - звук зацикливается пока отображается строка.
- **{Exx}** строка отображается на фоне эффекта XX, где XX - номер эффекта. Эффект не меняется, пока строка не будет полностью отображена
- **{Exx-n}** строка отображается на фоне эффекта XX вариант n, где XX - номер эффекта, n - номер варианта.
- **{Ts}**  отображать строку указанное количество секунд s
- **{Nx}**  отображать строку указанное количество (x) раз подряд
- **{Cc}**  отображать строку указанным цветом. Цвет 'c' задается в web-формате #RRGGBB  
            Если в строке только один макрос цвета текста, расположенный **в самом начале** или в **самом конце** строки - вся строка выводится указанным цветом  
            Если в строке содержится несколько макросов определения цвета или макрос задан посередине строки, строка выводится указанными цветами:  
  - от начала строки до первого макроса цвета - глобальным значением цвета, который задается в программе на телефоне в настройках бегущей строки
  - от позиции макроса цвета до следующего макроса цвета или до концв строки - цветом, определенным в макросе
            Специальные значения цветов:  
  -  #000001 - радужные буквы вдоль текста  
  -  #000002 - каждая буква отдельным цветом
- **{Bc}**  отображать строку на однотонном фоне. Цвет фона 'c' - задается в формате #RRGGBB, например для черного цвета макрос имеет вид ```{B#000000}```  
- **{WS}**  вставить в строку текущее состояние погоды (ясно, пасмурно, дождь и т.п.)
- **{WT}**  вставить в строку текущую температуру
- **{D}**   отображать часы вида ЧЧ:MM на месте макроса
- **{D:f}** отображать часы в указанном формате f, гдее f может содержать в себе:  
  -    **d** или **D**       - день месяца в диапазоне от 1 до 31  
  -    **dd** или **DD**     - день месяца в диапазоне от 01 до 31  
  -    **ddd** или **DDD**   - сокращенное название дня недели (пон - вск)  
  -    **dddd** или **DDDD** - полное название дня недели (понедельник - воскресенье)  
  -    **М**                 - месяц от 1 до 12  
  -    **ММ**                - месяц от 01 до 12  
  -    **МММ**               - месяц прописью (янв - дек)  
  -    **MMMM**              - месяц прописью (января - декабря)  
  -    **y** или **Y**       - год от 0 до 99  
  -    **yy** или **YY**     - год от 00 до 99  
  -    **yyyy** или **YYYY** - год в виде четырехзначного числа  
  -    **h**                 - час в 12-часовом формате от 1 до 12  
  -    **hh**                - час в 12-часовом формате от 01 до 12  
  -    **H**                 - час в 24-часовом формате от 0 до 23  
  -    **HH**                - час в 24-часовом формате от 00 до 23  
  -    **m**                 - минуты от 0 до 59  
  -    **mm**                - минуты от 00 до 59  
  -    **s** или **S**       - секунды от 0 до 59  
  -    **ss** или **SS**     - секунды от 00 до 59  
  -    **t** или **T**       - первый символ указателя am/pm или AM/PM  
  -    **tt** или **TT**     - указатель am/pm или AM/PM  
- **{Rdate time#N}** оставшееся до события время, где  

    **date** - дата события в формате ДД.ММ.ГГГГ  
               В дате допускается использовать символы-заменители:  
               - День  `'**'`   - означает любой день  
               - Месяц `'**'`   - означает любой месяц   
               - Год   `'****'` - означает текущий год  
               - Год   `'***+'` - означает следующий год  

    **time** - время события в формате ЧЧ:ММ:CC  
               Время может быть опущено, тогда принимается 00:00:00
    **N**    - индекс строки (1..9,A..Z или 1..35) отображаемой ПОСЛЕ наступления события.  
               Если N не указана - после наступления события, строка отображаться не будет.  

  При использовании в части заменителя года значения '\*\*\*\*' или '\*\*\*+' при смене года текст "До Нового года осталось {R01.01.\*\*\*+}\#N"  
  строка '#N' никогда не будет показана, поскольку при наступлении даты события год сменится и будет выводиться текст 
  "До Нового года осталось 365 дней".  

  Чтобы избежать такого развития событий, рекомендуется макрос {R} использовать совместно с макросом {S}, ограничивающим период вывода строки:
```  
  "До Нового года осталось {R01.01.***+}{S01.12.****#31.12.**** 23:59:59}"
  "До Нового года осталось {R31.12.**** 23:59:59}{S01.12.****#31.12.**** 23:59:59}"
```
  
  Время, оставшееся до наступления события, показывается в соответствии с правилами:  
  -   осталось более 7 дней - *'XX дней'*  
  -   осталось 7 дней и менее - *'XX дней XX часов'*  
  -   осталось менее 1 дня - *'XX часов XX минут'*  
  -   осталось менее 1 часа - *'XX минут'*  
  -   осталось менее 1 минуты - *'XX секунд'*  

  Если событие уже прошло, вместо строки, содержащей макрос показывается строка-заместитель с номером N, где N - индекс 1..35 или '1'..'9','A'..'Z'.  
  Для того, чтобы строка-заместитель не показывалась как обычная строка, не связанная с событием - она должна быть "отключена" - то есть - начинаться с '-' или иметь внутри макрос отключения '{-}'.  
  Если вы забудете отключить строку-заместитель, она будет отключена автоматически при воспроизведении родительской строки-события.  
  Если строка-заместитель не указана - строка с наступившим событием не показывается.  
  
- **{Pdate time#N#B#A#W}** оставшееся до события время, где  
    **date** - дата события в формате ДД.ММ.ГГГГ  
               - дата может быть опущена, указано только время, что означает "каждый день в указанное время"  
               - любой компонент даты может быть заменен звездочкой ```'*'```, что означает "любой"  
               ```**.01.2020``` - "весь январь 2020 года"  
               ```**.01.****``` - "весь январь каждого года"  
               ```01.**.2020``` - "каждое 1-е число месяца 2020-го года"  
               ```01.09.****``` - "каждое 1-е сентября"  
               ```**.**.2020``` - "весь 2020-год, каждый день"  
    **time** - время события в формате ЧЧ:ММ  
               - если время не указано - означает 0:00  
    **N**    - индекс строки (1..9,A..Z или 1..35) отображаемой ПОСЛЕ наступления события.  
    **B**    - количество секунд ДО наступления события, когда начинает отображаться строка  
    **A**    - количество секунд ПОСЛЕ наступления события, когда отображается строка-заместитель  
    **W**    - дни недели 1-пн..7-вс когда отображается бегущая строка  

  Дата или время должны быть указаны обязательно, остальные элементы могут последовательно опускаться, тогда они будут иметь значения по умолчанию:
    - нет строки заместителя, если опущены элементы #N#B#A#W
    - количество секунд ДО события - 60, если опущены элементы #B#A#W
    - количество секунд ПОСЛЕ события - 60, если опущены элементы #A#W
    - ограничения по дням недели - '1234567', если опущен элемент #W

  Строка, содержащая макрос {P} не отображается регулярно как строки с прочими макросами.  
  Эта строка отображается только за #B секунд до наступления события, затем #A секунд ПОСЛЕ наступления события отображается строка-заместитель, 
  если в макросе присутствует элемент #N и указываемая им строка не пустая.

  Если указана конкретная дата и день недели, но указанная дата не является этим днем недели - строка отображаться не будет.  

  Для того, чтобы строка-заместитель не показывалась как обычная строка, не связанная с событием - она должна быть "отключена" - то есть - начинаться с '-' или иметь внутри макрос отключения '{-}'.  

  Пример:  
    Строка D: ```Подъем через {P7:00#E#60#60#12345}```  
    Строка E: ```-Доброе утро!```  

  Каждый будний день в 6:59 до 7:00 будет отображаться обратный отсчет до пробуждения, затем с 7:00 до 7:01 отображается надпись "Доброе утро!"

  Пример:  
    Строка D: ```Трансляция начнется через {P01.11.2020 19:30#E#180#60}```  
    Строка E: ```Все на футбол!{-}```  

  1 ноября 2020 года за три минуты до начала трансляции (в 19:27 и до 19:30) начнется обратный отсчет оставшегося до трансляции времени. 
  В 19:30 и до 19:31 будет отображаться бегущая строка с текстом "Все на футбол!"

  Пример:  
    Строка D: ```До Нового года осталось {P01.01.****#E#60#60}```  
    Строка E: ```-С Новым годом!!!!```  

  За минуту до наступления каждого Нового года начнет отображаться бегущая строка с обратным отсчетом. 
  С наступлением Нового года, пока бьют куранты 1 минуту показывается бегущая строка "С Новым годом!!!"

- **{Sdate1 time1#date2 time2}** период отображения строки, где  
    **date1** - дата начала периода в формате ДД.ММ.ГГГГ  
    **time1** - время начала периода в формате ЧЧ:ММ:CC  
    **date2** - дата окончания периода в формате ДД.ММ.ГГГГ  
    **time2** - время окончания периода в формате ЧЧ:ММ:CC  

     - дата может быть опущена, указано только время, что означает "каждый день в указанное время"  
     - любой компонент даты может быть заменен звездочкой ```'*'```, что означает "любой"  
       ```**.01.2020``` - "весь январь 2020 года"  
       ```**.01.****``` - "весь январь каждого года"  
       ```01.**.2020``` - "каждое 1-е число месяца 2020-го года"  
       ```01.09.****``` - "каждое 1-е сентября"  
       ```**.**.2020``` - "весь 2020-год, каждый день"  

     - если указана только дата начала периода - датой окончания будет считаться конец указанного дня - та же дата, время 23:59:59
     - если указана только дата окончания периода - датой начала будет считаться начала указанного дня - та же дата, время 00:00:00
     - если время начала периода не указано - означает 00:00:00  
     - если время окончания периода не указано - означает 23:59:59  
     - допускается указывать несколько макроcов {S} в строке для определения нескольких разрешенных диапазонов

  Примеры:
    ``` "С Рождеством!{S07.01.2020}"```  - один день только 7 января 2021 года (весь день с 0:00 до 23:59)
    ``` "С днем Победы!{S09.05.**** 09:00#09.05.**** 21:00}"``` - каждый год 9 мая с 9:00 до 21:00
    ``` "Ура, каникулы!!!{S01.01.****#12.01.****}{S01.04.****#08.04.****}"``` - каждый год в период с 1 по 12 января и с 1 по 8 апреля

### Номера эффектов для макроса {Exx}
- **1** - "Лампа"
- **2** - "Снегопад"
- **3** - "Кубик"
- **4** - "Радуга"
- **5** - "Пейнтбол"
- **6** - "Огонь"
- **7** - "The Matrix"
- **8** - "Шарики"
- **9** - "Звездопад"
- **10** - "Конфетти"
- **11** - "Цветной шум"
- **12** - "Облака"
- **13** - "Лава"
- **14** - "Плазма"
- **15** - "Радужные переливы"
- **16** - "Полосатые переливы"
- **17** - "Зебра"
- **18** - "Шумящий лес"
- **19** - "Морской прибой"
- **20** - "Смена цвета"
- **21** - "Светлячки"
- **22** - "Водоворот"
- **23** - "Циклон"
- **24** - "Мерцание"
- **25** - "Северное сияние"
- **26** - "Тени"
- **27** - "Лабиринт"
- **28** - "Змейка"
- **29** - "Тетрис"
- **30** - "Палитра"
- **31** - "Спектрум"
- **32** - "Синусы"
- **33** - "Вышиванка"
- **34** - "Дождь"
- **35** - "Камин"
- **36** - "Водопад"
- **37** - "Стрелки"
- **38** - "Анимация"
- **39** - "Погода"
- **40** - "Жизнь"
- **41** - "Узоры"
- **42** - "Кубик Рубика"
- **43** - "Звезды"
- **44** - "Штора"
- **45** - "Рассвет"
- **46** - Эффекты с SD карты
