17.11.2013 15:53, Yakov Goldberg kirjoitti: > Hi all :) > > I'd like to start new thread on discussion of Eo format. > > Short memo about a project: > The idea is that each Eo class is represented into a .eo file. These > files are manually modified to add new functions, comments, callbacks... > and parsed and the generation phase updates the C/H files. > > They contain descriptions of inherited classes, properties, methods, > base classes implemented functions and callbacks. > > Some explanations: > "name" - class name from Eo class description. We check that it is unique. > "inherits" - names of parent classes > "constructors" - (actually it is a method, just put it into separate > section). Here you will meet only custom constructors. > > Properties. > Property can be set/get; only set, only get; this is saved in "type" > field: "rw"(or no tag), "ro", "wo".
Have you thought about adding another level of nesting with set and get members? This way you could make them optional and wouldn't need that type field: ... "properties": { "size_hint_max": { "set": { "comment": "Sets the hints for an object's maximum size.", "legacy_override": "evas_object_size_hint_max_set" }, "get": { "comment": "Retrieves the hints for an object's maximum size.", "legacy_override": "evas_object_size_hint_max_get" }, "parameters": [ {"w" : ["Evas_Coord", "comment"]}, {"h" : ["Evas_Coord", "comment"]} ] }, "below": { "get": { "comment": "Get the Evas object stacked right below the object", "legacy_override": "evas_object_below_get" }, "parameters": [ {"ret" : ["Evas_Object*", "comment"]}, ] } ... Another suggestion is to make legacy_override apply the whole class as a prefix: { "name": "Evas_Image", "legacy_prefix": "evas_object_image", ... You could have the individual legacy overrides for cases where legacy property/method name does not follow the naming in Eo API, in cases where there is no legacy prop/method you could have an empty string as override, or maybe a bool value: "legacy": false In the Python bindings we've also got "deleters" for properties; for example when user calls del(list.children) it's the same as calling clear() on the list. Would you consider having these deleters in Eo metadata as well? > Methods: the same as properties, but with direction of parameter. > > Implements: list of overridden functions: > ["class name" , "func_name"] > Sometimes, if there will be name clash between property and method, user will > have to add 3rd paremeter "func_type": > ["class name" , "method_name", "method_type"] Why is this third parameter needed? Wouldn't it be easier to forbid clashing properties/methods and have a cleanly overriding inheritance? > > > Example. > http://pastebin.com/u9DPnmK2 > > Some issue. > One of the main task is to generate legacy functions. But not every Eo > function has a legacy. So we have to add > "legacy"("legacy_override") flag into JSON. Moreover there are cases > when we need to specify legacy func's name. > > Example: Eo class name is "Evas_Image". It has a method "source_set". > (This is not a property, because it returns some value) > To generate legacy we take class name and method name, so we will get > "evas_image_source_set", while real name is "evas_object_image_source_set" > Thus, as soon as we have to keep "legacy" flag, we can keep full name of > legacy method. > > { > "name": "Evas_Image", > "inherits": ["Evas_Object"], > "methods" : { > "source_set": { > "comment": "Set the source object on an image object.", > "return_type": "Eina_Bool", > "legacy_override": "evas_object_image_source_set", > "parameters": { > "in" : [ > {"src" : ["Evas_Object*", "comment"]} > ] > } > }, > } > } > > > - In case of properties, we need to keep "legacy_set", "legacy_get". > Initial generation will be automatic, nevertheless we'll have to check > everything manually. > - Description of parameters: {"name" : ["type", "comment"]}; for > methods additional sections "in" "out" must be added. > > - implements section can be moved into methods and properties sections. > It can look more consistent, but requires one more nested level. > "methods" : > { "realizes" : { > "source_set" : { > } > }, > "implements" : [ > ["Evas_Smart", "resize"] > ] > } > > - implements section should have description of event being sent > "implements": [ > ["Evas_Smart", "resize", {"int", "int", "char *"}], > ] > ======================================================== > ======================================================== > Another solution is to write C-styled eo file. Which requires another > parser. > http://pastebin.com/stycZmKV > This is very first version, after which we switched to JSON, so it > doesn't have many fields. > > So advantages and drawbacks: > - C-styled file is more compact > > - JSON is more flexible and scalable (we already require several helping > tags and different comments for _set/_get properties) > and also some reference between functions(for documentation) need to > be added. > - easier to support versioning > - 3rd party parsers can be used. > but requires to keep JSON structure - that means quotes and brackets. Have you looked into YAML? https://en.wikipedia.org/wiki/YAML It has similar features to JSON while being more compact. If the choice is between C-like syntax and JSON, I'll go with JSON as it's easier to create a forward compatible parser/lexer for it, and because of the reasons you mentioned above. But this should not depend on a single round of voting, we should strive to find a syntax and structure which serves all our relevant needs and is easy to work with. P.S. I am interested to work on the language bindings aspect of this after 1.8 Python bindings are released. > > Mixing them is not good idea. > > I'll be glad to hear your comments. > > Yakov > > > > > > > > > ------------------------------------------------------------------------------ > DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps > OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access > Free app hosting. Or install the open source package on any LAMP server. > Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native! > http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > ------------------------------------------------------------------------------ Shape the Mobile Experience: Free Subscription Software experts and developers: Be at the forefront of tech innovation. Intel(R) Software Adrenaline delivers strategic insight and game-changing conversations that shape the rapidly evolving mobile landscape. Sign up now. http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel