Exemplo n.º 1
0
    def test_ui_scope(self):
        self.assertTrue(f.find_external_object("ceammc/ui.scope~"))
        self.assertTrue(f.find_external_object("ceammc/ui_scope~"))

        self.assertTrue(f.find_external_object("ui.scope~"))
        self.assertTrue(f.find_external_object("ui_scope~"))
        self.assertTrue(f.find_external_object("ui.scope"))
        self.assertTrue(f.find_external_object("ui_scope"))
        f.add_import("ceammc")
        self.assertTrue(f.find_external_object("ui.scope"))
        self.assertTrue(f.find_external_object("ui_scope"))
        self.assertTrue(f.find_external_object("ui.scope~"))
        self.assertTrue(f.find_external_object("ui_scope~"))

        args = dict()
        args['@size'] = '100x200'
        sc = f.make_by_name("ceammc/ui_scope~", **args)
        self.assertTrue(issubclass(sc.__class__, PdObject))
        self.assertEqual(sc.width, 100)
        self.assertEqual(sc.height, 200)

        # default size
        sc = f.make_by_name("ceammc/ui_scope~")
        self.assertTrue(issubclass(sc.__class__, PdObject))
        self.assertEqual(sc.width, 150)
        self.assertEqual(sc.height, 100)
Exemplo n.º 2
0
    def test_ui_scope(self):
        self.assertTrue(f.find_external_object("ceammc/ui.scope~"))
        self.assertTrue(f.find_external_object("ceammc/ui_scope~"))

        self.assertTrue(f.find_external_object("ui.scope~"))
        self.assertTrue(f.find_external_object("ui_scope~"))
        self.assertTrue(f.find_external_object("ui.scope"))
        self.assertTrue(f.find_external_object("ui_scope"))
        f.add_import("ceammc")
        self.assertTrue(f.find_external_object("ui.scope"))
        self.assertTrue(f.find_external_object("ui_scope"))
        self.assertTrue(f.find_external_object("ui.scope~"))
        self.assertTrue(f.find_external_object("ui_scope~"))

        args = dict()
        args['@size'] = '100x200'
        sc = f.make_by_name("ceammc/ui_scope~", **args)
        self.assertTrue(issubclass(sc.__class__, PdObject))
        self.assertEqual(sc.width, 100)
        self.assertEqual(sc.height, 200)

        # default size
        sc = f.make_by_name("ceammc/ui_scope~")
        self.assertTrue(issubclass(sc.__class__, PdObject))
        self.assertEqual(sc.width, 150)
        self.assertEqual(sc.height, 100)
Exemplo n.º 3
0
def main():
    arg_parser = argparse.ArgumentParser(
        description='PureData pddoc to html converter')
    arg_parser.add_argument('name',
                            metavar='PDDOC',
                            help="Documentation file in PDDOC format")
    arg_parser.add_argument('output',
                            metavar='OUTNAME',
                            nargs='?',
                            default='',
                            help="HTML output file name")

    args = vars(arg_parser.parse_args())
    in_file = args['name']
    output = args['output']

    if not os.path.exists(in_file):
        logging.error("File not exists: \"%s\"", in_file)
        exit(1)

    if not output:
        output = os.path.splitext(os.path.basename(in_file))[0] + ".html"

    xml = parse_xml(in_file)
    if not xml:
        exit(1)

    css_file = "theme.css"
    factory.add_import('ceammc')

    pddoc = xml.getroot()
    for child_tag in pddoc:
        if child_tag.tag == "object":
            dobj = DocObject()
            dobj.from_xml(child_tag)

            v = HtmlDocVisitor()
            v.set_css_file(css_file)
            v.set_image_prefix(child_tag.attrib["name"])
            v.set_search_dir(os.path.dirname(in_file))

            # traverse doc
            dobj.traverse(v)

            # generate images
            v.generate_images()

            html_data = v.render()
            f = open(output, "w")
            f.write(html_data)
            f.close()

    # copy css theme file to current folder
    src_css = os.path.join(os.path.dirname(__file__), "../share", css_file)
    shutil.copyfile(src_css, css_file)
Exemplo n.º 4
0
 def test_parse_kwargs(self):
     factory.add_import("ceammc")
     self.p.parse('[ui.scope~ @size=300x400]')
     self.assertEqual(self.p.tokens[0].type, 'OBJECT')
     self.assertTrue(self.p.nodes[0].pd_object is not None)
     obj = self.p.nodes[0].pd_object
     self.assertTrue(issubclass(obj.__class__, PdObject));
     self.assertEqual(obj.width, 300)
     self.assertEqual(obj.height, 400)
     self.assertEqual(obj.to_string(), 'ui.scope~ @size 300 400')
     self.assertEqual(obj.brect(), (20, 20, 300, 400))
Exemplo n.º 5
0
 def test_parse_kwargs(self):
     factory.add_import("ceammc")
     self.p.parse('[ui.scope~ @size=300x400]')
     self.assertEqual(self.p.tokens[0].type, 'OBJECT')
     self.assertTrue(self.p.nodes[0].pd_object is not None)
     obj = self.p.nodes[0].pd_object
     self.assertTrue(issubclass(obj.__class__, PdObject));
     self.assertEqual(obj.width, 300)
     self.assertEqual(obj.height, 400)
     self.assertEqual(obj.to_string(), 'ui.scope~ @size 300 400')
     self.assertEqual(obj.brect(), (20, 20, 300, 400))
Exemplo n.º 6
0
def main():
    arg_parser = argparse.ArgumentParser(description='PureData pddoc to Markdown converter')
    arg_parser.add_argument('name', metavar='PDDOC', help="Documentation file in PDDOC format")
    arg_parser.add_argument('output', metavar='OUTNAME', nargs='?', default='',
                            help="Markdown output file name")
    arg_parser.add_argument('--locale', '-l', metavar='locale', default='EN', help='locale (currently EN or RU)')
    
    args = vars(arg_parser.parse_args())
    in_file = args['name']
    output = args['output']

    if not os.path.exists(in_file):
        logging.error("File not exists: \"%s\"", in_file)
        exit(1)

    if not output:
        output = os.path.splitext(os.path.basename(in_file))[0] + ".md"

    xml = parse_xml(in_file)
    if not xml:
        exit(1)

    factory.add_import('ceammc')

    pddoc = xml.getroot()
    for child_tag in pddoc:
        if child_tag.tag == "object":
            dobj = DocObject()
            dobj.from_xml(child_tag)

            v = MarkdownVisitor(args['locale'])
            v.set_image_prefix(child_tag.attrib["name"])
            v.set_search_dir(os.path.dirname(in_file))

            # traverse doc
            dobj.traverse(v)

            # generate images
            v.generate_images()

            html_data = v.render()
            f = open(output, "w")
            f.write(html_data)
            f.close()
Exemplo n.º 7
0
def main():
    arg_parser = argparse.ArgumentParser(
        description='PureData pddoc C++ source generator')
    arg_parser.add_argument('name',
                            metavar='PDDOC',
                            help="Documentation file in PDDOC format")

    args = vars(arg_parser.parse_args())
    in_file = args['name']

    if not os.path.exists(in_file):
        logging.error("File not exists: \"%s\"", in_file)
        exit(1)

    xml = parse_xml(in_file)
    if not xml:
        exit(1)

    factory.add_import('ceammc')

    pddoc = xml.getroot()
    v = pddoc.xpath("//object/meta/description")
    if v is not None:
        print("obj.setDescription(\"{}\");".format(v[0].text))

    authors = pddoc.xpath("//object/meta/authors/author")
    if authors is not None:
        for a in authors:
            print("obj.addAuthor(\"{}\");".format(a.text))

    keywords = pddoc.xpath("//object/meta/keywords")
    if keywords is not None:
        kw = list(map(lambda x: f"\"{x}\"", keywords[0].text.split(" ")))
        print("obj.setKeywords({{{}}});".format(", ".join(kw)))

    category = pddoc.xpath("//object/meta/category")
    if category is not None:
        print("obj.setCategory(\"{}\");".format(category[0].text))

    since = pddoc.xpath("//object/meta/since")
    if since is not None:
        cat = since[0].text.split(".")[:2]
        print("obj.setSinceVersion({}, {});".format(cat[0], cat[1]))
Exemplo n.º 8
0
def main():
    arg_parser = argparse.ArgumentParser(
        description='PureData pddoc to pd patch converter')
    arg_parser.add_argument('--website',
                            '-w',
                            metavar='URL',
                            help='library website URL')
    arg_parser.add_argument('--license',
                            '-l',
                            metavar='license',
                            help='library license')
    arg_parser.add_argument('--version',
                            '-v',
                            metavar='version',
                            default='0.0',
                            help='library version')
    arg_parser.add_argument('--force',
                            '-f',
                            action='store_true',
                            help='force to overwrite existing file')
    arg_parser.add_argument('--xlet-db',
                            metavar='PATH',
                            action='append',
                            help='inlet/outlet database file paths',
                            default=[])
    arg_parser.add_argument('name',
                            metavar='PDDOC',
                            help="Documentation file in PDDOC(XML) format")
    arg_parser.add_argument('output',
                            metavar='OUTNAME',
                            nargs='?',
                            default='',
                            help="Pd output patch file name")

    args = vars(arg_parser.parse_args())
    in_file = args['name']
    output = args['output']

    # add input pddoc file dir to search path for abstractions
    PdObject.xlet_patch_finder.add_search_dir(os.path.dirname(in_file))

    if not output:
        output = os.path.splitext(os.path.basename(in_file))[0] + "-help.pd"

    if os.path.exists(output) and not args['force']:
        print(
            "Error: file already exists: '{0}'. Use --force flag to overwrite."
            .format(output))
        exit(1)

    add_xlet_db(args['xlet_db'])

    xml = parse_xml(in_file)

    if not xml:
        exit(1)

    factory.add_import('ceammc')

    pddoc = xml.getroot()
    for child_tag in pddoc:
        if child_tag.tag == "object":
            dobj = DocObject()
            dobj.from_xml(child_tag)

            x = XletDocVisitor()
            dobj.traverse(x)

            v = PdDocVisitor()

            if 'version' in args:
                v._version = args['version']

            if 'license' in args:
                v._license['name'] = args['license']

            if 'website' in args:
                v._website = args['website']

            dobj.traverse(v)

            patch_data = v.render()
            if not patch_data:
                print("convertion error")
                exit(1)

            with open(output, 'w') as f:
                f.write(patch_data)
Exemplo n.º 9
0
def main():
    arg_parser = argparse.ArgumentParser(description='PureData pddoc to pd patch converter')
    arg_parser.add_argument('--website', '-w', metavar='URL', help='library website URL')
    arg_parser.add_argument('--license', '-l', metavar='license', help='library license')
    arg_parser.add_argument('--version', '-v', metavar='version', default='0.0', help='library version')
    arg_parser.add_argument('--force', '-f', action='store_true', help='force to overwrite existing file')
    arg_parser.add_argument('--xlet-db', metavar='PATH', action='append',
                            help='inlet/outlet database file paths', default=[])
    arg_parser.add_argument('name', metavar='PDDOC', help="Documentation file in PDDOC(XML) format")
    arg_parser.add_argument('output', metavar='OUTNAME', nargs='?', default='',
                            help="Pd output patch file name")

    args = vars(arg_parser.parse_args())
    in_file = args['name']
    output = args['output']

    if not output:
        output = os.path.splitext(os.path.basename(in_file))[0] + "-help.pd"

    if os.path.exists(output) and not args['force']:
        print("Error: file already exists: '{0}'. Use --force flag to overwrite.".format(output))
        exit(1)

    add_xlet_db(args['xlet_db'])

    xml = parse_xml(in_file)

    if not xml:
        exit(1)

    factory.add_import('ceammc')

    pddoc = xml.getroot()
    for child_tag in pddoc:
        if child_tag.tag == "object":
            dobj = DocObject()
            dobj.from_xml(child_tag)

            x = XletDocVisitor()
            dobj.traverse(x)

            v = PdDocVisitor()

            if 'version' in args:
                v._version = args['version']

            if 'license' in args:
                v._license['name'] = args['license']

            if 'website' in args:
                v._website = args['website']

            dobj.traverse(v)

            patch_data = v.render()
            if not patch_data:
                print("convertion error")
                exit(1)

            with open(output, 'w') as f:
                f.write(patch_data)
Exemplo n.º 10
0
def main():
    fmt_list = ("png", "pdf", "svg", "pd")
    arg_parser = argparse.ArgumentParser(description='PureData ascii doc to Pd/PDF/SVG converter')
    arg_parser.add_argument('--auto', '-a', help='calculate output image size', action='store_true')
    arg_parser.add_argument('--format', '-f', metavar='FMT', nargs=1, choices=fmt_list,
                            help='output format ({0})'.format(",".join(fmt_list)), default=["pd"])
    arg_parser.add_argument('--width', '-wd', metavar='X', type=int, nargs=1,
                            help='image width in pixels', default=400)
    arg_parser.add_argument('--height', '-ht', metavar='X', type=int, nargs=1,
                            help='image height in pixels', default=300)
    arg_parser.add_argument('--xlet-db', metavar='PATH', action='append',
                            help='inlet/outlet database file path', default=[])
    arg_parser.add_argument('input', metavar='INPUT', help="Documentation file in pd ascii format")
    arg_parser.add_argument('output', metavar='OUTPUT', nargs='?', default='',
                            help="output file name")

    args = vars(arg_parser.parse_args())
    in_file = args['input']
    output = args['output']
    wd = args['width']
    ht = args['height']
    fmt = args['format'][0]

    if not os.path.exists(in_file):
        logging.error("File not exists: \"%s\"", in_file)
        exit(1)

    for db_path in args['xlet_db']:
        if not os.path.exists(db_path):
            logging.warning("xlet database file not found: '%s'. skipping...", db_path)
        else:
            PdObject.xlet_calculator.add_db(db_path)

    if not output:
        output = os.path.splitext(os.path.basename(in_file))[0] + "." + fmt

    factory.add_import('ceammc')

    p = Parser()
    p.parse_file(in_file)

    cnv = Canvas(0, 0, wd, ht)
    cnv.type = Canvas.TYPE_WINDOW
    p.export(cnv)

    if fmt in ('png', 'pdf', 'svg'):
        if args['auto']:
            br_calc = cnv.brect_calc()
            cnv.traverse(br_calc)
            bbox = br_calc.brect()
            wd = bbox[2] + Parser.X_PAD * 2
            ht = bbox[3] + Parser.Y_PAD * 2

        painter = CairoPainter(wd, ht, output, fmt)
        cnv.draw(painter)
    elif fmt == 'pd':
        pd_exporter = PdExporter()
        cnv.traverse(pd_exporter)
        pd_exporter.save(output)
    else:
        print("Unknown output format: {0:s}".format(fmt))
Exemplo n.º 11
0
def main():
    fmt_list = ("png", "pdf", "svg", "pd")
    arg_parser = argparse.ArgumentParser(
        description='PureData ascii doc to Pd/PDF/SVG converter')
    arg_parser.add_argument('--auto',
                            '-a',
                            help='calculate output image size',
                            action='store_true')
    arg_parser.add_argument('--format',
                            '-f',
                            metavar='FMT',
                            nargs=1,
                            choices=fmt_list,
                            help='output format ({0})'.format(
                                ",".join(fmt_list)),
                            default=["pd"])
    arg_parser.add_argument('--width',
                            '-wd',
                            metavar='X',
                            type=int,
                            nargs=1,
                            help='image width in pixels',
                            default=400)
    arg_parser.add_argument('--height',
                            '-ht',
                            metavar='X',
                            type=int,
                            nargs=1,
                            help='image height in pixels',
                            default=300)
    arg_parser.add_argument('--xlet-db',
                            metavar='PATH',
                            action='append',
                            help='inlet/outlet database file path',
                            default=[])
    arg_parser.add_argument('input',
                            metavar='INPUT',
                            help="Documentation file in pd ascii format")
    arg_parser.add_argument('output',
                            metavar='OUTPUT',
                            nargs='?',
                            default='',
                            help="output file name")

    args = vars(arg_parser.parse_args())
    in_file = args['input']
    output = args['output']
    wd = args['width']
    ht = args['height']
    fmt = args['format'][0]

    if not os.path.exists(in_file):
        logging.error("File not exists: \"%s\"", in_file)
        exit(1)

    for db_path in args['xlet_db']:
        if not os.path.exists(db_path):
            logging.warning("xlet database file not found: '%s'. skipping...",
                            db_path)
        else:
            PdObject.xlet_calculator.add_db(db_path)

    if not output:
        output = os.path.splitext(os.path.basename(in_file))[0] + "." + fmt

    factory.add_import('ceammc')

    p = Parser()
    p.parse_file(in_file)

    cnv = Canvas(0, 0, wd, ht)
    cnv.type = Canvas.TYPE_WINDOW
    p.export(cnv)

    if fmt in ('png', 'pdf', 'svg'):
        if args['auto']:
            br_calc = cnv.brect_calc()
            cnv.traverse(br_calc)
            bbox = br_calc.brect()
            wd = bbox[2] + Parser.X_PAD * 2
            ht = bbox[3] + Parser.Y_PAD * 2

        painter = CairoPainter(wd, ht, output, fmt)
        cnv.draw(painter)
    elif fmt == 'pd':
        pd_exporter = PdExporter()
        cnv.traverse(pd_exporter)
        pd_exporter.save(output)
    else:
        print("Unknown output format: {0:s}".format(fmt))