#3 Add new card designs and upgrade argument parsing
Merged 4 years ago by bex. Opened 4 years ago by bex.
bex/fedora-business-cards new_designs  into  master

@@ -19,13 +19,12 @@ 

  ###

  

  """

- Command-line interface to business card generator. Takes no arguments; uses

- optparser.OptionParser instead.

+ Command-line interface to business card generator.

  """

  

  from copy import copy

  import decimal

- import optparse

+ import argparse

  import sys

  

  from fedora_business_cards import common
@@ -33,104 +32,74 @@ 

  from fedora_business_cards import generators

  

  

- def check_decimal(option, opt, value):

-     """

-     Checks that value can be converted to a decimal.Decimal object.

-     """

-     try:

-         return decimal.Decimal(value)

-     except decimal.InvalidOperation:

-         return optparse.OptionValueError("option %s: invalid decimal value: %s"

-                                          % (opt, value))

- 

- 

- class NewOptionClass(optparse.Option):

-     """

-     Replacement Option class for OptionParser that includes decimal type.

-     """

-     TYPES = optparse.Option.TYPES + ("decimal",)

-     TYPE_CHECKER = copy(optparse.Option.TYPE_CHECKER)

-     TYPE_CHECKER["decimal"] = check_decimal

- 

- 

  def main():

      """

      Call this to make things happen.

      """

      # Setup option parser

-     parser = optparse.OptionParser(option_class=NewOptionClass)

-     parser.usage = "%prog [options] GENERATOR"

+     parser = argparse.ArgumentParser()

      # General options

-     parser.add_option("--list-generators", dest="showgen", default=False,

-                       action="store_true", help="display list of generators")

+     parser.add_argument("--list-generators", dest="showgen", default=False,

+                         action="store_true", help="display list of generators")

      # Size options

-     size_group = optparse.OptionGroup(parser, "Size options")

-     size_group.add_option("--height", dest="height",

-                           default=decimal.Decimal("2"), type="decimal",

-                           help="business card height (default: 2)")

-     size_group.add_option("--width", dest="width",

-                           default=decimal.Decimal("3.5"), type="decimal",

-                           help="business card width (default: 3.5)")

-     size_group.add_option("--bleed", dest="bleed", type="decimal",

-                           default=decimal.Decimal("0"), help="extra space "

-                           "around card, often requested by printers "

-                           "(default: 0)")

-     size_group.add_option("--inch", dest="unit", default="in", const="in",

-                           action="store_const",

-                           help="units are specified in inches (default)")

-     size_group.add_option("--mm", dest="unit", default="in", const="mm",

-                           action="store_const",

-                           help="units are specified in millimeters")

+     size_group = parser.add_argument_group("Size options")

+     size_group.add_argument("--height", dest="height",

+                             default=decimal.Decimal("2"), type=decimal.Decimal,

+                             help="business card height (default: 2)")

+     size_group.add_argument("--width", dest="width",

+                             default=decimal.Decimal("3.5"), type=decimal.Decimal,

+                             help="business card width (default: 3.5)")

+     size_group.add_argument("--bleed", dest="bleed", type=decimal.Decimal,

+                             default=decimal.Decimal("0"), help="extra space "

+                             "around card, often requested by printers "

+                             "(default: 0)")

+     size_group.add_argument("--inch", dest="unit", default="in", const="in",

+                             action="store_const",

+                             help="units are specified in inches (default)")

+     size_group.add_argument("--mm", dest="unit", default="in", const="mm",

+                             action="store_const",

+                             help="units are specified in millimeters")

      # Output options

-     out_group = optparse.OptionGroup(parser, "Output options")

-     out_group.add_option("-d", "--dpi", dest="dpi", default=300, type="int",

-                          help="DPI of exported file")

-     out_group.add_option("--pdf", dest="output", default="png", const="pdf",

-                          action="store_const", help="Export as PDF")

-     out_group.add_option("--png", dest="output", default="png", const="png",

-                          action="store_const", help="Export as PNG (default)")

-     out_group.add_option("--svg", dest="output", default="png", const="svg",

-                          action="store_const", help="Export as SVG")

-     out_group.add_option("--eps", dest="output", default="png", const="eps",

-                          action="store_const", help="Export as EPS")

-     out_group.add_option("--cmyk-pdf", dest="output", default="png",

-                          const="cmyk_pdf", action="store_const",

-                          help="Export as PDF with CMYK color (if the generator"

-                          " supports it)")

+     out_group = parser.add_argument_group("Output options")

+     out_group.add_argument("-d", "--dpi", dest="dpi", default=300, type=int,

+                            help="DPI of exported file")

+     out_group.add_argument("--pdf", dest="output", default="png", const="pdf",

+                            action="store_const", help="Export as PDF")

+     out_group.add_argument("--png", dest="output", default="png", const="png",

+                            action="store_const", help="Export as PNG (default)")

+     out_group.add_argument("--svg", dest="output", default="png", const="svg",

+                            action="store_const", help="Export as SVG")

+     out_group.add_argument("--eps", dest="output", default="png", const="eps",

+                            action="store_const", help="Export as EPS")

+     out_group.add_argument("--cmyk-pdf", dest="output", default="png",

+                            const="cmyk_pdf", action="store_const",

+                            help="Export as PDF with CMYK color (if the generator"

+                            " supports it)")

  

-     # Finish setting up option parser

-     parser.add_option_group(size_group)

-     parser.add_option_group(out_group)

      # Check for generator-specific option groups

+     subparsers = parser.add_subparsers(metavar='GENERATOR',dest='generator', required='--list-generators' not in sys.argv)

      for module_name in generators.__all__:

          try:

              module = common.recursive_import(

                  'fedora_business_cards.generators.%s' % module_name)

              generator = module.generator

-             option_group = generator.extra_options(parser)

-             if option_group:

-                 parser.add_option_group(option_group)

+             generator.extra_options(subparsers)

          except ImportError:

              pass

  

      # Parse arguments

-     (options, args) = parser.parse_args()

+     options = parser.parse_args()

  

      if options.showgen:

          print("Generators: %s" % ', '.join(generators.__all__))

          sys.exit()

  

-     if len(args) != 1:

-         parser.print_help()

-         parser.set_usage(optparse.SUPPRESS_USAGE)

-         parser.error("Exactly one argument (the generator) is required")

- 

      # Import the generator we care abuot

      try:

          module = common.recursive_import('fedora_business_cards.generators.%s'

-                                          % args[0])

+                                          % options.generator)

      except ImportError:

-         parser.error("Generator '%s' does not exist or is broken" % args[0])

+         parser.error("Generator '%s' does not exist or is broken" % options.generator)

      gen = module.generator(options)

  

      # collect information from user if necessary

@@ -58,4 +58,4 @@ 

          return None

  

  

- __all__ = ('fedora',)

+ __all__ = ('fedora','fedora-vertical','fedora-horizontal')

@@ -0,0 +1,145 @@ 

+ ###

+ # fedora-business-cards - for rendering Fedora contributor business cards

+ # Copyright (C) 2012  Red Hat, Inc. and others.

+ # Primary maintainer: Brian Exelbierd <bexelbie@redhat.com>

+ #

+ # This program is free software; you can redistribute it and/or modify

+ # it under the terms of the GNU General Public License as published by

+ # the Free Software Foundation; either version 2 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 General Public License for more details.

+ #

+ # You should have received a copy of the GNU General Public License along

+ # with this program; if not, write to the Free Software Foundation, Inc.,

+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

+ ###

+ 

+ """

+ Generator for the Fedora horizontal business card layout.

+ 

+ https://fedoraproject.org/wiki/Business_cards

+ 

+ https://pagure.io/design/issue/531

+ """

+ 

+ import sys

+ import string

+ import importlib.resources as pkg_resources

+ import argparse

+ from decimal import Decimal

+ from getpass import getpass

+ from xml.dom import minidom

+ from builtins import input

+ 

+ from fedora_business_cards import __version__

+ from fedora_business_cards import common

+ from fedora_business_cards.generators import BaseGenerator

+ from fedora_business_cards import templates  # relative-import the *package* containing the card templates

+ 

+ AccountSystem = \

+         common.recursive_import('fedora.client.fas2', True).AccountSystem

+ 

+ FEDORA_LOGO_VIEWBOX = '100 100 707.776 215.080'

+ 

+ 

+ class FedoraHorizontalGenerator(BaseGenerator):

+     rgb_to_cmyk = {

+             (60, 110, 180): (1, .46, 0, 0),

+             (41, 65, 114): (1, .57, 0, .38),

+             (0, 0, 0): (0, 0, 0, 1),

+             (255, 255, 255): (0, 0, 0, 0),

+     }

+ 

+     @staticmethod

+     def extra_options(parser):

+         option_group = parser.add_parser('fedora-horizontal', help='Fedora horizontal business cards')

+         option_group.add_argument('-u', '--username', dest='username',

+                                   default='', help='If set, use a different name'

+                                   ' than the one logged in with to fill out'

+                                   ' business card information')

+         return option_group

+ 

+     def collect_information(self):

+         # ask for FAS login

+         print("Login to FAS:")

+         username = input("Username: ")

+         password = getpass()

+ 

+         # get information from FAS

+         fas = AccountSystem(username=username, password=password,

+                             useragent='fedora-business-cards/%s' % __version__)

+         if self.options.username:

+             username = self.options.username

+         userinfo = fas.person_by_username(username)

+ 

+         # set business card fields

+         self.fields['name'] = userinfo["human_name"]

+         self.fields['title'] = "Fedora Project Contributor"

+         self.fields['lines'] = [''] * 6

+         self.fields['lines'][0] = '%s@fedoraproject.org' % username

+         self.fields['lines'][1] = 'fedoraproject.org'

+         next_line = 2

+         if userinfo['ircnick']:

+             self.fields['lines'][next_line] = '%s on irc.freenode.net' % \

+                     userinfo['ircnick']

+             next_line += 1

+         next_line += 1  # blank line

+ 

+         if userinfo['gpg_keyid'] == None:

+             gpg = ''

+         else:

+             gpg = "GPG: %s" % userinfo['gpg_keyid']

+         self.fields['lines'][next_line] = gpg

+ 

+         # ask user to edit information

+         def cmdline_card_line(data):

+             return "| %s%s |" % (data, ' ' * (59 - len(data)))

+ 

+         done_editing = False

+         while not done_editing:

+             print("Current business card layout:")

+             print("   +" + "-" * 61 + "+")

+             print(" n " + cmdline_card_line(self.fields['name']))

+             print(" t " + cmdline_card_line(self.fields['title']))

+             print("   " + cmdline_card_line(''))

+             for i in range(6):

+                 print((" %i " % i) + cmdline_card_line(self.fields['lines'][i]))

+             print("   " + cmdline_card_line(''))

+             print("   " + cmdline_card_line(''))

+             print("   " + cmdline_card_line('fedora' + ' ' * 19 + \

+                                             'FREEDOM. FRIENDS. '

+                                             'FEATURES. FIRST.'))

+             print("   +" + "-" * 61 + "+")

+             lineno = input("Enter a line number to edit, or [y] to accept: ")

+             if lineno == "" or lineno == "y":

+                 done_editing = True

+             elif lineno in ['n', 't', '0', '1', '2', '3', '4', '5']:

+                 newdata = input("Enter new data for line %s: " % lineno)

+                 if lineno == 'n':

+                     self.fields['name'] = newdata

+                 elif lineno == 't':

+                     self.fields['title'] = newdata

+                 elif lineno in ['0', '1', '2', '3', '4', '5']:

+                     self.fields['lines'][int(lineno)] = newdata

+ 

+     def generate_front(self):

+         card_template = string.Template(pkg_resources.read_text(templates, 'fedora-horizontal-front.svg-template'))

+         biz_card = card_template.safe_substitute({'NAME': self.fields['name'],

+                                                   'TITLE': self.fields['title'],

+                                                   'Line0': self.fields['lines'][0],

+                                                   'Line1': self.fields['lines'][1],

+                                                   'Line2': self.fields['lines'][2],

+                                                   'Line3': self.fields['lines'][3],

+                                                   'Line4': self.fields['lines'][4],

+                                                   'Line5': self.fields['lines'][5],

+                                                   })

+         return biz_card

+ 

+     def generate_back(self):

+         return pkg_resources.read_text(templates, 'fedora-back.svg-template')

+ 

+ generator = FedoraHorizontalGenerator

@@ -0,0 +1,141 @@ 

+ ###

+ # fedora-business-cards - for rendering Fedora contributor business cards

+ # Copyright (C) 2012  Red Hat, Inc. and others.

+ # Primary maintainer: Brian Exelbierd <bexelbie@redhat.com>

+ #

+ # This program is free software; you can redistribute it and/or modify

+ # it under the terms of the GNU General Public License as published by

+ # the Free Software Foundation; either version 2 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 General Public License for more details.

+ #

+ # You should have received a copy of the GNU General Public License along

+ # with this program; if not, write to the Free Software Foundation, Inc.,

+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

+ ###

+ 

+ """

+ Generator for the Fedora vertical business card layout.

+ 

+ https://fedoraproject.org/wiki/Business_cards

+ 

+ https://pagure.io/design/issue/531

+ """

+ 

+ import sys

+ import string

+ import importlib.resources as pkg_resources

+ import argparse

+ from decimal import Decimal

+ from getpass import getpass

+ from xml.dom import minidom

+ from builtins import input

+ 

+ from fedora_business_cards import __version__

+ from fedora_business_cards import common

+ from fedora_business_cards.generators import BaseGenerator

+ from fedora_business_cards import templates  # relative-import the *package* containing the card templates

+ 

+ AccountSystem = \

+         common.recursive_import('fedora.client.fas2', True).AccountSystem

+ 

+ FEDORA_LOGO_VIEWBOX = '100 100 707.776 215.080'

+ 

+ 

+ class FedoraVerticalGenerator(BaseGenerator):

+     rgb_to_cmyk = {

+             (60, 110, 180): (1, .46, 0, 0),

+             (41, 65, 114): (1, .57, 0, .38),

+             (0, 0, 0): (0, 0, 0, 1),

+             (255, 255, 255): (0, 0, 0, 0),

+     }

+ 

+     @staticmethod

+     def extra_options(parser):

+         option_group = parser.add_parser('fedora-vertical', help='Fedora vertical business cards')

+         option_group.add_argument('-u', '--username', dest='username',

+                                   default='', help='If set, use a different name'

+                                   ' than the one logged in with to fill out'

+                                   ' business card information')

+         return option_group

+ 

+     def collect_information(self):

+         # ask for FAS login

+         print("Login to FAS:")

+         username = input("Username: ")

+         password = getpass()

+ 

+         # get information from FAS

+         fas = AccountSystem(username=username, password=password,

+                             useragent='fedora-business-cards/%s' % __version__)

+         if self.options.username:

+             username = self.options.username

+         userinfo = fas.person_by_username(username)

+ 

+         # set business card fields

+         self.fields['name'] = userinfo["human_name"]

+         self.fields['title'] = "Fedora Project Contributor"

+         self.fields['lines'] = [''] * 5

+         self.fields['lines'][0] = '%s@fedoraproject.org' % username

+         self.fields['lines'][1] = 'fedoraproject.org'

+         next_line = 2

+         if userinfo['ircnick']:

+             self.fields['lines'][next_line] = '%s on irc.freenode.net' % \

+                     userinfo['ircnick']

+             next_line += 1

+         next_line += 1  # blank line

+ 

+         # Short GPG is insecure lets omit it

+         #if userinfo['gpg_keyid'] == None:

+         #    gpg = ''

+         #else:

+         #    gpg = "GPG: %s" % userinfo['gpg_keyid']

+         # self.fields['lines'][next_line] = gpg

+ 

+         # ask user to edit information

+         def cmdline_card_line(data):

+             return "| %s%s |" % (data, ' ' * (35 - len(data)))

+ 

+         done_editing = False

+         while not done_editing:

+             print("Current business card layout:")

+             print("Vertical cards don't hold much data ...:")

+             print("   +" + "-" * 37 + "+")

+             print(" n " + cmdline_card_line(self.fields['name']))

+             print(" t " + cmdline_card_line(self.fields['title']))

+             print("   " + cmdline_card_line(''))

+             for i in range(5):

+                 print((" %i " % i) + cmdline_card_line(self.fields['lines'][i]))

+             print("   +" + "-" * 37 + "+")

+             lineno = input("Enter a line number to edit, or [y] to accept: ")

+             if lineno == "" or lineno == "y":

+                 done_editing = True

+             elif lineno in ['n', 't', '0', '1', '2', '3', '4', '5']:

+                 newdata = input("Enter new data for line %s: " % lineno)

+                 if lineno == 'n':

+                     self.fields['name'] = newdata

+                 elif lineno == 't':

+                     self.fields['title'] = newdata

+                 elif lineno in ['0', '1', '2', '3', '4', '5']:

+                     self.fields['lines'][int(lineno)] = newdata

+ 

+     def generate_front(self):

+         card_template = string.Template(pkg_resources.read_text(templates, 'fedora-vertical-front.svg-template'))

+         biz_card = card_template.safe_substitute({'NAME': self.fields['name'],

+                                                   'TITLE': self.fields['title'],

+                                                   'Line0': self.fields['lines'][0],

+                                                   'Line1': self.fields['lines'][1],

+                                                   'Line2': self.fields['lines'][2],

+                                                   'Line3': self.fields['lines'][3],

+                                                   'Line4': self.fields['lines'][4],

+                                                   })

+         return biz_card

+ 

+     def generate_back(self):

+         return pkg_resources.read_text(templates, 'fedora-back.svg-template')

+ 

+ generator = FedoraVerticalGenerator

@@ -25,9 +25,9 @@ 

  """

  

  import sys

+ import argparse

  from decimal import Decimal

  from getpass import getpass

- from optparse import OptionGroup

  from xml.dom import minidom

  from builtins import input

  
@@ -51,11 +51,11 @@ 

  

      @staticmethod

      def extra_options(parser):

-         option_group = OptionGroup(parser, "Options for fedora")

-         option_group.add_option('-u', '--username', dest='username',

-                                 default='', help='If set, use a different name'

-                                 ' than the one logged in with to fill out'

-                                 ' business card information')

+         option_group = parser.add_parser('fedora', help='Fedora original horizontal business cards')

+         option_group.add_argument('-u', '--username', dest='username',

+                                   default='', help='If set, use a different name'

+                                   ' than the one logged in with to fill out'

+                                   ' business card information')

          return option_group

  

      def collect_information(self):

empty or binary file added
@@ -0,0 +1,237 @@ 

+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

+ <!-- Created with Inkscape (http://www.inkscape.org/) -->

+ 

+ <svg

+    xmlns:dc="http://purl.org/dc/elements/1.1/"

+    xmlns:cc="http://creativecommons.org/ns#"

+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

+    xmlns:svg="http://www.w3.org/2000/svg"

+    xmlns="http://www.w3.org/2000/svg"

+    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"

+    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"

+    width="3.5in"

+    height="2in"

+    viewBox="0 0 88.900001 50.800001"

+    version="1.1"

+    id="svg4647"

+    inkscape:version="0.92+devel unknown"

+    sodipodi:docname="fedora_bc2017_back.svg">

+   <defs

+      id="defs4641">

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4545">

+       <path

+          d="m 62,16 h 2 v -1.602 h -2 z"

+          id="path4543"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4555">

+       <path

+          d="M 18,23 H 28 V 14.398 H 18 Z"

+          id="path4553"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4565">

+       <path

+          d="m 38,23 h 9 v -8.602 h -9 z"

+          id="path4563"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4575">

+       <path

+          d="m 48,23 h 6 v -8.602 h -6 z"

+          id="path4573"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4585">

+       <path

+          d="M 53,23 H 63 V 14.398 H 53 Z"

+          id="path4583"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4595">

+       <path

+          d="m 28,27 h 9 V 14.398 h -9 z"

+          id="path4593"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4605">

+       <path

+          d="M 12.602,27 H 20 V 14.398 h -7.398 z"

+          id="path4603"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4619">

+       <path

+          d="M 61,32.398 H 72 V 22 H 61 Z"

+          id="path4617"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath34">

+       <path

+          d="M 42.871,90 H 62 V 54 H 42.871 Z"

+          id="path32"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath48">

+       <path

+          d="m 184,105.711 h 29.195 V 76 H 184 Z"

+          id="path46"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+   </defs>

+   <sodipodi:namedview

+      id="base"

+      pagecolor="#ffffff"

+      bordercolor="#666666"

+      borderopacity="1.0"

+      inkscape:pageopacity="0.0"

+      inkscape:pageshadow="2"

+      inkscape:zoom="2.7042625"

+      inkscape:cx="168"

+      inkscape:cy="96"

+      inkscape:document-units="mm"

+      inkscape:current-layer="layer1"

+      inkscape:document-rotation="0"

+      showgrid="false"

+      units="in"

+      inkscape:showpageshadow="false"

+      inkscape:window-width="1920"

+      inkscape:window-height="1043"

+      inkscape:window-x="0"

+      inkscape:window-y="0"

+      inkscape:window-maximized="1" />

+   <metadata

+      id="metadata4644">

+     <rdf:RDF>

+       <cc:Work

+          rdf:about="">

+         <dc:format>image/svg+xml</dc:format>

+         <dc:type

+            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />

+         <dc:title></dc:title>

+       </cc:Work>

+     </rdf:RDF>

+   </metadata>

+   <g

+      inkscape:label="Layer 1"

+      inkscape:groupmode="layer"

+      id="layer1"

+      transform="translate(0,-246.19998)">

+     <g

+        id="g5525"

+        transform="matrix(0.99719571,0,0,0.99719571,-50.968567,-19.981568)">

+       <g

+          transform="matrix(0.35376985,0,0,-0.35376985,-80.756085,335.15248)"

+          id="g5132">

+         <g

+            id="g5778"

+            transform="translate(370.3633,214.56764)">

+           <g

+              id="g12"

+              transform="translate(2.3874707,-165.72367)">

+             <path

+                inkscape:connector-curvature="0"

+                id="path14"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                d="M 0,0 H 252 V 144 H 0 Z" />

+             <path

+                inkscape:connector-curvature="0"

+                id="path16"

+                style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                d="m 188.223,56.633 v -1.11 c 0,-0.074 -0.047,-0.121 -0.137,-0.136 h -0.008 c -0.078,0 -0.125,0.047 -0.14,0.14 v 1.762 c 0.007,0.102 0.05,0.152 0.128,0.152 h 0.02 c 0.078,0 0.129,-0.05 0.152,-0.16 l 0.633,-1.414 c 0.008,0.031 0.149,0.356 0.418,0.969 l 0.258,0.559 c 0.031,0.031 0.066,0.046 0.101,0.046 h 0.02 c 0.078,0 0.121,-0.05 0.133,-0.152 v -1.762 c -0.02,-0.093 -0.067,-0.14 -0.141,-0.14 h -0.012 c -0.089,0.015 -0.132,0.062 -0.132,0.136 v 1.11 c -0.344,-0.774 -0.524,-1.172 -0.539,-1.195 -0.036,-0.036 -0.075,-0.051 -0.11,-0.051 -0.082,0 -0.148,0.082 -0.199,0.246 l -0.445,1 m -1.879,0.816 h 1.293 c 0.086,-0.015 0.129,-0.062 0.129,-0.137 v -0.019 c 0,-0.074 -0.051,-0.117 -0.153,-0.129 h -0.48 v -1.641 c 0,-0.074 -0.043,-0.121 -0.137,-0.136 h -0.008 c -0.074,0 -0.121,0.047 -0.14,0.14 v 1.637 h -0.489 c -0.097,0.016 -0.144,0.066 -0.144,0.148 0.023,0.09 0.066,0.137 0.129,0.137" />

+             <path

+                inkscape:connector-curvature="0"

+                id="path18"

+                style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                d="m 82.566,64.406 c 0,0 0,0 -16.234,0 0.262,-3.519 3.102,-6.148 6.883,-6.148 2.68,0 4.992,1.105 6.832,2.89 0.367,0.372 0.785,0.473 1.258,0.473 0.633,0 1.261,-0.312 1.683,-0.84 0.262,-0.367 0.422,-0.789 0.422,-1.207 0,-0.578 -0.265,-1.207 -0.738,-1.683 -2.207,-2.364 -5.938,-3.938 -9.617,-3.938 -6.672,0 -12.032,5.359 -12.032,12.031 0,6.672 5.204,12.032 11.875,12.032 6.622,0 11.559,-5.149 11.559,-11.926 0,-1 -0.891,-1.684 -1.891,-1.684 z m -9.668,9.301 c -3.519,0 -5.937,-2.312 -6.46,-5.672 7.933,0 12.925,0 12.925,0 -0.472,3.203 -2.996,5.672 -6.465,5.672 z" />

+             <path

+                inkscape:connector-curvature="0"

+                id="path20"

+                style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                d="m 128.961,53.949 c -6.672,0 -12.031,5.36 -12.031,12.035 0,6.672 5.359,12.032 12.031,12.032 6.676,0 12.031,-5.36 12.031,-12.032 0.004,-6.675 -5.355,-12.035 -12.031,-12.035 z m 0,19.496 c -4.203,0 -6.934,-3.363 -6.934,-7.461 0,-4.097 2.731,-7.461 6.934,-7.461 4.203,0 6.937,3.364 6.937,7.461 0,4.098 -2.734,7.461 -6.937,7.461 z" />

+             <path

+                inkscape:connector-curvature="0"

+                id="path22"

+                style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                d="m 158.367,78.016 c -3.527,0 -5.855,-1.043 -7.914,-3.661 l -0.191,1.219 c -0.16,1.27 -1.246,2.25 -2.559,2.25 -1.422,0 -2.578,-1.152 -2.578,-2.578 0,0 0,-0.004 0,-0.004 V 56.734 c 0,-1.418 1.156,-2.574 2.574,-2.574 1.422,0 2.578,1.156 2.578,2.574 v 9.934 c 0,4.516 3.938,6.777 8.09,6.777 1.262,0 2.258,1.051 2.258,2.313 0,1.262 -0.996,2.258 -2.258,2.258 z" />

+             <path

+                inkscape:connector-curvature="0"

+                id="path24"

+                style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                d="m 185.531,65.984 c 0.055,6.461 -4.57,12.032 -12.031,12.032 -6.676,0 -12.086,-5.36 -12.086,-12.032 0,-6.672 5.254,-12.031 11.613,-12.031 3.172,0 6.028,1.633 7.301,3.34 l 0.629,-1.594 c 0.336,-0.894 1.199,-1.531 2.211,-1.531 1.305,0 2.363,1.055 2.363,2.359 z M 173.5,58.523 c -4.203,0 -6.938,3.364 -6.938,7.461 0,4.098 2.735,7.461 6.938,7.461 4.203,0 6.934,-3.363 6.934,-7.461 0,-4.097 -2.731,-7.461 -6.934,-7.461 z" />

+             <path

+                inkscape:connector-curvature="0"

+                id="path26"

+                style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                d="m 112.797,87.527 c 0,1.418 -1.156,2.52 -2.574,2.52 -1.418,0 -2.575,-1.102 -2.575,-2.52 V 73.969 c -1.312,2.418 -4.152,4.047 -7.515,4.047 -6.828,0 -11.399,-5.149 -11.399,-12.032 0,-6.882 4.727,-12.031 11.399,-12.031 2.976,0 5.558,1.227 7.105,3.363 l 0.571,-1.449 c 0.355,-0.996 1.304,-1.711 2.418,-1.711 1.414,0 2.57,1.153 2.57,2.571 0,0.003 0,0.003 0,0.007 z M 100.766,58.523 c -4.204,0 -6.883,3.364 -6.883,7.461 0,4.098 2.679,7.461 6.883,7.461 4.203,0 6.882,-3.207 6.882,-7.461 0,-4.254 -2.679,-7.461 -6.882,-7.461 z" />

+           </g>

+           <g

+              id="g28"

+              transform="translate(2.3874707,-165.72367)">

+             <g

+                clip-path="url(#clipPath34)"

+                id="g30">

+               <path

+                  inkscape:connector-curvature="0"

+                  id="path36"

+                  style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                  d="m 59.203,89.895 c -0.473,0.066 -0.949,0.101 -1.426,0.101 -5.32,0 -9.648,-4.328 -9.648,-9.648 v -3.016 h -3.152 c -1.157,0 -2.106,-0.945 -2.106,-2.102 0,-1.156 0.949,-2.32 2.106,-2.32 h 3.152 V 56.734 c 0,-1.418 1.156,-2.574 2.574,-2.574 1.418,0 2.574,1.156 2.574,2.574 V 72.91 h 3.485 c 1.156,0 2.101,1.164 2.101,2.32 0,1.157 -0.945,2.102 -2.101,2.102 h -3.485 v 3.016 c 0,2.48 2.02,4.832 4.5,4.832 0.223,0 0.45,-0.016 0.668,-0.047 1.41,-0.211 2.719,0.429 2.926,1.836 0.211,1.406 -0.762,2.715 -2.168,2.926 z" />

+             </g>

+           </g>

+           <g

+              id="g38"

+              transform="translate(2.3874707,-165.72367)">

+             <path

+                inkscape:connector-curvature="0"

+                id="path40"

+                style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                d="m 211.164,79.504 v -1.109 c 0,-0.075 -0.043,-0.122 -0.133,-0.137 h -0.011 c -0.075,0 -0.122,0.047 -0.141,0.14 v 1.762 c 0.012,0.102 0.055,0.152 0.129,0.152 h 0.023 c 0.074,0 0.125,-0.05 0.153,-0.16 l 0.632,-1.414 c 0.008,0.032 0.145,0.356 0.414,0.969 l 0.262,0.559 c 0.031,0.031 0.063,0.046 0.102,0.046 h 0.019 c 0.075,0 0.117,-0.05 0.129,-0.152 v -1.762 c -0.015,-0.093 -0.062,-0.14 -0.14,-0.14 h -0.008 c -0.09,0.015 -0.137,0.062 -0.137,0.137 v 1.109 c -0.34,-0.774 -0.519,-1.172 -0.535,-1.195 -0.039,-0.036 -0.074,-0.051 -0.11,-0.051 -0.082,0 -0.148,0.082 -0.199,0.246 l -0.449,1 m -1.875,0.816 h 1.289 c 0.09,-0.015 0.133,-0.062 0.133,-0.136 v -0.02 c 0,-0.074 -0.051,-0.117 -0.152,-0.129 h -0.481 v -1.64 c 0,-0.075 -0.047,-0.122 -0.137,-0.137 h -0.007 c -0.079,0 -0.125,0.047 -0.141,0.14 v 1.637 h -0.492 c -0.094,0.02 -0.141,0.067 -0.141,0.149 0.02,0.089 0.063,0.136 0.129,0.136" />

+           </g>

+           <g

+              id="g42"

+              transform="translate(2.3874707,-165.72367)">

+             <g

+                clip-path="url(#clipPath48)"

+                id="g44">

+               <path

+                  inkscape:connector-curvature="0"

+                  id="path50"

+                  style="fill:#294172;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                  d="m 213.195,91.293 c 0,7.961 -6.453,14.418 -14.414,14.418 -7.957,0 -14.41,-6.449 -14.418,-14.406 V 80.148 c 0.008,-1.808 1.473,-3.269 3.278,-3.269 0.007,0 0.011,0 0.015,0 h 11.129 c 7.961,0.004 14.41,6.457 14.41,14.414 z" />

+               <path

+                  inkscape:connector-curvature="0"

+                  id="path52"

+                  style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                  d="m 203.012,102.293 c -3.735,0 -6.766,-3.031 -6.766,-6.766 0,-0.004 0,-0.004 0,-0.007 v -3.579 h -3.57 c -3.738,0 -6.766,-3.015 -6.766,-6.75 0,-3.738 3.028,-6.765 6.766,-6.765 3.738,0 6.765,3.027 6.765,6.765 0,0 0,0 0,0.004 v 3.594 h 3.571 c 3.738,0 6.765,3 6.765,6.738 0,3.735 -3.027,6.766 -6.765,6.766 z m -6.766,-17.109 c -0.004,-1.969 -1.601,-3.567 -3.57,-3.567 -1.973,0 -3.586,1.602 -3.586,3.574 0,1.969 1.613,3.598 3.586,3.598 0.004,0 0.004,0 0.004,0 h 3.062 c 0.281,0 0.504,-0.223 0.504,-0.504 z m 6.766,6.757 c 0,0 0,0 -0.004,0 h -3.063 c -0.277,0 -0.504,0.227 -0.504,0.504 v 3.086 c 0.004,1.973 1.602,3.567 3.571,3.567 1.972,0 3.586,-1.598 3.586,-3.571 0,-1.972 -1.614,-3.586 -3.586,-3.586 z" />

+               <path

+                  inkscape:connector-curvature="0"

+                  id="path54"

+                  style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"

+                  d="m 196.246,91.941 v 3.582 c 0,0 0,0 0,0.004 0,3.735 3.031,6.766 6.766,6.766 0.566,0 0.972,-0.063 1.496,-0.203 0.765,-0.199 1.39,-0.824 1.39,-1.555 0,-0.883 -0.64,-1.523 -1.597,-1.523 -0.457,0 -0.621,0.086 -1.289,0.086 -1.969,0 -3.567,-1.594 -3.571,-3.567 v -3.086 c 0,-0.277 0.227,-0.504 0.504,-0.504 0,0 0,0 0.004,0 h 2.344 c 0.875,0 1.578,-0.699 1.578,-1.574 0,-0.879 -0.703,-1.574 -1.578,-1.574 h -2.852 v -3.598 c 0,0 0,-0.004 0,-0.004 0,-3.738 -3.027,-6.765 -6.765,-6.765 -0.567,0 -0.969,0.062 -1.492,0.199 -0.766,0.199 -1.391,0.828 -1.391,1.559 0,0.882 0.637,1.523 1.594,1.523 0.457,0 0.621,-0.09 1.289,-0.09 1.969,0 3.566,1.598 3.57,3.567 0,0 0,3.101 0,3.101 0,0.281 -0.226,0.504 -0.504,0.504 h -2.344 c -0.875,0 -1.582,0.699 -1.582,1.574 0,0.883 0.715,1.578 1.598,1.578 z" />

+             </g>

+           </g>

+         </g>

+       </g>

+     </g>

+   </g>

+ </svg>

@@ -0,0 +1,439 @@ 

+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

+ <!-- Created with Inkscape (http://www.inkscape.org/) -->

+ 

+ <svg

+    xmlns:dc="http://purl.org/dc/elements/1.1/"

+    xmlns:cc="http://creativecommons.org/ns#"

+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

+    xmlns:svg="http://www.w3.org/2000/svg"

+    xmlns="http://www.w3.org/2000/svg"

+    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"

+    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"

+    width="2in"

+    height="3.5in"

+    viewBox="0 0 50.800001 88.900002"

+    version="1.1"

+    id="svg4647"

+    inkscape:version="0.92+devel unknown"

+    sodipodi:docname="fedora_bc2017_front_vertical.svg">

+   <defs

+      id="defs4641">

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4545">

+       <path

+          d="m 62,16 h 2 v -1.602 h -2 z"

+          id="path4543"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4555">

+       <path

+          d="M 18,23 H 28 V 14.398 H 18 Z"

+          id="path4553"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4565">

+       <path

+          d="m 38,23 h 9 v -8.602 h -9 z"

+          id="path4563"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4575">

+       <path

+          d="m 48,23 h 6 v -8.602 h -6 z"

+          id="path4573"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4585">

+       <path

+          d="M 53,23 H 63 V 14.398 H 53 Z"

+          id="path4583"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4595">

+       <path

+          d="m 28,27 h 9 V 14.398 h -9 z"

+          id="path4593"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4605">

+       <path

+          d="M 12.602,27 H 20 V 14.398 h -7.398 z"

+          id="path4603"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4619">

+       <path

+          d="M 61,32.398 H 72 V 22 H 61 Z"

+          id="path4617"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath34">

+       <path

+          d="M 42.871,90 H 62 V 54 H 42.871 Z"

+          id="path32"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath48">

+       <path

+          d="m 184,105.711 h 29.195 V 76 H 184 Z"

+          id="path46"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4545-3">

+       <path

+          d="m 62,16 h 2 v -1.602 h -2 z"

+          id="path4543-6"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4555-7">

+       <path

+          d="M 18,23 H 28 V 14.398 H 18 Z"

+          id="path4553-5"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4565-3">

+       <path

+          d="m 38,23 h 9 v -8.602 h -9 z"

+          id="path4563-5"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4575-6">

+       <path

+          d="m 48,23 h 6 v -8.602 h -6 z"

+          id="path4573-29"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4585-1">

+       <path

+          d="M 53,23 H 63 V 14.398 H 53 Z"

+          id="path4583-2"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4595-7">

+       <path

+          d="m 28,27 h 9 V 14.398 h -9 z"

+          id="path4593-0"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4605-9">

+       <path

+          d="M 12.602,27 H 20 V 14.398 h -7.398 z"

+          id="path4603-3"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+     <clipPath

+        clipPathUnits="userSpaceOnUse"

+        id="clipPath4619-6">

+       <path

+          d="M 61,32.398 H 72 V 22 H 61 Z"

+          id="path4617-0"

+          inkscape:connector-curvature="0" />

+     </clipPath>

+   </defs>

+   <sodipodi:namedview

+      id="base"

+      pagecolor="#ffffff"

+      bordercolor="#666666"

+      borderopacity="1.0"

+      inkscape:pageopacity="1.0"

+      inkscape:pageshadow="2"

+      inkscape:zoom="1.3521313"

+      inkscape:cx="168"

+      inkscape:cy="96"

+      inkscape:document-units="mm"

+      inkscape:current-layer="layer1"

+      inkscape:document-rotation="0"

+      showgrid="false"

+      units="in"

+      inkscape:showpageshadow="false"

+      inkscape:window-width="1920"

+      inkscape:window-height="1043"

+      inkscape:window-x="0"

+      inkscape:window-y="0"

+      inkscape:window-maximized="1" />

+   <metadata

+      id="metadata4644">

+     <rdf:RDF>

+       <cc:Work

+          rdf:about="">

+         <dc:format>image/svg+xml</dc:format>

+         <dc:type

+            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />

+         <dc:title></dc:title>

+       </cc:Work>

+     </rdf:RDF>

+   </metadata>

+   <g

+      inkscape:label="Layer 1"

+      inkscape:groupmode="layer"

+      id="layer1"

+      transform="translate(0,-208.09998)">

+     <path

+        d="m 50.8,291.95545 v 5.04453 H 0 v -5.04453 z"

+        style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35036355"

+        id="path5146"

+        inkscape:connector-curvature="0" />

+     <text

+        xml:space="preserve"

+        style="font-size:2.34703231px;line-height:120.00000477%;font-family:Montserrat;-inkscape-font-specification:Montserrat;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.26277271;stroke-linecap:round;stroke-linejoin:round"

+        x="2.8483934"

+        y="295.20029"

+        id="text5150"><tspan

+          sodipodi:role="line"

+          id="tspan5148"

+          x="2.8483934"

+          y="295.20029"

+          style="fill:#ffffff;stroke-width:0.26277271">FREEDOM. FRIENDS. FEATURES. FIRST.</tspan></text>

+     <g

+        id="g5218"

+        transform="matrix(0.3503636,0,0,-0.3503636,-137.13732,289.25188)">

+       <text

+          transform="scale(1,-1)"

+          id="text5212"

+          y="-90.727829"

+          x="463.83749"

+          style="font-size:8.97824478px;line-height:120.00000477%;font-family:Montserrat;-inkscape-font-specification:Montserrat;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round"

+          xml:space="preserve"><tspan

+            style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:9px;font-family:Montserrat;-inkscape-font-specification:'Montserrat Semi-Bold';text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.75"

+            y="-90.727829"

+            x="463.83749"

+            id="tspan5210"

+            sodipodi:role="line">$NAME</tspan></text>

+       <text

+          transform="scale(1,-1)"

+          xml:space="preserve"

+          style="font-size:7.64413404px;line-height:120.00000477%;font-family:Montserrat;-inkscape-font-specification:Montserrat;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#4c4c4c;fill-opacity:1;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round"

+          x="463.60489"

+          y="-79.707237"

+          id="text5216"><tspan

+            sodipodi:role="line"

+            id="tspan5214"

+            x="463.60489"

+            y="-79.707237"

+            style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.5px;font-family:Montserrat;-inkscape-font-specification:Montserrat;text-align:center;text-anchor:middle;fill:#4c4c4c;fill-opacity:1;stroke-width:0.75">$TITLE</tspan></text>

+     </g>

+     <text

+        xml:space="preserve"

+        style="font-size:2.43413258px;line-height:125.99999905%;font-family:Montserrat;-inkscape-font-specification:Montserrat;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;stroke-width:0.26277271;stroke-linecap:round;stroke-linejoin:round"

+        x="25.320963"

+        y="266.83859"

+        id="text5232"><tspan

+          sodipodi:role="line"

+          id="tspan5220"

+          x="25.320963"

+          y="266.83859"

+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.45254517px;line-height:125.99999905%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.26277271">$Line0</tspan><tspan

+          sodipodi:role="line"

+          x="25.320963"

+          y="269.99283"

+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.45254517px;line-height:125.99999905%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.26277271"

+          id="tspan5222">$Line1</tspan><tspan

+          sodipodi:role="line"

+          x="25.320963"

+          y="273.14706"

+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.45254517px;line-height:125.99999905%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.26277271"

+          id="tspan5224">$Line2</tspan><tspan

+          sodipodi:role="line"

+          x="25.320963"

+          y="276.3013"

+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.45254517px;line-height:125.99999905%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.26277271"

+          id="tspan5226">$Line3</tspan><tspan

+          sodipodi:role="line"

+          x="25.320963"

+          y="279.45554"

+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.45254517px;line-height:125.99999905%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.26277271"

+          id="tspan5228" /><tspan

+          sodipodi:role="line"

+          x="25.320963"

+          y="282.60977"

+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.45254517px;line-height:125.99999905%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.26277271"

+          id="tspan5230">$Line4</tspan></text>

+     <g

+        id="g5142"

+        transform="matrix(0.3503636,0,0,-0.3503636,-197.76173,360.08336)">

+       <g

+          style="stroke-width:1.0272001"

+          transform="matrix(0.97352019,0,0,0.97352019,24.068019,105.24985)"

+          id="g5110">

+         <g

+            style="stroke-width:0.51965946"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g4998">

+           <g

+              style="stroke-width:0.51965946"

+              id="g4996"

+              clip-path="url(#clipPath4545-3)">

+             <path

+                d="m 63.148,15.332 v -0.387 c 0,-0.023 -0.015,-0.039 -0.046,-0.047 h -0.004 c -0.028,0 -0.043,0.016 -0.047,0.051 v 0.613 c 0.004,0.036 0.015,0.051 0.043,0.051 h 0.008 c 0.027,0 0.043,-0.019 0.054,-0.054 l 0.219,-0.493 c 0.004,0.012 0.051,0.125 0.145,0.336 l 0.089,0.196 c 0.012,0.011 0.024,0.015 0.036,0.015 h 0.007 c 0.028,0 0.039,-0.015 0.043,-0.051 v -0.613 c -0.004,-0.035 -0.019,-0.051 -0.047,-0.051 h -0.003 c -0.032,0.008 -0.047,0.024 -0.047,0.047 v 0.387 c -0.118,-0.27 -0.18,-0.406 -0.188,-0.414 -0.012,-0.012 -0.023,-0.02 -0.039,-0.02 -0.027,0 -0.051,0.028 -0.066,0.086 l -0.157,0.348 m -0.652,0.285 h 0.449 c 0.032,-0.008 0.043,-0.023 0.043,-0.047 v -0.008 c 0,-0.027 -0.015,-0.042 -0.05,-0.046 H 62.77 v -0.571 c 0,-0.023 -0.016,-0.039 -0.047,-0.047 h -0.004 c -0.028,0 -0.043,0.016 -0.047,0.051 v 0.567 H 62.5 c -0.031,0.007 -0.051,0.023 -0.051,0.054 0.008,0.032 0.024,0.047 0.047,0.047"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51965946"

+                id="path4994"

+                inkscape:connector-curvature="0" />

+           </g>

+         </g>

+         <g

+            style="stroke-width:0.51965946"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g5004">

+           <g

+              style="stroke-width:0.51965946"

+              id="g5002"

+              clip-path="url(#clipPath4555-7)">

+             <path

+                d="m 26.406,18.035 c 0,0 0,0 -5.648,0 0.094,-1.223 1.078,-2.137 2.394,-2.137 0.93,0 1.735,0.383 2.375,1.004 0.129,0.129 0.274,0.164 0.438,0.164 0.219,0 0.441,-0.109 0.586,-0.289 0.09,-0.129 0.144,-0.277 0.144,-0.422 0,-0.203 -0.09,-0.421 -0.254,-0.585 -0.769,-0.821 -2.066,-1.372 -3.343,-1.372 -2.321,0 -4.184,1.868 -4.184,4.188 0,2.32 1.809,4.184 4.129,4.184 2.301,0 4.019,-1.793 4.019,-4.149 0,-0.348 -0.312,-0.586 -0.656,-0.586 z m -3.363,3.235 c -1.227,0 -2.066,-0.805 -2.25,-1.973 2.762,0 4.496,0 4.496,0 -0.164,1.113 -1.039,1.973 -2.246,1.973 z"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51965946"

+                id="path5000"

+                inkscape:connector-curvature="0" />

+           </g>

+         </g>

+         <g

+            style="stroke-width:0.51965946"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g5010">

+           <g

+              style="stroke-width:0.51965946"

+              id="g5008"

+              clip-path="url(#clipPath4565-3)">

+             <path

+                d="m 42.539,14.398 c -2.32,0 -4.184,1.868 -4.184,4.188 0,2.32 1.864,4.184 4.184,4.184 2.32,0 4.184,-1.864 4.184,-4.184 0,-2.32 -1.864,-4.188 -4.184,-4.188 z m 0,6.782 c -1.461,0 -2.41,-1.172 -2.41,-2.594 0,-1.426 0.949,-2.598 2.41,-2.598 1.461,0 2.414,1.172 2.414,2.598 0,1.422 -0.953,2.594 -2.414,2.594 z"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51965946"

+                id="path5006"

+                inkscape:connector-curvature="0" />

+           </g>

+         </g>

+         <g

+            style="stroke-width:0.51965946"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g5016">

+           <g

+              style="stroke-width:0.51965946"

+              id="g5014"

+              clip-path="url(#clipPath4575-6)">

+             <path

+                d="m 52.766,22.77 c -1.227,0 -2.036,-0.364 -2.754,-1.274 l -0.067,0.422 c -0.054,0.445 -0.429,0.785 -0.886,0.785 -0.497,0 -0.899,-0.402 -0.899,-0.898 v -6.438 c 0,-0.492 0.402,-0.894 0.895,-0.894 0.496,0 0.898,0.402 0.898,0.894 v 3.453 c 0,1.575 1.367,2.36 2.813,2.36 0.437,0 0.785,0.363 0.785,0.804 0,0.438 -0.348,0.786 -0.785,0.786 z"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51965946"

+                id="path5012"

+                inkscape:connector-curvature="0" />

+           </g>

+         </g>

+         <g

+            style="stroke-width:0.51965946"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g5022">

+           <g

+              style="stroke-width:0.51965946"

+              id="g5020"

+              clip-path="url(#clipPath4585-1)">

+             <path

+                d="m 62.215,18.586 c 0.015,2.246 -1.594,4.184 -4.188,4.184 -2.32,0 -4.203,-1.864 -4.203,-4.184 0,-2.32 1.828,-4.188 4.039,-4.188 1.106,0 2.098,0.571 2.539,1.164 l 0.219,-0.554 c 0.117,-0.313 0.418,-0.531 0.77,-0.531 0.453,0 0.82,0.367 0.824,0.82 z m -4.188,-2.598 c -1.461,0 -2.41,1.172 -2.41,2.598 0,1.422 0.949,2.594 2.41,2.594 1.461,0 2.414,-1.172 2.414,-2.594 0,-1.426 -0.953,-2.598 -2.414,-2.598 z"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51965946"

+                id="path5018"

+                inkscape:connector-curvature="0" />

+           </g>

+         </g>

+         <g

+            style="stroke-width:0.51965946"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g5028">

+           <g

+              style="stroke-width:0.51965946"

+              id="g5026"

+              clip-path="url(#clipPath4595-7)">

+             <path

+                d="m 36.918,26.078 c 0,0.492 -0.402,0.875 -0.895,0.875 -0.496,0 -0.894,-0.383 -0.894,-0.875 v -4.715 c -0.457,0.84 -1.445,1.407 -2.613,1.407 -2.379,0 -3.965,-1.793 -3.965,-4.184 0,-2.395 1.644,-4.188 3.965,-4.188 1.035,0 1.929,0.43 2.468,1.172 l 0.2,-0.504 c 0.121,-0.347 0.453,-0.593 0.839,-0.593 0.493,0 0.895,0.398 0.895,0.89 0,0.004 0,0.004 0,0.004 z m -4.184,-10.09 c -1.461,0 -2.394,1.172 -2.394,2.598 0,1.422 0.93,2.594 2.394,2.594 1.461,0 2.395,-1.114 2.395,-2.594 0,-1.481 -0.934,-2.598 -2.395,-2.598 z"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51965946"

+                id="path5024"

+                inkscape:connector-curvature="0" />

+           </g>

+         </g>

+         <g

+            style="stroke-width:0.51965946"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g5034">

+           <g

+              style="stroke-width:0.51965946"

+              id="g5032"

+              clip-path="url(#clipPath4605-9)">

+             <path

+                d="m 18.277,26.898 c -0.16,0.028 -0.328,0.04 -0.492,0.04 -1.851,0 -3.359,-1.508 -3.359,-3.36 v -1.047 h -1.094 c -0.402,0 -0.73,-0.328 -0.73,-0.73 0,-0.403 0.328,-0.809 0.73,-0.809 h 1.094 v -5.625 c 0,-0.492 0.402,-0.894 0.898,-0.894 0.492,0 0.895,0.402 0.895,0.894 v 5.625 h 1.211 c 0.402,0 0.73,0.406 0.73,0.809 0,0.402 -0.328,0.73 -0.73,0.73 h -1.211 v 1.047 c 0,0.863 0.703,1.684 1.566,1.684 0.074,0 0.156,-0.008 0.231,-0.02 0.488,-0.07 0.945,0.153 1.019,0.641 0.07,0.488 -0.265,0.945 -0.758,1.015 z"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51965946"

+                id="path5030"

+                inkscape:connector-curvature="0" />

+           </g>

+         </g>

+       </g>

+       <g

+          style="stroke-width:0.34163046"

+          transform="matrix(2.9271395,0,0,2.9271395,-1381.0388,-355.82163)"

+          id="g5087">

+         <g

+            style="stroke-width:0.17283049"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g5038">

+           <path

+              d="m 71.129,23.285 v -0.387 c 0,-0.023 -0.016,-0.039 -0.047,-0.046 h -0.004 c -0.027,0 -0.043,0.019 -0.051,0.05 v 0.614 c 0.004,0.035 0.02,0.054 0.047,0.054 h 0.008 c 0.023,0 0.043,-0.019 0.051,-0.058 l 0.222,-0.492 c 0,0.011 0.051,0.125 0.145,0.335 l 0.09,0.196 c 0.008,0.011 0.019,0.019 0.035,0.019 h 0.008 c 0.023,0 0.039,-0.019 0.043,-0.054 v -0.614 c -0.004,-0.031 -0.024,-0.05 -0.047,-0.05 h -0.004 c -0.031,0.007 -0.047,0.023 -0.047,0.046 v 0.391 c -0.121,-0.269 -0.183,-0.41 -0.187,-0.418 -0.012,-0.012 -0.028,-0.019 -0.039,-0.019 -0.028,0 -0.051,0.031 -0.071,0.086 l -0.152,0.347 m -0.652,0.285 h 0.445 c 0.031,-0.004 0.047,-0.019 0.047,-0.047 v -0.007 c 0,-0.028 -0.016,-0.039 -0.051,-0.043 H 70.75 v -0.575 c 0,-0.023 -0.016,-0.039 -0.047,-0.046 h -0.004 c -0.027,0 -0.043,0.019 -0.051,0.05 v 0.571 H 70.48 c -0.035,0.004 -0.05,0.023 -0.05,0.05 0.008,0.032 0.023,0.047 0.047,0.047"

+              style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.17283049"

+              id="path5036"

+              inkscape:connector-curvature="0" />

+         </g>

+         <g

+            style="stroke-width:0.17283049"

+            transform="matrix(1.9766796,0,0,1.9766796,558.82622,200.61531)"

+            id="g5048">

+           <g

+              style="stroke-width:0.17283049"

+              id="g5046"

+              clip-path="url(#clipPath4619-6)">

+             <path

+                d="m 71.832,27.387 c 0,2.769 -2.242,5.011 -5.012,5.011 -2.765,0 -5.011,-2.242 -5.011,-5.007 v -3.879 c 0,-0.629 0.507,-1.137 1.136,-1.137 0.004,0 0.004,0 0.008,0 h 3.871 c 2.766,0 5.008,2.242 5.008,5.012 z"

+                style="fill:#294172;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.17283049"

+                id="path5040"

+                inkscape:connector-curvature="0" />

+             <path

+                d="m 68.293,31.211 c -1.301,0 -2.355,-1.051 -2.355,-2.352 0,0 0,0 0,-0.004 v -1.242 h -1.239 c -1.301,0 -2.355,-1.051 -2.355,-2.347 0,-1.301 1.054,-2.356 2.355,-2.356 1.297,0 2.352,1.055 2.352,2.356 v 1.25 h 1.242 c 1.297,0 2.352,1.043 2.352,2.343 0,1.301 -1.055,2.352 -2.352,2.352 z m -2.355,-5.949 c 0,-0.684 -0.555,-1.239 -1.239,-1.239 -0.687,0 -1.25,0.555 -1.25,1.243 0,0.683 0.563,1.25 1.25,1.25 h 1.063 c 0,0 0.004,0 0.004,0 0.093,0 0.175,-0.078 0.175,-0.176 v -1.078 z m 2.355,2.351 c 0,0 0,0 -0.004,0 h -1.062 c -0.098,0 -0.176,0.078 -0.176,0.172 v 1.074 c 0,0.688 0.554,1.243 1.242,1.243 0.684,0 1.246,-0.559 1.246,-1.243 0,-0.687 -0.562,-1.246 -1.246,-1.246 z"

+                style="fill:#3c6eb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.17283049"

+                id="path5042"

+                inkscape:connector-curvature="0" />

+             <path

+                d="m 65.938,27.613 v 1.242 c 0,0.004 0,0.004 0,0.004 0,1.301 1.054,2.352 2.355,2.352 0.195,0 0.336,-0.02 0.519,-0.07 0.266,-0.071 0.485,-0.286 0.485,-0.539 0,-0.309 -0.223,-0.532 -0.555,-0.532 -0.16,0 -0.219,0.032 -0.449,0.032 -0.688,0 -1.242,-0.555 -1.242,-1.243 v -1.07 c 0,-0.098 0.078,-0.176 0.176,-0.176 h 0.816 c 0.305,0 0.547,-0.246 0.547,-0.551 0,-0.304 -0.246,-0.546 -0.547,-0.546 h -0.992 v -1.25 c 0,-1.301 -1.055,-2.356 -2.352,-2.356 -0.199,0 -0.34,0.024 -0.519,0.07 -0.27,0.071 -0.485,0.29 -0.485,0.543 0,0.305 0.223,0.528 0.555,0.528 0.156,0 0.215,-0.028 0.449,-0.028 0.684,0 1.239,0.555 1.242,1.239 0,0 0,1.078 0,1.078 0,0.098 -0.082,0.176 -0.175,0.176 0,0 0,0 -0.004,0 h -0.813 c -0.304,0 -0.551,0.242 -0.551,0.546 0,0.309 0.25,0.551 0.555,0.551 z"

+                style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.17283049"

+                id="path5044"

+                inkscape:connector-curvature="0" />

+           </g>

+         </g>

+       </g>

+     </g>

+   </g>

+ </svg>

file modified
+2
@@ -9,6 +9,8 @@ 

      author_email = 'bexelbie@redhat.com',

      url = 'https://fedoraproject.org/wiki/Business_cards',

  

+     include_package_data=True,

+ 

      entry_points = {

          'console_scripts': [

              ('fedora-business-cards = '

Finally implement the replacement horizontal and new vertical
designs by @mleonova

https://pagure.io/design/issue/531

Note: This adds SVG templates which we do text replacement on
this has the side effect of making new cards easier

This also moves from optparse to argparse

@pviktori thank you for considering looking at this - any comments appreciated.

And yes - this is a mixed commit

[throwaway@f30-devbox-server ~]$ fedora-business-cards --list-generators
usage: fedora-business-cards [-h] [--list-generators] [--height HEIGHT]
                             [--width WIDTH] [--bleed BLEED] [--inch] [--mm]
                             [-d DPI] [--pdf] [--png] [--svg] [--eps]
                             [--cmyk-pdf]
                             GENERATOR ...
fedora-business-cards: error: the following arguments are required: GENERATOR

I get this error while trying to list generators available.

rebased onto 3a3cee3

4 years ago

There's a lot of duplicate logic, but the change looks OK to me!

Sorry for the delay; there was work to take care of.

@pviktori thank you for the feedback. I agree that this can probably be deduplicated - but being done now was important to me :)

PRs welcome from anyone, not just you :)

Pull-Request has been merged by bex

4 years ago