MusicBrainz Picard/Documentation/Scripting: Difference between revisions

From MusicBrainz Wiki
Jump to navigationJump to search
((Imported from MoinMoin))
(manually redirecting anyone naughtily linking to the wiki instead of /doc/)
 
(65 intermediate revisions by 23 users not shown)
Line 1: Line 1:
=Scripting in Picard=
#REDIRECT [[MusicBrainz Picard]]

This page describes a simple scripting language implemented in [[Picard Qt|PicardQt]].


==Syntax==

The syntax is derived from [http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Titleformat_Reference Foobar2000's titleformat]. There are three base elements: '''text''', '''variable''' and '''function'''. Variables consist of alpha-numeric characters enclosed in percent signs (e.g. <code><nowiki>%artist%</nowiki></code>). Functions start with a dollar sign and end with an argument list enclosed in parentheses (e.g. <code><nowiki>$lower(...)</nowiki></code>).

==Variables==

<ul><li style="list-style-type:none">{i} ''Not all of these variables are available for all files. Plugins or scripts can also create a new ones.''
</ul>

===%title%===

<ul><li style="list-style-type:none">Track title
</ul>

===%artist%===

<ul><li style="list-style-type:none">Artist name
</ul>

===%artist_sortorder%===

<ul><li style="list-style-type:none">Artist sortname
</ul>

===%album%===

<ul><li style="list-style-type:none">Album title
</ul>

===%albumartist%===

<ul><li style="list-style-type:none">Album artist name
</ul>

===%albumartist_sortorder%===

<ul><li style="list-style-type:none">Album artist sortname
</ul>

===%tracknumber%===

<ul><li style="list-style-type:none">Track number
</ul>

===%totaltracks%===

<ul><li style="list-style-type:none">Total tracks on the album
</ul>

===%discnumber%===

<ul><li style="list-style-type:none">Disc number
</ul>

===%totaldiscs%===

<ul><li style="list-style-type:none">Total number of discs
</ul>

===%date%===

<ul><li style="list-style-type:none">Release date
</ul>

===%musicbrainz_trackid%===

===%musicbrainz_albumid%===

===%musicbrainz_artistid%===

===%musicbrainz_albumartistid%===

===%compilation%===

<ul><li style="list-style-type:none">0 for single artist albums, 1 for multiple artist albums
</ul>

===%asin%===

<ul><li style="list-style-type:none">Amazon ASIN
</ul>

===%composer%===

<ul><li style="list-style-type:none">[[Composer Relationship Type|ComposerRelationshipType]]
</ul>

===%conductor%===

<ul><li style="list-style-type:none">[[Conductor Relationship Type|ConductorRelationshipType]]
</ul>

===%ensemble%===

<ul><li style="list-style-type:none">[[Orchestra Relationship Type|OrchestraRelationshipType]]
</ul>

===%arranger%===

<ul><li style="list-style-type:none">[[Arranger Relationship Type|ArrangerRelationshipType]], [[Instrumentator Relationship Type|InstrumentatorRelationshipType]], [[Orchestrator Relationship Type|OrchestratorRelationshipType]]
</ul>

===%lyricist%===

<ul><li style="list-style-type:none">[[Lyricist Relationship Type|LyricistRelationshipType]]
</ul>

===%remixer%===

<ul><li style="list-style-type:none">[[Remixer Relationship Type|RemixerRelationshipType]]
</ul>

===%producer%===

<ul><li style="list-style-type:none">[[Producer Relationship Type|ProducerRelationshipType]]
</ul>

===%engineer%===

<ul><li style="list-style-type:none">[[Engineer Relationship Type|EngineerRelationshipType]]
</ul>

===%releasetype%===

<ul><li style="list-style-type:none">[[Release Type|ReleaseType]]
</ul>

===%releasestatus%===

<ul><li style="list-style-type:none">[[Release Status|ReleaseStatus]]
</ul>

==Functions==

===$if(if,then,else)===

<ul><li style="list-style-type:none">If <code><nowiki>if</nowiki></code> is not empty, it returns <code><nowiki>then</nowiki></code>, otherwise it returns <code><nowiki>else</nowiki></code>.
</ul>

===$if2(a1,a2,a3,...)===

<ul><li style="list-style-type:none">Returns first non empty argument.
</ul>

===$lower(text)===

<ul><li style="list-style-type:none">Returns <code><nowiki>text</nowiki></code> in lower case.
</ul>

===$upper(text)===

<ul><li style="list-style-type:none">Returns <code><nowiki>text</nowiki></code> in upper case.
</ul>

===$left(text,num)===

<ul><li style="list-style-type:none">Returns first <code><nowiki>num</nowiki></code> characters from <code><nowiki>text</nowiki></code>.
</ul>

===$right(text,num)===

<ul><li style="list-style-type:none">Returns last <code><nowiki>num</nowiki></code> characters from <code><nowiki>text</nowiki></code>.
</ul>

===$num(num,len)===

<ul><li style="list-style-type:none">..
</ul>

===$replace(text,search,replace)===

<ul><li style="list-style-type:none">..
</ul>

===$rsearch(text,pattern)===

<ul><li style="list-style-type:none">..
</ul>

===$rreplace(text,pattern,replace)===

<ul><li style="list-style-type:none">..
</ul>

===$num(text,length)===

===$unset(context, name)===

<ul><li style="list-style-type:none">Unsets the variable <code><nowiki></nowiki></code>name<code><nowiki></nowiki></code>.
</ul>

===$set(context, name, value)===

<ul><li style="list-style-type:none">Sets the variable <code><nowiki></nowiki></code>name<code><nowiki></nowiki></code> to <code><nowiki></nowiki></code>value<code><nowiki></nowiki></code>.
</ul>

===$get(name)===

<ul><li style="list-style-type:none">Returns the variable <code><nowiki></nowiki></code>name<code><nowiki></nowiki></code> (equivalent to <code><nowiki></nowiki></code>%name%<code><nowiki></nowiki></code>).
</ul>

===$trim(text[,char])===

<ul><li style="list-style-type:none">Trims all leading and trailing whitespaces from <code><nowiki></nowiki></code>text<code><nowiki></nowiki></code>. The optional second parameter specifies the character to trim.
</ul>

===$add(x,y)===

<ul><li style="list-style-type:none">Add <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code> to <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code>.
</ul>

===$sub(x,y)===

<ul><li style="list-style-type:none">Substracts <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code> from <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code>.
</ul>

===$div(x,y)===

<ul><li style="list-style-type:none">Divides <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> by <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

===$mod(x,y)===

<ul><li style="list-style-type:none">Returns the remainder of <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> divided by <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

===$mul(x,y)===

<ul><li style="list-style-type:none">Multiplies <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> by <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

===$or(x,y)===

<ul><li style="list-style-type:none">Returns true, if either <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> or <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code> not empty.
</ul>

===$and(x,y)===

<ul><li style="list-style-type:none">Returns true, if both <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> and <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code> are not empty.
</ul>

===$not(x)===

<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is empty.
</ul>

===$eq(x,y)===

<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> equals <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

===$ne(x,y)===

<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> not equals <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

===$lt(x,y)===

<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is lower than <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

===$lte(x,y)===

<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is lower than or equals <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

===$gt(x,y)===

<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is greater than <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

===$gte(x,y)===

<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is greater than or equals <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>.
</ul>

==Examples==

===Use case 1: Disc numbers===

<pre>$set(discnumber,$rsearch(%album%,\\\(disc \(\\d+\)\\\)))
$set(album,$rreplace(%album%,\\s\\\(disc \\d+\\\),))
</pre>

===Use case 2: Artist names===

<pre>$if($search(%album%,(feat. conductor)),
$set(artist,%orchestra%))
</pre>
<ul><li style="list-style-type:none">''Stupid assumption that all classical albums have "feat. conductor" in the title, but it shows the idea. :)''
</ul>

===Use case 3: Live tracks on live albums===

<pre>$if($and($eq(%releasetype%,Live),$not($in(%title%,\(live\)))),$set(title,%title% \(live\)))
</pre>

===Lower case filenames with underscores===

<pre>$lower($replace(%albumartist%/%album%/$num(%tracknumber%,2) %title, ,_))
</pre>

===(Year) only if available===

<pre>$if(%date%,\($left(%date%,4)\))
</pre>

===Remove "feat." from track titles===

<pre>$set(title,$rreplace(%title%,\\s\\\(feat. [^\)]+\\\),))
</pre>

[[Category:To Be Reviewed]] [[Category:Picard]] [[Category:Development]]

Latest revision as of 21:16, 25 November 2014

Redirect to: