1# Copyright (C) 2011-2020, Manfred Moitzi
2# License: MIT License
3import sys
4import os
5from .version import version, __version__
6
7VERSION = __version__
8__author__ = "mozman <me@mozman.at>"
9
10TRUE_STATE = {'True', 'true', 'On', 'on', '1'}
11PYPY = hasattr(sys, 'pypy_version_info')
12PYPY_ON_WINDOWS = sys.platform.startswith('win') and PYPY
13EZDXF_TEST_FILES = os.getenv('EZDXF_TEST_FILES', '')
14
15# Set EZDXF_AUTO_LOAD_FONTS to "False" to deactivate auto font loading,
16# if this this procedure slows down your startup time and font measuring is not
17# important to you. Fonts can always loaded manually: ezdxf.fonts.load()
18EZDXF_AUTO_LOAD_FONTS = os.getenv('EZDXF_AUTO_LOAD_FONTS', 'True') in TRUE_STATE
19
20# name space imports - do not remove
21from ezdxf.options import options
22from ezdxf.colors import (
23    int2rgb, rgb2int, transparency2float, float2transparency,
24)
25from ezdxf.lldxf import const
26from ezdxf.lldxf.validator import is_dxf_file, is_dxf_stream
27from ezdxf.filemanagement import readzip, new, read, readfile, decode_base64
28from ezdxf.tools.standards import (
29    setup_linetypes, setup_styles,
30    setup_dimstyles, setup_dimstyle,
31)
32from ezdxf.tools import pattern, fonts
33from ezdxf.render.arrows import ARROWS
34from ezdxf.lldxf.const import (
35    DXFError, DXFStructureError, DXFVersionError, DXFTableEntryError,
36    DXFAppDataError, DXFXDataError, DXFAttributeError, DXFValueError,
37    DXFKeyError, DXFIndexError, DXFTypeError, DXFBlockInUseError,
38    InvalidGeoDataException, InsertUnits,
39    ACI, DXF12, DXF2000, DXF2004, DXF2007, DXF2010, DXF2013, DXF2018,
40)
41# name space imports - do not remove
42
43import codecs
44from ezdxf.lldxf.encoding import (
45    dxf_backslash_replace, has_dxf_unicode, decode_dxf_unicode,
46)
47
48# setup DXF unicode encoder -> '\U+nnnn'
49codecs.register_error('dxfreplace', dxf_backslash_replace)
50
51# Load font support automatically:
52if EZDXF_AUTO_LOAD_FONTS:
53    fonts.load()
54
55YES_NO = {True: 'yes', False: 'no'}
56
57
58def print_config(func=print, verbose=False):
59    from pathlib import Path
60    from ezdxf.acc import USE_C_EXT
61
62    func(f"ezdxf v{__version__} @ {Path(__file__).parent}")
63    func(f"Python version: {sys.version}")
64    func(f"using C-extensions: {YES_NO[USE_C_EXT]}")
65    func(f"using Matplotlib: {YES_NO[options.use_matplotlib]}")
66    if verbose:
67        font_cache_dir = options.font_cache_directory
68        if font_cache_dir is False:
69            font_cache_dir = 'internal'
70        func(f"font cache directory: {font_cache_dir}")
71        func(f"default text style: {options.default_text_style}")
72        func(f"default dimension text style: "
73             f"{options.default_dimension_text_style}")
74        func(f"load proxy graphic: {YES_NO[options.load_proxy_graphics]}")
75        func(f"store proxy graphic: {YES_NO[options.store_proxy_graphics]}")
76        func(f"log unprocessed tags: {YES_NO[options.log_unprocessed_tags]}")
77        func(f"filter invalid XDATA group codes: "
78             f"{YES_NO[options.filter_invalid_xdata_group_codes]}")
79        for v in options.CONFIG_VARS:
80            func(f"{v}={os.environ.get(v, '')}")
81