示例#1
0
def parse_mythic_spell(sb, book):
	spell = parse_section(sb, book, keys=False)
	spell['type'] = 'mythic_spell'
	spell['subtype'] = 'mythic_spell'
	for key, value in sb.keys:
		mythic_spell_parse_function(key)(spell, value)
	return spell
示例#2
0
def parse_item(sb, book):
    item = {
        'type': 'item',
        'source': book,
        'name': filter_name(sb.name.strip())
    }
    text = []
    for key, value in sb.keys:
        item_parse_function(key, sb.name.strip())(item, value)
    for detail in sb.details:
        if isinstance(
                detail,
                StatBlockSection) and detail.name.startswith("Construction"):
            for key, value in detail.keys:
                item_parse_function(key, detail.name.strip())(item, value)
        elif isinstance(detail, StatBlockSection):
            sections = item.setdefault('sections', [])
            sections.append(parse_section(detail, book))
        elif isinstance(detail, StatBlockHeading):
            sections.append(parse_stat_block(sb, book, no_sb=no_sb))
        else:
            if isinstance(detail, dict) or isinstance(detail, Heading):
                text.append(detail)
            else:
                text.append(unicode(detail))
    if len(text) > 0:
        collapse_text(item, text)
    return item
示例#3
0
def parse_mythic_spell(sb, book):
    spell = parse_section(sb, book, keys=False)
    spell['type'] = 'mythic_spell'
    spell['subtype'] = 'mythic_spell'
    for key, value in sb.keys:
        mythic_spell_parse_function(key)(spell, value)
    return spell
示例#4
0
def parse_spell(sb, book):
	spell = parse_section(sb, book, keys=False)
	spell['type'] = 'spell'
	for key, value in sb.keys:
		spell_parse_function(key)(spell, value)
	if spell['source'] == 'Advanced Race Guide':
		text = ''.join(BeautifulSoup(spell['text']).findAll(text=True))
		spell['description'] = text.split(".")[0] + "."
	return spell
def parse_kingdom_resource(sb, book):
	details = []
	for detail in sb.details:
		details.append(detail)
	sb.details = details
	kingdom_resource = parse_section(sb, book, keys=False)
	for key, value in sb.keys:
		kingdom_resource_parse_function(key)(kingdom_resource, value)
	kingdom_resource['type'] = 'kingdom_resource'
	return kingdom_resource
示例#6
0
def parse_kingdom_resource(sb, book):
    details = []
    for detail in sb.details:
        details.append(detail)
    sb.details = details
    kingdom_resource = parse_section(sb, book, keys=False)
    for key, value in sb.keys:
        kingdom_resource_parse_function(key)(kingdom_resource, value)
    kingdom_resource['type'] = 'kingdom_resource'
    return kingdom_resource
示例#7
0
def parse_army(sb, book):
    details = []
    for detail in sb.details:
        details.append(detail)
    sb.details = details
    army = parse_section(sb, book, keys=False)
    for key, value in sb.keys:
        army_parse_function(key)(army, value)
    army['type'] = 'army'
    return army
示例#8
0
def parse_army(sb, book):
	details = []
	for detail in sb.details:
		details.append(detail)
	sb.details = details
	army = parse_section(sb, book, keys=False)
	for key, value in sb.keys:
		army_parse_function(key)(army, value)
	army['type'] = 'army'
	return army
示例#9
0
def parse_affliction(sb, book):
	affliction = parse_section(sb, book, keys=False)
	affliction['type'] = 'affliction'
	for key, value in sb.keys:
		affliction_parse_function(key)(affliction, value)
	if affliction.has_key('effects'):
		effects = affliction['effects']
		if len(effects) == 1:
			affliction['effect'] = effects[0]
		else:
			affliction['effect'] = "; ".join(["[%s]" % e for e in effects])
		del affliction['effects']
	return affliction
示例#10
0
def parse_haunt(sb, book):
    details = []
    for detail in sb.details:
        details.append(detail)
    sb.details = details
    haunt = parse_section(sb, book, keys=False)
    for key, value in sb.keys:
        haunt_parse_function(key)(haunt, value)
    haunt["type"] = "haunt"
    if "CR" in haunt["name"]:
        names = haunt["name"].split("CR")
        haunt["name"] = filter_name(names.pop(0).strip())
        haunt["cr"] = int(names.pop(0).strip())
    return haunt
示例#11
0
def parse_haunt(sb, book):
    details = []
    for detail in sb.details:
        details.append(detail)
    sb.details = details
    haunt = parse_section(sb, book, keys=False)
    for key, value in sb.keys:
        haunt_parse_function(key)(haunt, value)
    haunt['type'] = 'haunt'
    if 'CR' in haunt['name']:
        names = haunt['name'].split('CR')
        haunt['name'] = filter_name(names.pop(0).strip())
        haunt['cr'] = int(names.pop(0).strip())
    return haunt
示例#12
0
def parse_settlement(sb, book):
	settlement = {'type': 'settlement', 'source': book, 'name': filter_name(sb.name.strip())}
	text = []
	for key, value in sb.keys:
		settlement_parse_function(key)(settlement, value)
	for detail in sb.details:
		for key, value in detail.keys:
			settlement_parse_function(key)(settlement, value)
		if len(detail.details) > 0:
			sections = settlement.setdefault('sections', [])
			sec = parse_section(detail, book, keys=False)
			if sec['name'] == 'DEMOGRAPHICS':
				sec['name'] = 'Notable NPCs'
			sections.append(sec)
	return settlement
示例#13
0
def parse_spellbook(sb, book):
	newdetails = []
	for detail in sb.details:
		if hasattr(detail, 'level') and detail.level == 5:
			newdetails.append(detail.name)
		else:
			newdetails.append(detail)
	sb.details = newdetails
	section = parse_section(sb, book, keys=False)
	for key in sb.keys:
		newsec = {'type': 'section', 'source': book, 'name': key[0], 'text': key[1]}
		sections = section.setdefault('sections', [])
		sections.insert(1, newsec)
	section['subtype'] = 'spellbook'
	return section
示例#14
0
def parse_spellbook(sb, book):
    newdetails = []
    for detail in sb.details:
        if hasattr(detail, "level") and detail.level == 5:
            newdetails.append(detail.name)
        else:
            newdetails.append(detail)
    sb.details = newdetails
    section = parse_section(sb, book)
    for key in sb.keys:
        newsec = {"type": "section", "source": book, "name": key[0], "text": key[1]}
        sections = section.setdefault("sections", [])
        sections.insert(1, newsec)
    section["subtype"] = "spellbook"
    return section
示例#15
0
def parse_item(sb, book):
    item = {"type": "item", "source": book, "name": filter_name(sb.name.strip())}
    text = []
    for key, value in sb.keys:
        item_parse_function(key)(item, value)
    for detail in sb.details:
        if detail.__class__ == StatBlockSection and detail.name == "Construction":
            for key, value in detail.keys:
                item_parse_function(key)(item, value)
        elif detail.__class__ == StatBlockSection:
            sections = item.setdefault("sections", [])
            sections.append(parse_section(detail, book))
        else:
            text.append(unicode(detail))
    if len(text) > 0:
        item["text"] = "".join(text)
    return item
示例#16
0
def parse_trap(sb, book):
    details = []
    for detail in sb.details:
        if detail.__class__ in (StatBlockHeading, StatBlockSection) and detail.name == "Effects":
            sb.keys.extend(detail.keys)
            details.extend(detail.details)
        else:
            details.append(detail)
    sb.details = details
    trap = parse_section(sb, book)
    for key, value in sb.keys:
        trap_parse_function(key)(trap, value)
    trap["type"] = "trap"
    if "CR" in trap["name"]:
        names = trap["name"].split("CR")
        trap["name"] = filter_name(names.pop(0).strip())
        trap["cr"] = int(names.pop(0).strip())
    return trap
示例#17
0
def parse_trap(sb, book):
	details = []
	for detail in sb.details:
		if detail.__class__ in (StatBlockHeading, StatBlockSection) and detail.name == 'Effects':
			sb.keys.extend(detail.keys)
			details.extend(detail.details)
		else:
			details.append(detail)
	sb.details = details
	trap = parse_section(sb, book, keys=False)
	for key, value in sb.keys:
		trap_parse_function(key)(trap, value)
	trap['type'] = 'trap'
	if 'CR' in trap['name']:
		names = trap['name'].split('CR')
		trap['name'] = filter_name(names.pop(0).strip())
		trap['cr'] = names.pop(0).strip()
	return trap
示例#18
0
def parse_resource(sb, book):
	details = []
	for detail in sb.details:
		details.append(detail)
	sb.details = details
	resource = parse_section(sb, book, keys=False)
	for key, value in sb.keys:
		resource_parse_function(key)(resource, value)
	resource['type'] = 'resource'
	if is_manager(sb):
		resource['subtype'] = 'manager'
	if is_room(sb):
		resource['subtype'] = 'room'
	if is_building(sb):
		resource['subtype'] = 'building'
	if is_organization(sb):
		resource['subtype'] = 'organization'
	return resource
示例#19
0
def parse_resource(sb, book):
    details = []
    for detail in sb.details:
        details.append(detail)
    sb.details = details
    resource = parse_section(sb, book, keys=False)
    for key, value in sb.keys:
        resource_parse_function(key)(resource, value)
    resource['type'] = 'resource'
    if is_manager(sb):
        resource['subtype'] = 'manager'
    if is_room(sb):
        resource['subtype'] = 'room'
    if is_building(sb):
        resource['subtype'] = 'building'
    if is_organization(sb):
        resource['subtype'] = 'organization'
    return resource
示例#20
0
def parse_item(sb, book):
    item = {
        'type': 'item',
        'source': book,
        'name': filter_name(sb.name.strip())
    }
    text = []
    for key, value in sb.keys:
        item_parse_function(key)(item, value)
    for detail in sb.details:
        if detail.__class__ == StatBlockSection and detail.name == "Construction":
            for key, value in detail.keys:
                item_parse_function(key)(item, value)
        elif detail.__class__ == StatBlockSection:
            sections = item.setdefault('sections', [])
            sections.append(parse_section(detail, book))
        else:
            text.append(unicode(detail))
    if len(text) > 0:
        item['text'] = ''.join(text)
    return item
示例#21
0
def parse_item(sb, book):
	item = {'type': 'item', 'source': book, 'name': filter_name(sb.name.strip())}
	text = []
	for key, value in sb.keys:
		item_parse_function(key, sb.name.strip())(item, value)
	for detail in sb.details:
		if isinstance(detail, StatBlockSection) and detail.name.startswith("Construction"):
			for key, value in detail.keys:
				item_parse_function(key, detail.name.strip())(item, value)
		elif isinstance(detail, StatBlockSection):
			sections = item.setdefault('sections', [])
			sections.append(parse_section(detail, book))
		elif isinstance(detail, StatBlockHeading):
			sections.append(parse_stat_block(sb, book, no_sb=no_sb))
		else:
			if isinstance(detail, dict) or isinstance(detail, Heading):
				text.append(detail)
			else:
				text.append(unicode(detail))
	if len(text) > 0:
		collapse_text(item, text)
	return item
示例#22
0
def parse_affliction(sb, book):
	affliction = parse_section(sb, book, keys=False)
	affliction['type'] = 'affliction'
	for key, value in sb.keys:
		affliction_parse_function(key)(affliction, value)
	return affliction 
示例#23
0
def parse_affliction(sb, book):
    affliction = parse_section(sb, book, keys=False)
    affliction['type'] = 'affliction'
    for key, value in sb.keys:
        affliction_parse_function(key)(affliction, value)
    return affliction
示例#24
0
def parse_talent(sb, book):
	spell = parse_section(sb, book, keys=False)
	spell['type'] = 'talent'
	for key, value in sb.keys:
		talent_parse_function(key)(spell, value)
	return spell
示例#25
0
def parse_spell(sb, book):
	spell = parse_section(sb, book)
	spell['type'] = 'spell'
	for key, value in sb.keys:
		spell_parse_function(key)(spell, value)
	return spell