# -*- coding: utf-8 -*- # Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs # Copyright (C) 2012-2014 Bastian Kleineidam # Copyright (C) 2015-2020 Tobias Gruetzmacher from ..scraper import _ParserScraper from ..helpers import indirectStarter, xpath_class class GoComics(_ParserScraper): url = 'https://www.gocomics.com/' imageSearch = '//picture[{}]/img'.format(xpath_class('item-comic-image')) prevSearch = '//a[{}]'.format(xpath_class('js-previous-comic')) latestSearch = '//div[{}]//a'.format(xpath_class('gc-deck--cta-0')) starter = indirectStarter help = 'Index format: yyyy/mm/dd' def __init__(self, name, path, lang=None): super(GoComics, self).__init__('GoComics/' + name) self.session.add_throttle('www.gocomics.com', 1.0, 2.0) self.url = 'https://www.gocomics.com/' + path self.shortname = name if lang: self.lang = lang def namer(self, image_url, page_url): prefix, year, month, day = page_url.rsplit('/', 3) return "%s_%s%s%s.gif" % (self.shortname, year, month, day) def getIndexStripUrl(self, index): return '{}/{}'.format(self.url, index) def shouldSkipUrl(self, url, data): """Skip pages without images.""" return data.xpath('//img[contains(@src, "content-error-missing")]') @classmethod def getmodules(cls): return ( # old comics removed from the listing cls('HeavenlyNostrils', 'heavenly-nostrils'), cls('MyCage', 'mycage'), # do not edit anything below since these entries are generated from # scripts/gocomics.py # START AUTOUPDATE cls('1AndDone', '1-and-done'), cls('2CowsAndAChicken', '2cowsandachicken'), cls('9ChickweedLane', '9chickweedlane'), cls('9To5', '9to5'), cls('AdamAtHome', 'adamathome'), cls('AdultChildren', 'adult-children'), cls('Agnes', 'agnes'), cls('AJAndMagnus', 'aj-and-magnus'), cls('AlisHouse', 'alis-house'), cls('AlleyOop', 'alley-oop'), cls('AmandaTheGreat', 'amanda-the-great'), cls('Andertoons', 'andertoons'), cls('AndyCapp', 'andycapp'), cls('AngryLittleGirls', 'angry-little-girls'), cls('AnimalCrackers', 'animalcrackers'), cls('Annie', 'annie'), cls('ArloAndJanis', 'arloandjanis'), cls('AskACat', 'ask-a-cat'), cls('AskShagg', 'askshagg'), cls('AtTavicat', 'tavicat'), cls('AuntyAcid', 'aunty-acid'), cls('BackInTheDay', 'backintheday'), cls('BackToBC', 'back-to-bc'), cls('Bacon', 'bacon'), cls('Badlands', 'badlands'), cls('BadMachinery', 'bad-machinery'), cls('BadReporter', 'badreporter'), cls('Baldo', 'baldo'), cls('BaldoEnEspanol', 'baldoespanol', 'es'), cls('BallardStreet', 'ballardstreet'), cls('BananaTriangle', 'banana-triangle'), cls('BarkeaterLake', 'barkeaterlake'), cls('BarneyAndClyde', 'barneyandclyde'), cls('BasicInstructions', 'basicinstructions'), cls('BC', 'bc'), cls('BeanieTheBrownie', 'beanie-the-brownie'), cls('Beardo', 'beardo'), cls('Ben', 'ben'), cls('BenitinYEneas', 'muttandjeffespanol', 'es'), cls('BergerAndWyse', 'berger-and-wyse'), cls('BerkeleyMews', 'berkeley-mews'), cls('Betty', 'betty'), cls('Bewley', 'bewley'), cls('BigNate', 'bignate'), cls('BigNateFirstClass', 'big-nate-first-class'), cls('BigTop', 'bigtop'), cls('Biographic', 'biographic'), cls('Birdbrains', 'birdbrains'), cls('BleekerTheRechargeableDog', 'bleeker'), cls('Bliss', 'bliss'), cls('BloomCounty', 'bloomcounty'), cls('BloomCounty2017', 'bloom-county'), cls('BobGorrell', 'bobgorrell'), cls('BobTheSquirrel', 'bobthesquirrel'), cls('BoNanas', 'bonanas'), cls('Boomerangs', 'boomerangs'), cls('Bottomliners', 'bottomliners'), cls('BoundAndGagged', 'boundandgagged'), cls('BrainSquirts', 'brain-squirts'), cls('BreakingCatNews', 'breaking-cat-news'), cls('BreakOfDay', 'break-of-day'), cls('Brevity', 'brevity'), cls('BrewsterRockit', 'brewsterrockit'), cls('BrianMcFadden', 'brian-mcfadden'), cls('BroomHilda', 'broomhilda'), cls('Bully', 'bully'), cls('Buni', 'buni'), cls('BushyTales', 'bushy-tales'), cls('CalvinAndHobbes', 'calvinandhobbes'), cls('CalvinAndHobbesEnEspanol', 'calvinandhobbesespanol', 'es'), cls('Candorville', 'candorville'), cls('CapsulasMedicas', 'capsulas-medicas%20', 'es'), cls('Cathy', 'cathy'), cls('CattitudeDoggonit', 'cattitude-doggonit'), cls('CestLaVie', 'cestlavie'), cls('CheapThrillsCuisine', 'cheap-thrills-cuisine'), cls('CheerUpEmoKid', 'cheer-up-emo-kid'), cls('ChipBok', 'chipbok'), cls('ChrisBritt', 'chrisbritt'), cls('ChuckleBros', 'chucklebros'), cls('CitizenDog', 'citizendog'), cls('Claw', 'claw'), cls('ClayBennett', 'claybennett'), cls('ClayJones', 'clayjones'), cls('ClearBlueWater', 'clearbluewater'), cls('Cleats', 'cleats'), cls('CloseToHome', 'closetohome'), cls('Committed', 'committed'), cls('Computoon', 'compu-toon'), cls('ConnieToTheWonnie', 'connie-to-the-wonnie'), cls('Cornered', 'cornered'), cls('CowAndBoyClassics', 'cowandboy'), cls('CowTown', 'cowtown'), cls('Crumb', 'crumb'), cls('CulDeSac', 'culdesac'), cls('DaddysHome', 'daddyshome'), cls('DanaSummers', 'danasummers'), cls('DanWasserman', 'danwasserman'), cls('DarkSideOfTheHorse', 'darksideofthehorse'), cls('DeepDarkFears', 'deep-dark-fears'), cls('DiamondLil', 'diamondlil'), cls('DickTracy', 'dicktracy'), cls('DilbertClassics', 'dilbert-classics'), cls('DilbertEnEspanol', 'dilbert-en-espanol', 'es'), cls('DinosaurComics', 'dinosaur-comics'), cls('DogEatDoug', 'dogeatdoug'), cls('DogsOfCKennel', 'dogsofckennel'), cls('DomesticAbuse', 'domesticabuse'), cls('DonBrutus', 'don-brutus', 'es'), cls('DoodleForFood', 'doodle-for-food'), cls('DoodleTown', 'doodle-town'), cls('Doonesbury', 'doonesbury'), cls('DorrisMcComics', 'dorris-mccomics'), cls('Drabble', 'drabble'), cls('DragonGirl', 'dragon-girl'), cls('DrewSheneman', 'drewsheneman'), cls('Drive', 'drive'), cls('DudeAndDude', 'dudedude'), cls('DumbwichCastle', 'dumbwich-castle'), cls('EdgeCity', 'edge-city'), cls('EdgeOfAdventure', 'edge-of-adventure'), cls('Eek', 'eek'), cls('ElCafDePoncho', 'el-cafe-de-poncho', 'es'), cls('EmmyLou', 'emmy-lou'), cls('Endtown', 'endtown'), cls('EricTheCircle', 'eric-the-circle'), cls('EverydayPeopleCartoons', 'everyday-people-cartoons'), cls('Eyebeam', 'eyebeam'), cls('FacesOfTheNewsByKerryWaghorn', 'facesinthenews'), cls('FamilyTree', 'familytree'), cls('Farcus', 'farcus'), cls('FatCats', 'fat-cats'), cls('FloAndFriends', 'floandfriends'), cls('FMinus', 'fminus'), cls('FoolishMortals', 'foolish-mortals'), cls('ForBetterOrForWorse', 'forbetterorforworse'), cls('ForHeavensSake', 'forheavenssake'), cls('FortKnox', 'fortknox'), cls('FourEyes', 'four-eyes'), cls('FowlLanguage', 'fowl-language'), cls('FoxTrot', 'foxtrot'), cls('FoxTrotClassics', 'foxtrotclassics'), cls('FoxTrotEnEspanol', 'foxtrotespanol', 'es'), cls('Francis', 'francis'), cls('FrankAndErnest', 'frank-and-ernest'), cls('Frazz', 'frazz'), cls('FredBasset', 'fredbasset'), cls('FredBassetEnEspanol', 'fredbassetespanol', 'es'), cls('FreeRange', 'freerange'), cls('FreshlySqueezed', 'freshlysqueezed'), cls('FrogApplause', 'frogapplause'), cls('Garfield', 'garfield'), cls('GarfieldClassics', 'garfield-classics'), cls('GarfieldEnEspanol', 'garfieldespanol%20', 'es'), cls('GarfieldMinusGarfield', 'garfieldminusgarfield'), cls('GaryMarkstein', 'garymarkstein'), cls('GaryVarvel', 'garyvarvel'), cls('GasolineAlley', 'gasolinealley'), cls('Gaturro', 'gaturro', 'es'), cls('Geech', 'geech'), cls('GetALife', 'getalife'), cls('GetFuzzy', 'getfuzzy'), cls('Gil', 'gil'), cls('GilThorp', 'gilthorp'), cls('GingerMeggs', 'gingermeggs'), cls('GlasbergenCartoons', 'glasbergen-cartoons'), cls('GManWebcomics', 'g-man-webcomics'), cls('GnomeSyndicate', 'gnome-syndicate'), cls('Goats', 'goats'), cls('GoComicsFanArt', 'fan-art'), cls('Graffiti', 'graffiti'), cls('GrandAvenue', 'grand-avenue'), cls('GrayMatters', 'gray-matters'), cls('GreenHumour', 'green-humour'), cls('HaikuEwe', 'haikuewe'), cls('HalfFull', 'half-full'), cls('Harley', 'harley'), cls('HealthCapsules', 'healthcapsules'), cls('HeartOfTheCity', 'heartofthecity'), cls('Heathcliff', 'heathcliff'), cls('HeathcliffEnEspanol', 'heathcliffespanol', 'es'), cls('HenryPayne', 'henrypayne'), cls('HerbAndJamaal', 'herbandjamaal'), cls('Herman', 'herman'), cls('HomeAndAway', 'homeandaway'), cls('HotComicsForCoolPeople', 'hot-comics-for-cool-people'), cls('HUBRIS', 'hubris'), cls('HumanCull', 'human-cull'), cls('HutchOwen', 'hutch-owen'), cls('ImagineThis', 'imaginethis'), cls('ImogenQuest', 'imogen-quest'), cls('InkPen', 'inkpen'), cls('InSecurity', 'in-security'), cls('InspectorDangersCrimeQuiz', 'inspector-dangers-crime-quiz'), cls('InTheBleachers', 'inthebleachers'), cls('InTheSticks', 'inthesticks'), cls('InvisibleBread', 'invisible-bread'), cls('ItsAllAboutYou', 'itsallaboutyou'), cls('JackOhman', 'jackohman'), cls('JanesWorld', 'janesworld'), cls('JeffDanziger', 'jeffdanziger'), cls('JeffStahler', 'jeffstahler'), cls('JenSorensen', 'jen-sorensen'), cls('JerryHolbert', 'jerryholbert'), cls('JimBentonCartoons', 'jim-benton-cartoons'), cls('JimMorin', 'jimmorin'), cls('JimsJournal', 'jimsjournal'), cls('JoeHeller', 'joe-heller'), cls('JoelPett', 'joelpett'), cls('JoeVanilla', 'joevanilla'), cls('JoeyAlisonSayersComics', 'joey-alison-sayers-comics'), cls('JohnDeering', 'johndeering'), cls('JumpStart', 'jumpstart'), cls('JustoYFranco', 'justo-y-franco', 'es'), cls('JustSayUncle', 'just-say-uncle'), cls('KenCatalino', 'kencatalino'), cls('KevinKallaugher', 'kevinkallaugher'), cls('KidBeowulf', 'kid-beowulf'), cls('KidSpot', 'kidspot'), cls('KidTown', 'kidtown'), cls('KitchenCapers', 'kitchen-capers'), cls('KitNCarlyle', 'kitncarlyle'), cls('Kliban', 'kliban'), cls('KlibansCats', 'klibans-cats'), cls('LaCucaracha', 'lacucaracha'), cls('LaCucarachaEnEspanol', 'la-cucaracha-en-espanol', 'es'), cls('LaloAlcaraz', 'laloalcaraz'), cls('LaloAlcarazEnEspanol', 'laloenespanol', 'es'), cls('LardsWorldPeaceTips', 'lards-world-peace-tips'), cls('LasHermanasStone', 'stonesoup_espanol', 'es'), cls('LastKiss', 'lastkiss'), cls('LayLines', 'lay-lines'), cls('LearnToSpeakCat', 'learn-to-speak-cat'), cls('LibertyMeadows', 'libertymeadows'), cls('LilAbner', 'lil-abner'), cls('Lio', 'lio'), cls('LioEnEspanol', 'lioespanol', 'es'), cls('LisaBenson', 'lisabenson'), cls('LittleDogLost', 'littledoglost'), cls('LittleFriedChickenAndSushi', 'little-fried-chicken-and-sushi'), cls('LittleNemo', 'little-nemo'), cls('Lola', 'lola'), cls('LolaEnEspanol', 'lola-en-espanol', 'es'), cls('LooksGoodOnPaper', 'looks-good-on-paper'), cls('LooseParts', 'looseparts'), cls('LosOsorios', 'los-osorios', 'es'), cls('LostSheep', 'lostsheep'), cls('LostSideOfSuburbia', 'lostsideofsuburbia'), cls('Luann', 'luann'), cls('LuannAgainn', 'luann-againn'), cls('LuannEnEspanol', 'luannspanish', 'es'), cls('LuckyCow', 'luckycow'), cls('LugNuts', 'lug-nuts'), cls('Lunarbaboon', 'lunarbaboon'), cls('MagicInAMinute', 'magicinaminute'), cls('Magnificatz', 'magnificatz'), cls('Maintaining', 'maintaining'), cls('MakingIt', 'making-it'), cls('MariasDay', 'marias-day'), cls('Marmaduke', 'marmaduke'), cls('MarshallRamsey', 'marshallramsey'), cls('MattBors', 'matt-bors'), cls('MattDavies', 'mattdavies'), cls('MattWuerker', 'mattwuerker'), cls('MazeToonsPuzzle', 'mazetoons-puzzle'), cls('MediumLarge', 'medium-large'), cls('MegClassics', 'meg-classics'), cls('MichaelAndrew', 'michael-andrew'), cls('MichaelRamirez', 'michaelramirez'), cls('Microcosm', 'microcosm'), cls('MikeDuJour', 'mike-du-jour'), cls('MikeLester', 'mike-lester'), cls('MikeLuckovich', 'mikeluckovich'), cls('ModeratelyConfused', 'moderately-confused'), cls('Momma', 'momma'), cls('MomsCancer', 'moms-cancer'), cls('Monty', 'monty'), cls('MontyDiaros', 'monty-diaros', 'es'), cls('MotleyClassics', 'motley-classics'), cls('MrLowe', 'mr-lowe'), cls('MustardAndBoloney', 'mustard-and-boloney'), cls('MuttAndJeff', 'muttandjeff'), cls('MyCageNewAndOld', 'mycage'), cls('MythTickle', 'mythtickle'), cls('Nancy', 'nancy'), cls('NancyClassics', 'nancy-classics'), cls('NateElGrande', 'nate-el-grande', 'es'), cls('NestHeads', 'nestheads'), cls('NEUROTICA', 'neurotica'), cls('NewAdventuresOfQueenVictoria', 'thenewadventuresofqueenvictoria'), cls('NextDoorNeighbors', 'next-door-neighbors'), cls('NickAnderson', 'nickanderson'), cls('NickAndZuzu', 'nick-and-zuzu'), cls('NonSequitur', 'nonsequitur'), cls('NothingIsNotSomething', 'nothing-is-not-something'), cls('NotInventedHere', 'not-invented-here'), cls('NowRecharging', 'now-recharging'), cls('OffTheMark', 'offthemark'), cls('OhBrother', 'oh-brother'), cls('OllieAndQuentin', 'ollie-and-quentin'), cls('OnAClaireDay', 'onaclaireday'), cls('OneBigHappy', 'onebighappy'), cls('OrdinaryBill', 'ordinary-bill'), cls('OriginsOfTheSundayComics', 'origins-of-the-sunday-comics'), cls('OutOfTheGenePoolReRuns', 'outofthegenepool'), cls('Overboard', 'overboard'), cls('OverboardEnEspanol', 'overboardespanol', 'es'), cls('OverTheHedge', 'overthehedge'), cls('Owlturd', 'owlturd'), cls('OzyAndMillie', 'ozy-and-millie'), cls('PatOliphant', 'patoliphant'), cls('PaulSzep', 'paulszep'), cls('PCAndPixel', 'pcandpixel'), cls('Peanuts', 'peanuts'), cls('PeanutsBegins', 'peanuts-begins'), cls('PeanutsEnEspanol', 'peanuts-espanol', 'es'), cls('PearlsBeforeSwine', 'pearlsbeforeswine'), cls('Periquita', 'periquita', 'es'), cls('PerlasParaLosCerdos', 'perlas-para-los-cerdos', 'es'), cls('PerryBibleFellowship', 'perry-bible-fellowship'), cls('PhilHands', 'phil-hands'), cls('PhoebeAndHerUnicorn', 'phoebe-and-her-unicorn'), cls('Pibgorn', 'pibgorn'), cls('PibgornSketches', 'pibgornsketches'), cls('Pickles', 'pickles'), cls('PicturesInBoxes', 'pictures-in-boxes'), cls('PieComic', 'pie-comic'), cls('Pinkerton', 'pinkerton'), cls('PleaseListenToMe', 'please-listen-to-me'), cls('Pluggers', 'pluggers'), cls('PoochCafe', 'poochcafe'), cls('Poorcraft', 'poorcraft'), cls('PoorlyDrawnLines', 'poorly-drawn-lines'), cls('PopCultureShockTherapy', 'pop-culture-shock-therapy'), cls('PotShots', 'pot-shots'), cls('PreTeena', 'preteena'), cls('PricklyCity', 'pricklycity'), cls('PromisesPromises', 'promises-promises'), cls('QuestionableQuotebook', 'questionable-quotebook'), cls('RabbitsAgainstMagic', 'rabbitsagainstmagic'), cls('RaisingDuncan', 'raising-duncan'), cls('RandolphItch2Am', 'randolphitch'), cls('RealityCheck', 'realitycheck'), cls('RealLifeAdventures', 'reallifeadventures'), cls('RebeccaHendin', 'rebecca-hendin'), cls('RedAndRover', 'redandrover'), cls('ReplyAll', 'replyall'), cls('ReplyAllLite', 'reply-all-lite'), cls('RichardsPoorAlmanac', 'richards-poor-almanac'), cls('RipHaywire', 'riphaywire'), cls('RipleysBelieveItOrNot', 'ripleysbelieveitornot'), cls('RipleysBelieveItOrNotSpanish', 'ripleys-en-espanol', 'es'), cls('RobbieAndBobby', 'robbie-and-bobby'), cls('RobertAriail', 'robert-ariail'), cls('RobRogers', 'robrogers'), cls('RoseIsRose', 'roseisrose'), cls('Rubes', 'rubes'), cls('RudyPark', 'rudypark'), cls('SarahsScribbles', 'sarahs-scribbles'), cls('SaturdayMorningBreakfastCereal', 'saturday-morning-breakfast-cereal'), cls('SavageChickens', 'savage-chickens'), cls('ScaryGary', 'scarygary'), cls('ScenesFromAMultiverse', 'scenes-from-a-multiverse'), cls('ScottStantis', 'scottstantis'), cls('Sheldon', 'sheldon'), cls('ShirleyAndSonClassics', 'shirley-and-son-classics'), cls('Shoe', 'shoe'), cls('Shoecabbage', 'shoecabbage'), cls('Shortcuts', 'shortcuts'), cls('ShutterbugFollies', 'shutterbug-follies'), cls('SigneWilkinson', 'signewilkinson'), cls('SketchsharkComics', 'sketchshark-comics'), cls('SkinHorse', 'skinhorse'), cls('Skippy', 'skippy'), cls('SmallPotatoes', 'small-potatoes'), cls('Snowflakes', 'snowflakes'), cls('SnowSez', 'snow-sez'), cls('Speechless', 'speechless'), cls('SpeedBump', 'speedbump'), cls('SpiritOfTheStaircase', 'spirit-of-the-staircase'), cls('SpotTheFrog', 'spot-the-frog'), cls('Starling', 'starling'), cls('SteveBenson', 'stevebenson'), cls('SteveBreen', 'stevebreen'), cls('SteveKelley', 'stevekelley'), cls('StickyComics', 'sticky-comics'), cls('StoneSoup', 'stonesoup'), cls('StoneSoupClassics', 'stone-soup-classics'), cls('StrangeBrew', 'strangebrew'), cls('StuartCarlson', 'stuartcarlson'), cls('SunnyStreet', 'sunny-street'), cls('SunshineState', 'sunshine-state'), cls('SuperFunPakComix', 'super-fun-pak-comix'), cls('SweetAndSourPork', 'sweet-and-sour-pork'), cls('Sylvia', 'sylvia'), cls('TankMcNamara', 'tankmcnamara'), cls('Tarzan', 'tarzan'), cls('TarzanEnEspanol', 'tarzan-en-espanol', 'es'), cls('TedRall', 'ted-rall'), cls('TenCats', 'ten-cats'), cls('Thatababy', 'thatababy'), cls('ThatIsPriceless', 'that-is-priceless'), cls('ThatNewCarlSmell', 'that-new-carl-smell'), cls('ThatsLife', 'thats-life'), cls('TheAcademiaWaltz', 'academiawaltz'), cls('TheAdventuresOfBusinessCat', 'the-adventures-of-business-cat'), cls('TheArgyleSweater', 'theargylesweater'), cls('TheAwkwardYeti', 'the-awkward-yeti'), cls('TheBarn', 'thebarn'), cls('TheBentPinky', 'the-bent-pinky'), cls('TheBestMedicineCartoon', 'the-best-medicine'), cls('TheBigPicture', 'thebigpicture'), cls('TheBoondocks', 'boondocks'), cls('TheBornLoser', 'the-born-loser'), cls('TheBuckets', 'thebuckets'), cls('TheCity', 'thecity'), cls('TheComicStripThatHasAFinaleEveryDay', 'the-comic-strip-that-has-a-finale-every-day'), cls('TheConjurers', 'the-conjurers'), cls('TheCreeps', 'the-creeps'), cls('TheDailyDrawing', 'the-daily-drawing'), cls('TheDinetteSet', 'dinetteset'), cls('TheDoozies', 'thedoozies'), cls('TheDuplex', 'duplex'), cls('TheElderberries', 'theelderberries'), cls('TheFlyingMcCoys', 'theflyingmccoys'), cls('TheFuscoBrothers', 'thefuscobrothers'), cls('TheGentlemansArmchair', 'the-gentlemans-armchair'), cls('TheGrizzwells', 'thegrizzwells'), cls('TheHumbleStumble', 'humble-stumble'), cls('TheKChronicles', 'thekchronicles'), cls('TheKnightLife', 'theknightlife'), cls('TheLeftyBoscoPictureShow', 'leftyboscopictureshow'), cls('TheLostBear', 'the-lost-bear'), cls('TheMartianConfederacy', 'the-martian-confederacy'), cls('TheMeaningOfLila', 'meaningoflila'), cls('TheMiddletons', 'themiddletons'), cls('TheNorm40', 'the-norm-4-0'), cls('TheNormClassics', 'thenorm'), cls('TheOtherCoast', 'theothercoast'), cls('TheOtherEnd', 'the-other-end'), cls('TheQuixoteSyndrome', 'the-quixote-syndrome'), cls('TheSunshineClub', 'the-sunshine-club'), cls('TheUpsideDownWorldOfGustaveVerbeek', 'upside-down-world-of-gustave-verbeek'), cls('TheWanderingMelon', 'the-wandering-melon'), cls('TheWizardOfIdSpanish', 'wizardofidespanol', 'es'), cls('TheWorriedWell', 'the-worried-well'), cls('think', 'think'), cls('ThinLines', 'thinlines'), cls('TimEagan', 'tim-eagan'), cls('TinySepuku', 'tinysepuku'), cls('TOBY', 'toby'), cls('TomTheDancingBug', 'tomthedancingbug'), cls('TomToles', 'tomtoles'), cls('TooMuchCoffeeMan', 'toomuchcoffeeman'), cls('ToughTown', 'tough-town'), cls('Trivquiz', 'trivquiz'), cls('Trucutu', 'trucutu', 'es'), cls('TruthFacts', 'truth-facts'), cls('Tutelandia', 'tutelandia', 'es'), cls('TwoPartyOpera', 'two-party-opera'), cls('UncleArtsFunland', 'uncleartsfunland'), cls('UnderstandingChaos', 'understanding-chaos'), cls('UnstrangePhenomena', 'unstrange-phenomena'), cls('USAcres', 'us-acres'), cls('ViewsAfrica', 'viewsafrica'), cls('ViewsAmerica', 'viewsamerica'), cls('ViewsAsia', 'viewsasia'), cls('ViewsBusiness', 'viewsbusiness'), cls('ViewsEurope', 'viewseurope'), cls('ViewsLatinAmerica', 'viewslatinamerica'), cls('ViewsMidEast', 'viewsmideast'), cls('ViewsOfTheWorld', 'viewsoftheworld'), cls('ViiviAndWagner', 'viivi-and-wagner'), cls('WallaceTheBrave', 'wallace-the-brave'), cls('WaltHandelsman', 'walthandelsman'), cls('Warped', 'warped'), cls('WatchYourHead', 'watchyourhead'), cls('WaynoVision', 'waynovision'), cls('WeePals', 'weepals'), cls('Widdershins', 'widdershins'), cls('WideOpen', 'wide-open'), cls('WinLoseDrew', 'drewlitton'), cls('Winston', 'winston'), cls('WizardOfId', 'wizardofid'), cls('WizardOfIdClassics', 'wizard-of-id-classics'), cls('Wondermark', 'wondermark'), cls('WorkingDaze', 'working-daze'), cls('WorkingItOut', 'workingitout'), cls('WorldOfWonder', 'world-of-wonder'), cls('WrongHands', 'wrong-hands'), cls('WTDuck', 'wtduck'), cls('WuMo', 'wumo'), cls('WumoEnEspanol', 'wumoespanol', 'es'), cls('ZackHill', 'zackhill'), cls('ZenPencils', 'zen-pencils'), cls('Ziggy', 'ziggy'), cls('ZiggyEnEspanol', 'ziggyespanol', 'es'), # END AUTOUPDATE )