def load_subreddit(self, subreddit): emotes_filename = "emotes/" + subreddit + ".yaml" tag_filename = "tags/" + subreddit + ".yaml" try: emote_data = bplib.load_yaml_file(open(emotes_filename)) except IOError: return None # Subreddit just doesn't exist try: tag_data = bplib.load_yaml_file(open(tag_filename)) except IOError: tag_data = {} return self.load_from_data("r/" + subreddit, emote_data, tag_data)
def main(): parser = argparse.ArgumentParser(description="Extract emotes from subreddit CSS") parser.add_argument("css", help="Input CSS file", type=argparse.FileType(mode="r")) parser.add_argument("emotes", help="Output emotes file", type=argparse.FileType(mode="w")) args = parser.parse_args() name = os.path.splitext(os.path.basename(args.css.name))[0] with open("data/rules.yaml") as file: config = bplib.load_yaml_file(file) extconfig = config["Extraction"].get(name, {}) # Load CSS css_rules = list(bplib.css.parse_css_file(args.css)) if extconfig.get("RespectIgnore", True): bplib.extract.filter_ponyscript_ignores(css_rules) # Extract raw emote data partial_emotes = bplib.extract.extract_partial_emotes(css_rules) emotes = bplib.extract.combine_partial_emotes(partial_emotes) bplib.extract.check_variants(emotes) # Process emotes bplib.extract.classify_emotes(emotes) # Generate output file file = bplib.objects.Subreddit(name, emotes, {}) yaml.dump(file.dump_emotes(), args.emotes)
def main(): parser = argparse.ArgumentParser(description="Generate addon data files from emotes") parser.add_argument("-j", "--js", help="Output JS data file", default="build/bpm-data.js") parser.add_argument("-c", "--css", help="Output CSS file", default="build/emote-classes.css") parser.add_argument("--no-compress", help="Disable CSS compression", action="store_true") args = parser.parse_args() files = {} with open("data/rules.yaml") as file: config = bplib.load_yaml_file(file) with open("data/tags.yaml") as file: tagdata = bplib.load_yaml_file(file) print("Loading emotes") loader = bplib.objects.SubredditLoader() for subreddit in config["Subreddits"]: file = loader.load_subreddit(subreddit) if file is None: continue files[file.name] = file print("Processing") emotes, sources = resolve_emotes(files, config, tagdata) css_rules = build_css([emote_set[0] for emote_set in emotes.values()]) tag_id2name, tag_name2id = build_tag_map(emotes, tagdata) js_map = build_js_map(config, tagdata, emotes, sources, tag_name2id) sr_id2name, sr_name2id = build_sr_data(files) if not args.no_compress: bplib.condense.condense_css(css_rules) print("Dumping") with open(args.css, "w") as file: dump_css(file, css_rules) with open(args.js, "w") as file: dump_js_data(file, js_map, sr_id2name, sr_name2id, tag_id2name, tag_name2id)
def load_config(self): self.config = bplib.load_yaml_file(open("data/rules.yaml")) self.tag_config = bplib.load_yaml_file(open("data/tags.yaml"))
if subreddit != "mylittlepony": for name in files["mylittlepony"].emotes: if name in file.emotes: del file.emotes[name] return file def make_tag_list(): global all_tags tmp = set() for (subreddit, file) in files.items(): for (name, emote) in file.emotes.items(): tmp |= emote.tags all_tags = sorted(tmp) print("Loading emotes...") config = bplib.load_yaml_file(open("data/rules.yaml")) files = {} loader = bplib.objects.SubredditLoader() subreddits = config["Subreddits"] subreddits.remove("mylittlepony") subreddits.insert(0, "mylittlepony") for subreddit in config["Subreddits"]: file = loader.load_subreddit(subreddit) if file is None: continue filter_file(file) files[subreddit] = file make_tag_list() print("Done.") def sync_tags(subreddit):