Francy Core

Francy is responsible for generating JSON metadata which allows external tools / libraries / frameworks to add a visual representation. This JSON representation defines the contract between this package (server) and a GUI framework (client), this enables complete SoC (Separation of Concerns). Francy can be used to provide a graphical interactive environment on existing GAP packages.

A JSON schema is present and can be used to produce clients for this package. See schema/francy.json

To map required / optional attributes from the schema into GAP code, the implementation follows the following criteria: Object creation requests mandatory attributes, i.e. required with no default value, e.g. canvas:=Canvas("Title") Object creation accepts an object of defaults, i.e. default values for mandatory fields but that might repeat througout the creation of multiple similar objects, e.g. defaults:=DefaultCanvas; defaults!.zoomToFit:=false; canvas:=Canvas("Title",defaults); Where DefaultCanvas contains defaults for width (800) and height (600) Attributes associated with the object that can be set, .i.e. optional with no defaults, e.g. canvas:=Canvas("Title"); SetTexTypesetting(canvas,true); The API follows a common convention and adding objects to other objects is done using Add(objectHolder,object)

Although Francy has the concept of a Graph, it does not implement any Mathematics Graphs Theory.

Please see Francy-JS for client implementation.
Categories In this section we show the Francy Core Categories. true or false Identifies all Objects in Francy. true or false Identifies all Default records in Francy. true or false Identifies all Type records in Francy.
Families In this section we show the Francy Core Families.
Global In this section we show the Francy Core Types
Attributes In this section we show the Francy Core Attributes IsString with the id of the object All Objects created in Francy have a generated identifier. IsString with the id of the object Prints the object unique identifier. Use with care! Changing the unique ID might be useful in certain cases, but bare in mind it might cause unexpected behavior if you're not sure about!