3,699
edits
m (Der Idiot moved page User talk:Dvdkhl to AniAdd without leaving a redirect) |
|||
(37 intermediate revisions by 3 users not shown) | |||
Line 12: | Line 12: | ||
And there will be a lot of examples I promise. | And there will be a lot of examples I promise. | ||
If you want a quick tour: | If you want a quick tour:<br /> | ||
Goto the example section copy paste the code there into the codebox (client) and play with it a bit. | Goto the example section copy paste the code there into the codebox (client) and play with it a bit. | ||
If there is something you don't understand, come back here and goto the relevant section for explanations. | If there is something you don't understand, come back here and goto the relevant section for explanations. | ||
Line 26: | Line 26: | ||
The following CFG evaluates to all possible syntactical correct "programs" (new & | The following CFG evaluates to all possible syntactical correct "programs" (new & not yet public version): | ||
START -> ASSIGN [COMMENT] '\n' START | ASSIGN [COMMENT] | |||
START -> [COMMENT|COMMENTBLOCK] '\n' START | [COMMENT|COMMENTBLOCK] '\n' | |||
ASSIGN -> (NAME ':=' )+ EXPRLST | NAME'(' [NAME (, NAME)* ] ')' | |||
EXPRLST -> [COMMENTBLOCK] (EXPR EXPRLST | EXPR) [COMMENTBLOCK] | |||
EXPR -> FIRSTAVAIL | IFTHENELSE | FUNCTION | VARIABLE | STRING | |||
FIRSTAVAIL -> '[' EXPRLST ( ',' EXPRLST )* ']' | |||
IFTHENELSE -> '{' EXPRLST '=' EXPRLST '?' EXPRLST ':' EXPRLST '}' | |||
FUNCTION -> '$'NAME'(' EXPRLST ( ',' EXPRLST )* ')' | |||
VARIABLE -> '%'NAME'%' | |||
STRING -> ('"'<Any string except ">'"') | ("'" <Any string except '> "'") | |||
NAME -> < Any String without the following characters := []'{}(),"%$? > | |||
COMMENT -> #< Any string > | |||
COMMENTBLOCK -> /*< Any string >*/ | |||
Note: | Note: | ||
* Any string within '' is a terminal, all capital words are non-terminals | * Any string within ' ' is a terminal, all capital words are non-terminals | ||
* To simplify the CFG, possible (redundant) spaces aren't represented as terminals. (Every unquoted space within the CFG represents any count of spaces) | * To simplify the CFG, possible (redundant) spaces aren't represented as terminals. (Every unquoted space within the CFG represents any count of spaces) | ||
* * stands for any count of repetition of the preceding element (including 0 repetitions) | * * stands for any count of repetition of the preceding element (including 0 repetitions) | ||
Line 50: | Line 52: | ||
=== Basics === | === Basics === | ||
'''The Code'''<br /> | '''The Code'''<br /> | ||
Every line you write is independent from the other lines, which means you don't have to worry about the other ones. (Not the complete truth, | Every line you write is independent from the other lines, which means you don't have to worry about the other ones. (Not the complete truth, you'll see why soon) | ||
Every line begins with the Assign construct, which consists of a variable name and an expression list. | Every line begins with the Assign construct, which consists of a variable name and an expression list. | ||
The expression list is evaluated and then assigned to the new created variable, with the name which was specified. | The expression list is evaluated and then assigned to the new created variable, with the name which was specified. | ||
Those variables can be | Those variables can be retrieved on the next lines. | ||
This way you can structure & simplify | This way you can structure & simplify your code. | ||
(If you wanted you could write everything in a single line, but it would be very hard to read and error prone) | (If you wanted you could write everything in a single line, but it would be very hard to read and error prone) | ||
Line 84: | Line 86: | ||
AnotherVar := YetAnother := "Another Expression list" | AnotherVar := YetAnother := "Another Expression list" | ||
It is also possible to create functions: | It is also possible to create functions: | ||
To create a function instead of a variable, the | To create a function instead of a variable, the variable name is followed by <tt>'()'</tt>. | ||
The parenthesis my contain parameters | The parenthesis my contain parameters separated by a comma (same naming conventions as variable name applies). | ||
The parameters are only accessible within the function and don't change the 'main' variables in any way. | The parameters are only accessible within the function and don't change the 'main' variables in any way. | ||
Line 94: | Line 95: | ||
AnotherFunc(a, b) := %a% %b% | AnotherFunc(a, b) := %a% %b% | ||
To use the new defined function see Function construct | To use the new defined function see Function construct | ||
==== Condition ==== | ==== Condition ==== | ||
Line 107: | Line 107: | ||
If you want to test if something is empty, the second value and the equal sign can be omitted. | If you want to test if something is empty, the second value and the equal sign can be omitted. | ||
''Example:'' | ''Example:'' | ||
SomeVar := "Bla" | SomeVar := "Bla" | ||
Line 113: | Line 114: | ||
''Other Example:'' | ''Other Example:'' | ||
SomeVar := "4" | SomeVar := "4" | ||
MyVar := {%SomeVar% = "1" ? "One" : {%SomeVar% = "2" ? "Two" : {%SomeVar% = "3" ? "Three" : "Zero or lower; Four or bigger" } } } | MyVar := {%SomeVar%="1"?"One": {%SomeVar%="2"?"Two": {%SomeVar%="3"?"Three":"Zero or lower; Four or bigger"} } } | ||
==== Choose ==== | ==== Choose ==== | ||
Line 146: | Line 146: | ||
''Example:'' | ''Example:'' | ||
Max4(a,b,c,d) := $max($max(a,b), $max(c,d)) | |||
HighestNum := $Max4("0","3","6","20") | |||
==== Variable ==== | ==== Variable ==== | ||
Line 171: | Line 170: | ||
==== Comment ==== | ==== Comment ==== | ||
Anything after a <tt>#</tt> is ignored and may be used to comment code sections. | Anything after a <tt>#</tt> is ignored and may be used to comment code sections. | ||
Line 177: | Line 175: | ||
#Get prefered language | #Get prefered language | ||
PreferedTitle := [%E%, %R%, %K%] #English, Romaji, Kanji | PreferedTitle := [%E%, %R%, %K%] #English, Romaji, Kanji | ||
=== Predefined Variables === | === Predefined Variables === | ||
==== Titles ==== | ==== Titles ==== | ||
* ATr, ATe, ATk - Anime title, r: romaji, e: english, k: kanji | * ATr, ATe, ATk, ATs, ATo - Anime title, r: romaji, e: english, k: kanji, s: synonym, o: other | ||
* ETr, ETe, ETk - Episode title, languages as above | * ETr, ETe, ETk - Episode title, languages as above | ||
* GTs, GTl - Group title, s: short, l: long | * GTs, GTl - Group title, s: short, l: long | ||
Line 188: | Line 185: | ||
* EpHiNo - Highest (subbed) episode number | * EpHiNo - Highest (subbed) episode number | ||
* EpCount - Anime Episode count | * EpCount - Anime Episode count | ||
* AYearBegin, AYearEnd - The beginning & ending year of the anime | |||
* ACatList - The Categories associated with the anime. | |||
==== Episode information ==== | |||
* EpNo - File's Episode number | |||
==== File information ==== | ==== File information ==== | ||
Line 194: | Line 197: | ||
* Cen - File is censored if the value is '1' | * Cen - File is censored if the value is '1' | ||
* Ver - File version | * Ver - File version | ||
* Source - Where the file came from (HDTV, DTV, WWW, etc) | |||
* Quality - How good the quality of the file is (Very Good, Good, Eye Cancer) | |||
* AniDBFN - Default AniDB filename | |||
* CurrentFN - Current Filename | |||
* FCrc - The file's crc | |||
* FVideoRes - Video Resolution (e.g. 1920x1080) | |||
* FALng - List of available audio languages (japanese, english'japanese'german) | |||
* FSLng - List of available subtitle languages (japanese, english'japanese'german) | |||
* FACodec - Codecs used for the Audiostreams | |||
* FVCodec - Codecs used for the Videostreams | |||
* Watched - File is watched if the value is '1' otherwise unwatched and "" | |||
More predefined variables will be added on request. | More predefined variables will be added on request. | ||
=== Predefined Functions === | === Predefined Functions === | ||
* NUM $max(NUM, NUM) - Both NUMs need to be numerical string. Returns the greater NUM | * NUM $min/max(NUM, NUM) - Both NUMs need to be numerical string. Returns the smaller/greater NUM | ||
* NUM $len(STR) - Returns a numerical string represinting the character count of STR | * NUM $len(STR) - Returns a numerical string represinting the character count of STR | ||
* STR $pad(STR, NUM, CHAR) - STR: String to be padded | * STR $pad(STR, NUM, CHAR) - STR: String to be padded; NUM min string length; CHAR: The character used to pad the string | ||
* STR $repl(SRC, REGEX, REPL) - SRC: Source | * STR $repl(SRC, REGEX, REPL) - SRC: Source; REGEX: Regex used to match; REPL: replaces every match with REPL | ||
* STR $match(STR, REGEX) STR: Source; REGEX: Match; Returns "1" if STR has a match for REGEX, otherwise unwatched and "" | |||
* STR $uc/lc(STR) Convert string to uppercase/lowercase | |||
* NUM $add/sub/mul/div(NUM, NUM) Add/Substract/Multiply/Divide two numerical strings | |||
* STR $substr(STR, NUM[, NUM]) Returns the substring beginning from seconds param index to end or optionally to the third param index | |||
* NUM $[l]indexof(STR, STR) Returns the first/last index of the substring specified in the second param in the first param string, -1 if there are no occurrences. | |||
More predefined functions will be added on request. | More predefined functions will be added on request. | ||
Line 245: | Line 264: | ||
Why not write write <tt>EpNoPad := $pad(%EpNo%, $len(%EpCount%), "0")</tt> and be done with it? | Why not write write <tt>EpNoPad := $pad(%EpNo%, $len(%EpCount%), "0")</tt> and be done with it? | ||
There are a lot of ongoing anime series where the <tt>EpCount</tt> variable is not yet available. | There are a lot of ongoing anime series where the <tt>EpCount</tt> variable is not yet available. | ||
In that case <tt>EpCount</tt> would contain the | In that case <tt>EpCount</tt> would contain the value <tt>"0"</tt> (Think of Gintama, Conan etc.) and | ||
padding would never occur (well it would after its episode count is set). | padding would never occur (well it would after its episode count is set). | ||
Now <tt>EpHiNo</tt> comes to the rescue: It contains the highest released episode number. | Now <tt>EpHiNo</tt> comes to the rescue: It contains the highest released episode number. | ||
Now we only need to determine which one is longer, and pass it to the <tt>pad</tt> function, | Now we only need to determine which one is longer, and pass it to the <tt>pad</tt> function, | ||
what is exactly what we have done in the example. | what is exactly what we have done in the example. | ||
=== Different formats for Movies & TV Series === | === Different formats for Movies & TV Series === | ||
Line 269: | Line 287: | ||
Depr := {%Depr% ? "[Depr]" : ""} | Depr := {%Depr% ? "[Depr]" : ""} | ||
Here the predefined variables are overwritten with formatted ones: | Here the predefined variables are overwritten with formatted ones: | ||
<tt>Ver</tt> is <tt>""</tt> when it is version 1 otherwise <tt>"v"%Ver%</tt> | <tt>Ver</tt> is <tt>""</tt> when it is version 1 otherwise <tt>"v"%Ver%</tt><br /> | ||
<tt>Cen</tt> is <tt>""</tt> if it is not censored otherwise <tt>"[Cen]"</tt> | <tt>Cen</tt> is <tt>""</tt> if it is not censored otherwise <tt>"[Cen]"</tt><br /> | ||
<tt>Depr</tt> is <tt>""</tt> if it is not deprecated otherwise <tt>"[Depr]"</tt> | <tt>Depr</tt> is <tt>""</tt> if it is not deprecated otherwise <tt>"[Depr]"</tt> | ||
=== Replacing invalid characters === | === Replacing invalid characters === | ||
Line 282: | Line 299: | ||
Look up the <tt>repl</tt> function in the Predefined Functions section. | Look up the <tt>repl</tt> function in the Predefined Functions section. | ||
If you don't feel like learning a bit regex (the seconds parameter), | If you don't feel like learning a bit regex (the seconds parameter), | ||
every character within the <tt>[]</tt> brackets are replaced by the third parameter. | |||
=== Piecing everything together === | |||
AT:=[%ATr%,%ATe%,%ATk%] | |||
ET:=[%ETe%,%ETr%,%ETk%] | |||
GT:="[" [%GTs%,%GTl%] "]" | |||
EpNoPad:=$pad(%EpNo%,$max($len(%EpHiNo%),$len(%EpCount%)),"0") | |||
Src:="["%Source%"]" | |||
Depr:={%Depr%?"[Depr]":""} | |||
Cen:={%Cen%?"[Cen]":""} | |||
Ver:={%Ver%="1"?"":"v"%Ver%} | |||
Movie := %AT%" - "%ET%" "%GT% %Depr% %Cen% %Src% %Ver% | |||
Other := %AT%" "%EpNoPad% %Ver% " - "%ET%" "%GT% %Depr% %Cen% %Src% | |||
FileName:= {%Type% = "Movie"? %Movie% : %Other%} | |||
PathName:="E:\My\Path\Name\" $repl(%AT%,'[\\":/*|<>?]',"") | |||
== | == Presets == | ||
Original preset with few tweaks. Filename as [group] [title] <epno><version> [uppercase CRC] [source][resolution][video codec].ext | |||
Episode number isn't used only for normal episodes in animes with only 1 of those, but always used is special eps regardless of total eps. | |||
AT:=[%ATr%,%ATe%,%ATk%] | AT:=[%ATr%,%ATe%,%ATk%] | ||
ET:=[%ETe%,%ETr%,%ETk%] | ET:=[%ETe%,%ETr%,%ETk%] | ||
Line 292: | Line 328: | ||
EpNoPad:=$pad(%EpNo%,$max($len(%EpHiNo%),$len(%EpCount%)),"0") | EpNoPad:=$pad(%EpNo%,$max($len(%EpHiNo%),$len(%EpCount%)),"0") | ||
Src:="["%Source%"]" | Src:="["$repl(%Source%,"B-R","BluRay")"]" | ||
Ver:={%Ver%="1"?"":"v"%Ver%} | |||
Res:="["%FVideoRes%"]" | |||
CRC:="["$uc(%FCrc%)"]" | |||
Codec:="["$repl(%FVCodec%,"H264/AVC","h264")"]" | |||
IsNotNormal:=$match($repl(%EpNo%,"[1234567890]",""),'[SCTPO]') | |||
EpNoV:={%IsNotNormal%="1"?"- "%EpNoPad%:{%EpCount%="1"?:"- "%EpNoPad%}} | |||
FileName:= | FileName:=$repl(%GT%" "%AT%" "%EpNoV%%Ver%" "%CRC%" "%Src% %Res% %Codec%," "," ") | ||
PathName:=" | PathName:="F:\" $repl(%AT%,'[\\\":/*|<>?]',"") | ||