class Template (NameMixin):
"""Setup regions for a particular world.
"""
- def __init__(self, name, regions, continent_colors={}):
+ def __init__(self, name, regions, continent_colors={},
+ line_colors={}):
NameMixin.__init__(self, name)
self.regions = regions
self.continent_colors = continent_colors
+ self.line_colors = line_colors
class TemplateLibrary (object):
"""Create Templates on demand from a directory of template data.
def __init__(self, template_dir='share/templates/'):
self.template_dir = os.path.abspath(os.path.expanduser(template_dir))
def get(self, name):
- region_pointlists,route_pointlists,continent_colors = \
+ region_pointlists,route_pointlists,continent_colors,line_colors = \
self._get_data(name)
regions = self._generate_regions(region_pointlists, route_pointlists)
- return Template('template', regions, continent_colors)
+ return Template('template', regions, continent_colors, line_colors)
def _get_data(self, name):
dirname = os.path.join(self.template_dir, name.lower())
try:
elif extension in ['rt', 'vrt']:
route_pointlists[name] = (self._read_pointlist(path),
extension == 'vrt')
- elif extension == 'ccl':
- continent_colors = self._read_colors(path)
- return (region_pointlists, route_pointlists, continent_colors)
+ elif extension == 'col':
+ c = self._read_colors(path)
+ if name == 'continent':
+ continent_colors = c
+ else:
+ assert name == 'line', name
+ line_colors = c
+ return (region_pointlists, route_pointlists,
+ continent_colors, line_colors)
def _read_pointlist(self, filename):
pointlist = []
for line in open(filename, 'r'):
if len(line) == 0:
continue
fields = line.split('\t')
- name,color = fields
+ name,color = [x.strip() for x in fields]
+ if color == '-':
+ color = None
colors[name] = color
return colors
def _generate_regions(self, region_pointlists, route_pointlists):
self.template_lib = TEMPLATE_LIBRARY
self.buf = buf
self.line_width = line_width
- self.line_color = 'grey'
- self.route_color = 'black'
self.dpcm = dpcm
def render(self, world):
template = self.template_lib.get(world.name)
for r in template.regions:
t = self._matching_territory(world, r)
c_col = template.continent_colors[t.continent.name]
+ if template.line_colors['border'] == None:
+ b_col_attr = ''
+ else:
+ b_col_attr = 'stroke="%s" stroke-width="%d"' \
+ % (template.line_colors['border'], self.line_width)
lines.extend([
'<!-- %s -->' % r,
- '<polygon fill="%s" stroke="%s" stroke-width="%d"'
- % (c_col, self.line_color, self.line_width),
+ '<polygon fill="%s" %s' % (c_col, b_col_attr),
' points="%s" />'
% ' '.join(['%d,%d' % ((region_pos[id(r)]+p)
*(1,-1) # svg y value increases down
for p in r.outline[:-1]])
])
for rt,rt_start in zip(r.routes, r.route_starts):
- if id(rt) in drawn_rts or rt.virtual == True:
+ if id(rt) in drawn_rts:
continue
drawn_rts[id(rt)] = rt
+ if rt.virtual == True:
+ color = template.line_colors['virtual route']
+ else:
+ color = template.line_colors['route']
+ if color == None:
+ continue
lines.extend([
'<polyline stroke="%s" stroke-width="%d"'
- % (self.route_color, self.line_width),
+ % (color, self.line_width),
' points="%s" />'
% ' '.join(['%d,%d' % ((region_pos[id(r)]+rt_start+p)
*(1,-1) # svg y value increases down