Exemplo n.º 1
0
def test_read_write_config(config_file):
    tmp_dir = Path(tempfile.mkdtemp())
    if config_file:
        config_file = locate_test_file(config_file)
        tmp_dir = tmp_dir / config_file.name
    else:
        tmp_dir = tmp_dir / "the_default.toml"

    original = config.load(config_file)
    config.write(tmp_dir, original)
    reloaded = config.load(tmp_dir)

    assert original == reloaded
Exemplo n.º 2
0
def color_font_config(config_overrides, svgs, tmp_dir=None):
    if tmp_dir is None:
        tmp_dir = tempfile.gettempdir()
    svgs = tuple(locate_test_file(s) for s in svgs)
    fea_file = os.path.join(tmp_dir, "test.fea")
    rgi_seqs = tuple(codepoints.from_filename(str(f)) for f in svgs)
    with open(fea_file, "w") as f:
        f.write(features.generate_fea(rgi_seqs))

    return (
        config.load(config_file=None, additional_srcs=svgs)
        ._replace(
            family="UnitTest",
            upem=100,
            ascender=100,
            descender=0,
            width=100,
            keep_glyph_names=True,
            fea_file=fea_file,
        )
        ._replace(**config_overrides),
        [
            write_font.InputGlyph(
                os.path.relpath(svg),
                (0xE000 + idx,),
                glyph_name((0xE000 + idx,)),
                picosvg(svg),
            )
            for idx, svg in enumerate(svgs)
        ],
    )
Exemplo n.º 3
0
def main(argv):
    ufos = tuple(a for a in argv[1:] if a.endswith(".ufo"))

    config_file = None
    if FLAGS.config_file:
        config_file = Path(FLAGS.config_file)
    font_config = config.load(config_file)

    designspace = designspaceLib.DesignSpaceDocument()

    import pprint

    pp = pprint.PrettyPrinter()

    # define axes names, tags and min/default/max
    axis_defs = [
        dict(
            tag=a.axisTag,
            name=a.name,
            minimum=min(
                p.position
                for m in font_config.masters
                for p in m.position
                if p.axisTag == a.axisTag
            ),
            default=a.default,
            maximum=max(
                p.position
                for m in font_config.masters
                for p in m.position
                if p.axisTag == a.axisTag
            ),
        )
        for a in font_config.axes
    ]
    logging.info(pp.pformat(axis_defs))
    for axis_def in axis_defs:
        designspace.addAxisDescriptor(**axis_def)

    axis_names = {a.axisTag: a.name for a in font_config.axes}
    for master in font_config.masters:
        ufo = ufoLib2.Font.open(master.output_ufo)
        ufo.info.styleName = master.style_name
        location = {axis_names[p.axisTag]: p.position for p in master.position}
        designspace.addSourceDescriptor(
            name=master.output_ufo, location=location, font=ufo
        )

    # build a variable TTFont from the designspace document
    # TODO: Use ufo2ft.compileVariableCFF2 for CFF
    vf = ufo2ft.compileVariableTTF(designspace)
    vf.save(font_config.output_file)
Exemplo n.º 4
0
def main(argv):
    config_file = None
    if FLAGS.config_file:
        config_file = Path(FLAGS.config_file)
    font_config = config.load(config_file)
    if len(font_config.masters) != 1:
        raise ValueError("write_font expects only one master")

    inputs = list(_inputs(glyphmap.parse_csv(FLAGS.glyphmap_file)))
    if not inputs:
        sys.exit("Please provide at least one svg filename")
    ufo, ttfont = _generate_color_font(font_config, inputs)
    _write(ufo, ttfont, font_config.output_file)
    logging.info("Wrote %s" % font_config.output_file)
Exemplo n.º 5
0
def _run(argv):
    additional_srcs = tuple(Path(f) for f in argv if f.endswith(".svg"))
    font_configs = config.load_configs(
        tuple(Path(f) for f in argv if f.endswith(".toml")),
        additional_srcs=additional_srcs,
    )
    if not font_configs:
        font_configs = (config.load(additional_srcs=additional_srcs), )

    os.makedirs(build_dir(), exist_ok=True)
    if FLAGS.gen_svg_font_diffs:
        os.makedirs(os.path.join(build_dir(), "resvg_png"), exist_ok=True)
        os.makedirs(os.path.join(build_dir(), "skia_png"), exist_ok=True)
        os.makedirs(os.path.join(build_dir(), "diff_png"), exist_ok=True)
    build_file = build_dir() / "build.ninja"

    assert not FLAGS.gen_svg_font_diffs or (
        len(font_configs)
        == 1), "Can only generate diffs for one font at a time"

    if len(font_configs) > 1:
        assert all(not _is_vf(c) for c in font_configs)

    logging.info(f"Proceeding with {len(font_configs)} config(s)")

    for font_config in font_configs:
        if _is_vf(font_config) and _is_svg(font_config):
            raise ValueError("svg formats cannot have multiple masters")
        _write_config_for_build(font_config)
        write_source_names(font_config)

    if FLAGS.gen_ninja:
        logging.info(f"Generating {build_file.relative_to(build_dir())}")
        with open(build_file, "w") as f:
            nw = ninja_syntax.Writer(f)
            write_preamble(nw)

            # Separate loops for separate content to keep related rules together

            for font_config in font_configs:
                for master in font_config.masters:
                    write_glyphmap_rule(nw, font_config, master)

            for font_config in font_configs:
                write_config_preamble(nw, font_config)

            for font_config in font_configs:
                write_fea_build(nw, font_config)

            for font_config in font_configs:
                for master in font_config.masters:
                    write_glyphmap_build(nw, font_config, master)

            picosvg_builds = set()
            for font_config in font_configs:
                for master in font_config.masters:
                    if not font_config.color_format.startswith("untouchedsvg"):
                        write_picosvg_builds(picosvg_builds, nw,
                                             font_config.clip_to_viewbox,
                                             master)
            nw.newline()

            for font_config in font_configs:
                if FLAGS.gen_svg_font_diffs:
                    assert not _is_vf(font_config)
                    write_svg_font_diff_build(nw, font_config.output_file,
                                              font_config.masters[0].sources)

                for master in font_config.masters:
                    if _is_vf(font_config):
                        write_ufo_build(nw, font_config, master)

            for font_config in font_configs:
                if _is_vf(font_config):
                    write_variable_font_build(nw, font_config)
                else:
                    write_static_font_build(nw, font_config)

    ninja_cmd = ["ninja", "-C", os.path.dirname(build_file)]
    if FLAGS.exec_ninja:
        logging.info(" ".join(ninja_cmd))
        subprocess.run(ninja_cmd, check=True)
    else:
        logging.info("To run: " + " ".join(ninja_cmd))