From 5c3bd9b3802e2001a7e77baf2911386135a03839 Mon Sep 17 00:00:00 2001 From: notoraptor Date: Wed, 14 Aug 2019 12:22:22 -0400 Subject: [Web] Integrated new maps on the web interface - Fixed bug with incorrect dislodged unit on pure map - [python] Make sure dummy powers are registered only for standard maps. - Hardcoded supply centers into SVG files. - Removed supply centers CSS classes. - Update positions for units and dislodged units on all maps. - Converted SVGs to React. - Removed "sym" classes and hardcode related styles into symbol definitions. - Reordered map list (standard at top, then other ones in alphabetical order) - Displayed + button for all maps and disable it for maps without variants. - Minified generated code when converting SVG files to React. - [web] Added ability to hide/display map abbreviations. --- diplomacy/web/svg_to_react.py | 640 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 556 insertions(+), 84 deletions(-) (limited to 'diplomacy/web/svg_to_react.py') diff --git a/diplomacy/web/svg_to_react.py b/diplomacy/web/svg_to_react.py index 12a68b6..dafe4d3 100644 --- a/diplomacy/web/svg_to_react.py +++ b/diplomacy/web/svg_to_react.py @@ -19,11 +19,122 @@ """ import argparse import os -import sys +import re from xml.dom import minidom, Node import ujson as json +LICENSE_TEXT = """/** +============================================================================== +Copyright (C) 2019 - Philip Paquette, Steven Bocco + + This program is free software: you can redistribute it and/or modify it under + the terms of the GNU Affero General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + details. + + You should have received a copy of the GNU Affero General Public License along + with this program. If not, see . +============================================================================== +**/""" + +TAG_ORDERDRAWING = 'jdipNS:ORDERDRAWING' +TAG_POWERCOLORS = 'jdipNS:POWERCOLORS' +TAG_POWERCOLOR = 'jdipNS:POWERCOLOR' +TAG_SYMBOLSIZE = 'jdipNS:SYMBOLSIZE' +TAG_PROVINCE_DATA = 'jdipNS:PROVINCE_DATA' +TAG_PROVINCE = 'jdipNS:PROVINCE' +TAG_UNIT = 'jdipNS:UNIT' +TAG_DISLODGED_UNIT = 'jdipNS:DISLODGED_UNIT' +TAG_SUPPLY_CENTER = 'jdipNS:SUPPLY_CENTER' + +SELECTOR_REGEX = re.compile(r'([\r\n][ \t]*)([^{\r\n]+){') +LINES_REGEX = re.compile(r'[\r\n]+') +SPACES_REGEX = re.compile(r'[\t ]+') +STRING_REGEX = re.compile(r'[`\'"] {0,1}\+ {0,1}[`\'"]') + + +def prepend_css_selectors(prefix, css_text): + """ Prepend all CSS selector with given prefix (e.g. ID selector) followed by a space. + :param prefix: prefix to prepend + :param css_text: CSS text to parse + :rtype: str + """ + def repl(match): + return '%s%s %s{' % (match.group(1), prefix, match.group(2)) + + return SELECTOR_REGEX.sub(repl, css_text) + + +class ExtractedData: + """ Helper class to store extra data collected while parsing SVG file. Properties: + - name: class name of parsed SVG component + - extra: data parsed from invalid tags found in SVG content + - style_lines: string lines parsed from