Esempio n. 1
0
 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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
 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"))
Esempio n. 5
0
    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):
Esempio n. 6
0
 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"))