epubname rules documentation ---------------------------- Book naming is controlled by a set of rules loaded from a file At runtime, a rules file is searched for, first in the user's home directory and then in the installed files for epubname. The paths of these files specific to your system are listed in --help output. The rules are checked, from first to last, for each file being renamed. The first rule that succeeds is used. Rules have the following format: label authorMatch "..." subjectMatch "..." titlePat "..." name "..." label is to identify what the rule is for to the user and also for verbose output (helpful for debugging rules) The indented fields are rule commands and consist of: authorMatch - Optional. If present, it's a regexp pattern that must match an author in the book's metadata. If it doesn't match, this rule is rejected. This may be a partial match, "bar" will match if any author looks like "foo bar baz" subjectMatch - Optional. If present, it's a regexp pattern that must match an subject in the book's metadata. If it doesn't match, this rule is rejected. This may be a partial match, "bar" will match if any subject looks like "foo bar baz" titlePat - a regular expression for picking apart the title string in the book's metadata. The pieces in capture groups ( ) are exposed as numbered matches in the name construction field. If this match fails, this rule is rejected. name - instructions for building up a new book filename, most often using the parts extracted in titlePat. More on this below In the name command, there are several functions that can be used. These functions are delimited with parenthesis in the name command's expression. authors - Get formatted authors from the metadata. If there are any authors, a hyphen will be placed after them in the resulting string. syntax: (authors) INT - Retrieve the text of a specific numbered item from the title pattern match results syntax: (INT) monthNum INDEX - Construct a numeric month from a variety of English months strings. Including abbreviations and ranges syntax: (monthNum INT) examples: "January" -> "01" "Feb" -> "02" "Mar-Apr" -> "03_04" "September/October" -> "09_10" pad WIDTH INDEX - Pad a numeric value from the pattern match results syntax: (pad INT INT) examples: 2 "3" -> "03" 3 "10" -> "010" publisher - Get the formatted publisher file-as string from the metadata syntax: (publisher) scrub INDEX - Clean up an item from the pattern match results. A large number of punctuation is removed and/or converted into other characters, and the string is CamelCased. In the end, only alphanumerics, - and _ are used. syntax: (scrub INT) wordNum WIDTH INDEX - Construct a numeric string from an English word for a number, with padding. Works on strings from "One" to "Twenty" syntax: (wordNum INT INT) example: 2 "One" -> "01" 3 "Twenty" -> "020" year - Get the formatted publication year from the metadata syntax: (year) Anything else, not in parenthesis, is a string literal to be used at that position in the resulting string. This probably seems confusing, some examples may help. This one is a fictitious magazine with issue and date info in the title: original book metadata: title: Adventurer's Weekly Issue 53, May 2008 epubname rule: magAdventureWeekly titlePat "(Adventurer's Weekly) Issue ([0-9]+), ([^ ]+) ([0-9]{4})$" name "(scrub 1)Magazine(pad 3 2)_(4)-(monthNum 3)" resulting title: "AdventurersWeeklyMagazine053_2008-05" Here's one using some more functions: original book metadata: title: Thrilling Journeys Three creator role: aut text: The Thrilling Authors epubname rule: compThrillingJourneys author "Thrilling Authors" titlePat "(Thrilling Journeys) (.*)" name "(scrub 1)(wordNum 2 2)" resulting title: "ThrillingJourneys03" And here's what happens when an ordinary (non-periodical) book is formatted: original book metadata: title: Springtime in the Village creator role: aut file-as: Dandridge, Suzanne text: Suzanne Dandridge date event: publication text: 2012-10-09 epubname rule: ordinary_book titlePat "(.*)" name "(authors)(scrub 1)(year)" resulting title: "DandridgeSuzanne-SpringtimeInTheVillage_2012" The last rule in default.rules, ordinary_book is very important, and looks like this: ordinary_book titlePat "(.*)" name "(authors)(scrub 1)(year)" This rule will match any book and is used to format all simple author-title situations. This rules is responsible for the basic epubname behavior and should always be present and always be last. Preceding a rule label with ! will "switch off" the entire rule. It's a simple way to comment out a single rule in its entirety. example: !compThrillingJourneys author "Thrilling Authors" titlePat "(Thrilling Journeys) (.*)" name "(scrub 1)(wordNum 2 2)"