docs: def make_parser():
      """\
      Returns the command line parser.
      """
  
      def _convert_scale(val):
          val = float(val)
          return val if val != int(val) else int(val)
  
      parser = argparse.ArgumentParser(prog='segno',
                                       description='Segno QR Code and Micro QR Code generator version {0}'.format(segno.__version__))
      parser.add_argument('--version', '-v', help='(Micro) QR Code version: 1 .. 40 or "M1", "M2", "M3", "M4"',
                          required=False,)
      parser.add_argument('--error', '-e', help='Error correction level: "L": 7%% (default), "M": 15%%, "Q": 25%%, "H": 30%%, "-": no error correction (used for M1 symbols)',
                          choices=('L', 'M', 'Q', 'H', '-'),
                          default=None,
                          type=lambda x: x.upper())
      parser.add_argument('--mode', '-m', help='Mode',
                          choices=('numeric', 'alphanumeric', 'byte', 'kanji'),
                          default=None,
                          type=lambda x: x.lower())
      parser.add_argument('--pattern', '-p', help='Mask pattern to use',
                          required=False,
                          default=None,
                          type=int)
      parser.add_argument('--scale', '-s', help='Scaling factor',
                          default=1,
                          type=_convert_scale)
      parser.add_argument('--border', '-b', help='Size of the border / quiet zone',
                          default=None,
                          type=int)
      parser.add_argument('--micro', help='Allow the creation of Micro QR Codes',
                          dest='micro', action='store_true')
      parser.add_argument('--no-micro', help='Disallow creation of Micro QR Codes (default)',
                          dest='micro', action='store_false')
      parser.add_argument('--color', help='Color of the dark modules. Use "transparent" to set the color to None (not supported by all serializers)')
      parser.add_argument('--background', help='Color of the light modules. Use "transparent" to set the background to None (not supported by all serializers)')
      parser.add_argument('--output', '-o', help='Output file. If not specified, the QR Code is printed to the terminal',
                          required=False,
                          )
      parser.add_argument('--no-error-boost', help='Disables the automatic error incrementation if a higher error correction level is possible',
                          dest='boost_error', action='store_false')
      parser.add_argument('--seq', help='Creates a sequence of QR Codes (Structured Append mode). Version or symbol count must be provided',
                          dest='seq', action='store_true')
      parser.add_argument('--symbol-count', '-sc', help='Number of symbols to create',
                          default=None,
                          type=int)
      # SVG
      svg_group = parser.add_argument_group('SVG', 'SVG specific options')
      svg_group.add_argument('--no-classes', help='Omits the (default) SVG classes',
                             action='store_true')
      svg_group.add_argument('--no-xmldecl', help='Omits the XML declaration header',
                             dest='xmldecl',
                             action='store_false')
      svg_group.add_argument('--no-namespace', help='Indicates that the SVG document should have no SVG namespace declaration',
                             dest='svgns',
                             action='store_false')
      svg_group.add_argument('--no-newline', help='Indicates that the SVG document should have no trailing newline',
                             dest='nl',
                             action='store_false')
      svg_group.add_argument('--title', help='Specifies the title of the SVG document')
      svg_group.add_argument('--desc', help='Specifies the description of the SVG document')
      svg_group.add_argument('--svgid', help='Indicates the ID of the <svg/> element')
      svg_group.add_argument('--svgclass', help='Indicates the CSS class of the <svg/> element')
      svg_group.add_argument('--lineclass', help='Indicates the CSS class of the <path/> element (the dark modules)')
      svg_group.add_argument('--no-size', help='Indicates that the SVG document should not have "width" and "height" attributes',
                             dest='omitsize',
                             action='store_true')
      svg_group.add_argument('--unit', help='Indicates SVG coordinate system unit')
      svg_group.add_argument('--svgversion', help='Indicates the SVG version',
                             type=float)
      svg_group.add_argument('--encoding', help='Specifies the encoding of the document',
                             default='utf-8')
      # PNG
      png_group = parser.add_argument_group('PNG', 'PNG specific options')
      png_group.add_argument('--dpi', help='Sets the DPI value of the PNG file',
                             type=int)
      png_group.add_argument('--no-ad', help='Omits the "Software" comment in the PNG file',
                             dest='addad',
                             action='store_false')
      parser.add_mutually_exclusive_group().add_argument('--ver', '-V', help="Shows Segno's version",
                                                         action='version',
                                                         version='Segno {0}'.format(segno.__version__))
      parser.add_argument('content', nargs='+', help='The content to encode')
      return parser