From cfbf491bd4b8d16196c4868baed21d0920a69a5d Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Sat, 20 Oct 2012 16:15:48 -0500 Subject: [PATCH] Add conditional replace_metadata feature. --- defaults.ini | 8 +++++-- fanficdownloader/adapters/adapter_test1.py | 2 +- fanficdownloader/story.py | 25 ++++++++++++++++------ plugin-defaults.ini | 8 +++++-- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/defaults.ini b/defaults.ini index 7797f34..88c211e 100644 --- a/defaults.ini +++ b/defaults.ini @@ -161,8 +161,10 @@ extratags: FanFiction ## for regexp details. ## Make sure to keep at least one space at the start of each line and ## to escape % to %%, if used. -## Two or three part lines. Two part effect everything. +## Two, three or five part lines. Two part effect everything. ## Three part effect only those key(s) lists. +## *Five* part lines. Effect only when trailing conditional key=>regexp matches +## metakey[,metakey]=>pattern=>replacement[&&metakey=>regexp] #replace_metadata: # genre,category=>Sci-Fi=>SF # Puella Magi Madoka Magica.* => Madoka @@ -170,7 +172,9 @@ extratags: FanFiction # Crossover: (.*)=>\1 # title=>(.*)Great(.*)=>\1Moderate\2 # .*-Centered=> - +# characters=>Sam W\.=>Sam Witwicky&&category=>Transformers +# characters=>Sam W\.=>Sam Winchester&&category=>Supernatural + ## Some readers don't show horizontal rule (
) tags correctly. ## This replaces them all with a centered '* * *'. (Note centering ## doesn't work on some devices either.) diff --git a/fanficdownloader/adapters/adapter_test1.py b/fanficdownloader/adapters/adapter_test1.py index b0f7c47..3fdc0be 100644 --- a/fanficdownloader/adapters/adapter_test1.py +++ b/fanficdownloader/adapters/adapter_test1.py @@ -129,7 +129,7 @@ Some more longer description. "I suck at summaries!" "Better than it sounds!" self.story.addToList('genre','Fantasy') self.story.addToList('genre','Comedy') - self.story.addToList('genre','SF') + self.story.addToList('genre','Sci-Fi') self.story.addToList('genre','Noir') self.story.addToList('characters','Bob Smith') diff --git a/fanficdownloader/story.py b/fanficdownloader/story.py index ac630d8..f176d50 100644 --- a/fanficdownloader/story.py +++ b/fanficdownloader/story.py @@ -253,24 +253,35 @@ class Story(Configurable): ## Three part effect only those key(s) lists. ## pattern=>replacement ## metakey,metakey=>pattern=>replacement + ## *Five* part lines. Effect only when trailing conditional key=>regexp matches + ## metakey[,metakey]=>pattern=>replacement[&&metakey=>regexp] def setReplace(self,replace): for line in replace.splitlines(): + if "&&" in line: + (line,conditional) = map( lambda x: x.strip(), line.split("&&") ) + condparts = map( lambda x: x.strip(), conditional.split("=>") ) + else: + condparts=[None,None] if "=>" in line: parts = map( lambda x: x.strip(), line.split("=>") ) if len(parts) > 2: parts[0] = map( lambda x: x.strip(), parts[0].split(",") ) - self.replacements.append(parts) + self.replacements.append(parts+condparts) else: - self.replacements.append([None]+parts) + self.replacements.append([None]+parts+condparts) def doReplacments(self,value,key): - for (keys,p,v) in self.replacements: + for (keys,regexp,replacement,condkey,condregexp) in self.replacements: if (keys == None or key in keys) \ and isinstance(value,basestring) \ - and re.search(p,value): - #pv=value - value = re.sub(p,v,value) - #print("change:%s => %s === %s => %s "%(p,v,pv,value)) + and re.search(regexp,value): + doreplace=True + if condkey: + condval = self.getMetadata(condkey) + doreplace = condval != None and re.search(condregexp,condval) + + if doreplace: + value = re.sub(regexp,replacement,value) return value def getMetadataRaw(self,key): diff --git a/plugin-defaults.ini b/plugin-defaults.ini index 15a6ebe..c34bf8a 100644 --- a/plugin-defaults.ini +++ b/plugin-defaults.ini @@ -131,8 +131,10 @@ extratags: FanFiction ## for regexp details. ## Make sure to keep at least one space at the start of each line and ## to escape % to %%, if used. -## Two or three part lines. Two part effect everything. +## Two, three or five part lines. Two part effect everything. ## Three part effect only those key(s) lists. +## *Five* part lines. Effect only when trailing conditional key=>regexp matches +## metakey[,metakey]=>pattern=>replacement[&&metakey=>regexp] #replace_metadata: # genre,category=>Sci-Fi=>SF # Puella Magi Madoka Magica.* => Madoka @@ -140,7 +142,9 @@ extratags: FanFiction # Crossover: (.*)=>\1 # title=>(.*)Great(.*)=>\1Moderate\2 # .*-Centered=> - +# characters=>Sam W\.=>Sam Witwicky&&category=>Transformers +# characters=>Sam W\.=>Sam Winchester&&category=>Supernatural + ## Some readers don't show horizontal rule (
) tags correctly. ## This replaces them all with a centered '* * *'. (Note centering ## doesn't work on some devices either.)