Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Давным давно было интересно и вот теперь стало необходимо написать скрипт, который смог бы выпарсить все аккорды их текста и обернуть условно в какой-нибудь тег, например в span.
Начало аккорда всегда такое ~[A-H]~ а вот далее могут быть десятки различных вариантов. Немного погуглив, нашел простенький генератор _http://www.amdm.ru/cgen/_ В нем можно сгенерировать для примера несколько аккордов, чтоб понять что к чему.
Также после основной части может быть а может и не быть "#" и "b" (без кавычек)
Получается что-то вроде ~[A-H]{1}[#b]?~
Погуглив еще чуть-чуть нашел нечто похожее на большинство вариантов, которые могут быть после нашей основной части (тут не все конечно, но все же):
Ну а теперь самое главное, соединить все это воедино. И получить вместо наших аккордов из примера (C, G, D и.т.д.) что-то вроде <span class="chord">C</span><span class="chord">G</span><span class="chord">D</span> внутри нашего исходного текста
Кто-нибудь сможет помочь с написанием php-шки? Небольшую функцию для реализации вышеописанного. Может есть люди, которые лучше разбираются в принципах построения аккордов, так и дополнят еще возможными комбинациями.
Заранее спасибо)
nerv
Отправлено: 19 Марта, 2013 - 09:01:43
Посетитель
Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013 Откуда: Россия
----- Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Alexandr_Voronin
Отправлено: 19 Марта, 2013 - 10:43:03
Новичок
Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2013
Помог: 1 раз(а)
ну регулярку я бы составлял след. образом
1. аккорд состоит не более чем из 3ех символов (насколько я помню)
2. может включать в себя английские буквы, цифры и #
3. в твоем примере после аккорда идет много пробелов и строка с аккордами кончается переносом строки.
если нужна помощь в составлении регулярки, напиши, обязательно помогу.
avtor.fox
Отправлено: 19 Марта, 2013 - 11:08:55
Постоянный участник
Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012 Откуда: Воронеж
Помог: 50 раз(а)
z-site.ru, Ab maj7?
Alexandr_Voronin
Отправлено: 19 Марта, 2013 - 11:31:52
Новичок
Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2013
Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010
Помог: 1 раз(а)
avtor.fox пишет:
z-site.ru, Ab maj7?
Ну вот и получается, что ~[A-H]{1}[#b]?~ вдобавок одна из частей, перечисленных в длинной строке. И это надо посадить на условие, может быть а может и не быть
Вот мой результат пока. Надо тестировать на сложных аккордах и править.
Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2013
Помог: 1 раз(а)
Jlblcblu Регулярка видит в перечислении "maj|M|m| и на нем и останавливается поэтому Em5- не выделяется.
DlTA
Отправлено: 20 Марта, 2013 - 13:44:24
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
Jlblcblu пишет:
Вступление: Em
C G D Em
Сколько лет прошло, все о том же гудят провода,
а где используются подобные файлы?
Jlblcblu
Отправлено: 20 Марта, 2013 - 22:48:37
Новичок
Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010
Помог: 1 раз(а)
z-site.ru пишет:
Jlblcblu Регулярка видит в перечислении "maj|M|m| и на нем и останавливается поэтому Em5- не выделяется.
Как выяснилось, это действительно так. Жаль что дальше по условию "или" не идет. таким образом, исправить это можно переместив в той длинной строке окончания аккордов. Расставить по приоритету, что ли. Готовый вариант выложу чуть позже, если интересно. Но остается проблема с английскими текстами. Таким образом, придется или форматировать исходные тексты, либо довольствоваться тем что есть.
DlTA пишет:
а где используются подобные файлы?
Это самые обычные аккорды для игры на гитаре. По интернету их десятки тысяч.
З.Ы.
А есть предложения, каким бы образом улучшить алгоритм подсветки аккордов?) Все-таки на форуме наверняка есть люди, опыт которых превышает мой в разы.
NoPaper
Отправлено: 21 Марта, 2013 - 09:42:48
Посетитель
Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012 Откуда: Минск
Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010
Помог: 1 раз(а)
NoPaper, действительно хороший вариант. Не надо выдумывать правила. В случае если нет какого-либо аккорда - легко обновить внесением в список, каким бы специфичным он ни являлся.
Но все прошло не очень гладко. Например:
1) Если аккорд начинается с 1 элемента строки, т.е. без пробела вначале - косяк
2) Также почему-то это парсинг выкосил переносы строк (по умолчанию текст располагается в теге pre, дабы соблюдать легко форматирование)
3) Английский текст страдает.
Если предположить, что пробелы вначале исправить как-то можно, то вот что делать с английским текстом.
Есть идея такого вида, правда с реализацией пока не очень. А именно: Во-первых не заменять вначале \s на пробел. Это реально ломает некоторые тексты. Во-вторых - проверять наличие пробела или переноса строки после аккорда. Имхо - это избавит от проблем некоторых.
Можете подсказать как проверить условие нахождения символов в конце?
Или есть лучше варианты?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.