Инструменты пользователя

Инструменты сайта


foobar2000:tagz:tutorial:tagz_intro

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
foobar2000:tagz:tutorial:tagz_intro [2006/05/16 15:41]
Mishail
foobar2000:tagz:tutorial:tagz_intro [2007/02/15 10:54] (текущий)
Строка 1: Строка 1:
 ====== Введение в написание скриптов с использованием Tagz ====== ====== Введение в написание скриптов с использованием Tagz ======
  
-Tagz это скриптовый язык используемый в foobar2000 не только для конфигурации внешнего вида плэйлистов,​ но вообще для реализации любой функциональности для продвинутых пользователей. После изучения этого пособия Вы сможете легко использовать этот язык в любых ситуациях. Но начнем мы все же с азов.+Tagz это скриптовый язык используемый в foobar2000 не только для конфигурации внешнего вида плэйлистов,​ но и вообще для реализации любой функциональности ​уровня продвинутых пользователей. После изучения этого пособия Вы сможете легко использовать этот язык в любых ситуациях. Но начнем мы все же с азов. 
 + 
 + 
 +===== Доступ к тэгам и полям===== 
 + 
 +В своей ​простейшей форме Tagz просто читает информацию из тэгов Ваших музыкальных фалов. Вот так: 
 + 
 +  %artist% 
 + 
 +Foobar2000 ищет тэг artist в песне и возвращает имя испонителя. В случае если этот тэг отутсвует в файле Вы получите в качестве результата вопросительный знак (''?''​). Все что заключено между знаками ''​%''​ рассматривается как тэг, не смотря на имя. Если Вы используете тэг с именем //my field// в Ваших файлах,​ то просто используйте ''​%my field%''​ для того чтобы получить информацию из этого тэга. \\ 
 +Кроме того, точно такой же синтаксис используется для доступа к технической информации,​ например ''​%bitrate%''​ возвращает битрэйт файла, а ''​%_ispaused%''​ покажет Вам сотсояние текущей песни (пауза/​проигрывание). Для того чтобы получить более полное описание функциональности Tagz прочтите [[[foobar2000:​tittleformatting]]. 
 + 
 + 
 +===== Подстановки полей ===== 
 + 
 +Опять вернемся к нашему полю ''​%artist% ''​. Начиная с версии 0.9 foobar2000 это поле на самом деле является сокращенной формой для: 
 + 
 +  $if3($meta(artist),​$meta(album artist),​$meta(composer),​$meta(performer)) 
 + 
 +Не надо пугаться сложности этого выражения. На самом деле оно говорит:​ //​Найти тэг artist. Если его нет, использовать тэг album artist. Если же и его нет, то попытаться использовать тэг composer, а затем performer.//​ 
 + 
 +Это на самом деле очень важно знать, что за большинством из наиболее используемых тэгов скрываются подстановки подобные этой. Для полного их перечня обратитесь к уже упомянутой [[foobar2000:​tittleformatting]]. Эти подстановки введены для того чтобы облегчить жизнь создателей скриптов. 
 + 
 +Несомненно,​ использование подстановок делает процесс создания скриптов более удобным,​ но бывают случаи когда нам нужно получит доступ к не измененному,​ "​чистому"​ значению поля, тому, которое на самом деле хранится в файле. И мы уже видели как это делается. Для того чтобы прочитать такое (неизмененное подстановкой) значение тэга artist, следует использовать:​ 
 + 
 +  $meta(artist) 
 + 
 +Обратите внимание что в этом случае имя поля (тэга) не заключается в знаки %. Вы можете использовать данный синтаксис команды для любых полей, которые ссылаются на тэги в файле, но никогда не используйте его для полей возвращающих техническую информацию (напр. ''​%bitrate%''​). 
 + 
 +Все еще малопонятно?​ ;-) Не расстраивайтесь,​ все станет ясней когда мы начнем разрабатывать настоящий скрипт. Думаю возврат к этой странице и ее повторное прочтение после этого будет весьма уместно. 
 + 
 +===== Функции ===== 
 + 
 +Другой важной частью синтаксиса Tagz являются функции,​ используемые для вычисления огромного разнообразия выражений. Вы передаете некоторые данные в функцию,​ она их обрабатывает и возвращает результат. Посмотрим на примере:​ 
 + 
 +  $repeat('​f',​10) 
 + 
 +Вызов ​любой функции начинается со знака $ за которым следует ​имя функции. Данные которые Вы передаете в функцию (называемые аргументами) помещаются в скобках после имени функции. Если аргументов несколько,​ то они разделяются запятыми. И запомните,​ не должно быть никаких пробелов в таком вызове,​ не после знака $, ни после имени функции,​ ни между аргументами,​ нигде. \\   
 +Функция из примера повторяет букву ''​f''​ десять раз. Ниже, когда мы будем говорить о строках,​ вы поймете почему ''​f''​ указано в одинарных кавычках,​ а ''​10''​ - нет. 
 + 
 +Запомните,​ если Вы вызываете функцию без аргументов,​ Вы все равно обязаны поставить скобки после имени функции. К примеру,​ существует функция ''​$rgb()'',​ которая сбрасывает значения цветов к значениям по умолчанию. Так вот, если Вы напишете просто ''​$rgb''​ то в результате получите ошибку 
 + 
 +==== Контроль хода выполнения скрипта:​ функция ''​$if()''​ ==== 
 + 
 +Если Вы когда-нибудь работали с программами обработки табличных данных (напр. Excel), то Вы наверняка сталкивались с оператором ''​if''​. Этот ​ оператор проверяет условие и, в зависимости от результата проверки,​ выполняет различные действия:​ //Если условие выполняется,​ сделать то. Иначе сделать другое//​ \\ 
 +В Tagz для описания данного оператора используется обычный синтаксис для функций. 
 + 
 +  $if(%title%,​%title%,​%filename%) 
 + 
 +Здесь мы видим стандартный вызов функции с тремя аргументами. Foobar2000 пытается найти тэг title, если ​такой тэг найден,​ то выполняется команда стоящая после 1-й запятой,​ и выдается заголовок композиции (тэг title). Если же в файле нет такого тэга (title), то в этом случае результатом выражения ​будет ​имя файла (filename). \\ 
 +Выражения ''​if''​ могут быть настолько сложными, насколько это нужно Вам. Выполняемыми командами могут быть как простые вызовы соответствующих полей (как на примере выше), так и скрипты,​ состоящие из нескольких сотен строк. 
 + 
 +Так же как и подстановки полей, синтаксис Tagz так же предоставляет нам некоторые возможности для того чтобы облегчить процедуру написания скриптов. Указанное выше выражение ''​if''​ может быть ​сокращено до выражения:​ 
 + 
 +  $if2(%title%,​%filename%) 
 + 
 +Которое означает то же самое. Существует и другое сокращение - Вы можете не указывать часть //​иначе//​. 
 + 
 +  $if(%title%,​%title%) 
 + 
 +Это выражение ​покажет тэг title, если таковой имеется,​ и не покажет ничего если тэга нет. Но и это не предел,​ можно сократить это выражение еще больше:​ 
 + 
 +  [%title%] 
 + 
 +Просто поместите имя поля в квадратные скобки (''​[]''​). Но данная форма работает только с именами полей, но не с более сложными выражениями. 
 + 
 +==== Контроль хода выполнения скрипта:​ функция ''​$select()''​ ==== 
 + 
 +Другая функция,​ очень схожая с функцией ''​if'',​ называется ''​$select()'',​ результат ее работы зависит от вычисления __числа__ (напомню что результат работы ''​if''​ зависит от __условия__). 
 + 
 +  $select(%tracknumber%,​ 
 +  %artist%, 
 +  %album%) 
 + 
 +Значение первого аргумента (''​%tracknumber%''​) вычисляется (он обязательно должен иметь численное значение), ​ и затем ''​$select''​ проверяет полученное значение,​ и поступает соответствующим образом. Если значение ''​%tracknumber%''​ равно 1, то выполняется первая из последующих команд (''​%artist%'',​ показывающая исполнителя композиции). ​ Если значение ''​%tracknumber%''​ равно 2, то выполняется вторая команда (''​%album%''​). И так далее. Функция ''​$select()''​ может содержать столько команд,​ сколько Вам угодно. 
 + 
 +===== Комментирование кода ===== 
 + 
 +В Tagz любая строка,​ начинающаяся с <​html>//</​html>,​ является комментарием и полностью игнорируется в ходе выполнения скрипта. Эта строка может содержать все что Вам захочется,​ но обычно комментарии используются для объяснения работы сложных фрагментов кода, в которых с первого взгляда непонятно что именно делает  
 +скрипт. И, конечно же, они являются большим подспорьем если Вы заглядываете в Ваш скрипт раз в полгода :-) 
 + 
 +  $select(%tracknumber%,​ 
 +  %artist%, 
 +  // Это строка комментария 
 +  %album%) 
 + 
 +Для тех кто уже имеет некоторый опыт работы с настоящими языками программирования важно знать, что только строка целиком может быть комментарием. Поэтому выражение:​ 
 + 
 +  %artist% // Это НЕ комментарий 
 + 
 +Является неверным с точки ​зрения Tagz 
 + 
 +===== Обработка строк ===== 
 + 
 +Это последний раздел введения,​ но может быть он является самым важным,​ особенно если Вы имеете некоторый опыт программирования. Основная причина того, что скрипты Tagz всегда выглядят запутанней,​ чем исходные коды написанные на настоящих языках программирования,​ это то каким образом Foobar2000 обрабатывает строки. Если вы введете текст, который является просто текстом,​ не функцией и не любым другим зарезервированным словом,​ то Fooobar2000 отобразит его без какой-либо обработки. Поэтому самая известная программа hello-world написанная на Tagz выглядит весьма скучно:​ 
 + 
 +  Hello, world! 
 + 
 +По желанию вы можете заключать строки в одинарные кавычки. 
 + 
 +  '​Hello,​ world!'​ 
 + 
 +Выводимый текст от этого не изменится. При определенных обстоятельствах использование кавычек является обязательным,​ и, по моему мнению,​ ясное обозначение строк делает код ясней. Поэтому я заключаю все строки в кавычки,​ не смотря на то, нужны они в этой ​ситуации или нет. ​  
 + 
 +С первого взгляда использование кавычек выглядит весьма удобными,​ но оно создает очень серьезную помеху - Вы не сможете использовать отступы для структуризации Вашего кодаВзгляните на эти два скрипта:​ 
 + 
 +  $if(%album tracks%, 
 +    $select(%tracknumber%,​ 
 +      %artist%, 
 +      %album%, 
 +      %date% 
 +    ), 
 +    $if2(%artist%,​%filename%) 
 +  ) 
 + 
 +  $if(%album tracks%, 
 +  $select(%tracknumber%,​ 
 +  %artist%, 
 +  %album%, 
 +  %date% 
 +  ), 
 +  $if2(%artist%,​%filename%) 
 +  ) 
 + 
 +Сразу видно какой из них легче читать. Мне сложно представить что кто-нибудь выберет второй вариант :-) Но к сожалению Вы не сможете использовать такие красивые отступы как в 1-м скрипте в Tagz, всему виной то что Foobar2000 расценивает пробелы не как отступы,​ но как обычные символы. Для первого трэка (tracknumber = 1) версия с отступами выдаст не просто имя исполнителя (''​%artist%''​),​ но имя исполнителя с шестью пробелами в начале. Не совсем то что мы ожидали, правда?​ А теперь подумайте откуда взялись эти лишние шесть пробелов. 
 + 
 +Из этого мы должны сделать такой вывод: никогда не используйте ​отступы ​в скриптах Tagz, хотя это и выглядит некрасиво. И это на самом деле последний урок из введения. Сейчас все становится серьезно. 
 + 
 +~~DISCUSSION~~
foobar2000/tagz/tutorial/tagz_intro.1147779668.txt.gz · Последние изменения: 2006/05/16 14:55 (внешнее изменение)