  
  [1X5 [33X[0;0YFrancy Core[133X[101X
  
  [33X[0;0YFrancy  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.[133X
  
  [33X[0;0YA  JSON  schema  is  present  and  can  be  used to produce clients for this
  package. [13XSee schema/francy.json[113X[133X
  
  [33X[0;0YTo  map  required  /  optional attributes from the schema into GAP code, the
  implementation follows the following criteria:[133X
  
  [30X    [33X[0;6YObject  creation  requests mandatory attributes, i.e. required with no
        default value, e.g. canvas:=Canvas("Title")[133X
  
  [30X    [33X[0;6YObject 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)[133X
  
  [30X    [33X[0;6YAttributes  associated with the object that can be set, .i.e. optional
        with       no       defaults,       e.g.      canvas:=Canvas("Title");
        SetTexTypesetting(canvas,true);[133X
  
  [33X[0;0YThe  API  follows a common convention and adding objects to other objects is
  done using Add(objectHolder,object)[133X
  
  [33X[0;0YAlthough  Francy  has  the  concept  of  a  [10XGraph[110X, it does not implement any
  Mathematics Graphs Theory.[133X
  
  [33X[0;0YPlease see Francy-JS for client implementation.[133X
  
  
  [1X5.1 [33X[0;0YCategories[133X[101X
  
  [33X[0;0YIn this section we show the Francy Core Categories.[133X
  
  [1X5.1-1 IsFrancyObject[101X
  
  [33X[1;0Y[29X[2XIsFrancyObject[102X( [3Xarg[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[10Xtrue[110X or [10Xfalse[110X[133X
  
  [33X[0;0YIdentifies all [10XObjects[110X in Francy.[133X
  
  [1X5.1-2 IsFrancyDefaultObject[101X
  
  [33X[1;0Y[29X[2XIsFrancyDefaultObject[102X( [3Xarg[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[10Xtrue[110X or [10Xfalse[110X[133X
  
  [33X[0;0YIdentifies all Default records in Francy.[133X
  
  [1X5.1-3 IsFrancyTypeObject[101X
  
  [33X[1;0Y[29X[2XIsFrancyTypeObject[102X( [3Xarg[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[10Xtrue[110X or [10Xfalse[110X[133X
  
  [33X[0;0YIdentifies all Type records in Francy.[133X
  
  
  [1X5.2 [33X[0;0YFamilies[133X[101X
  
  [33X[0;0YIn this section we show the Francy Core Families.[133X
  
  
  [1X5.3 [33X[0;0YGlobal[133X[101X
  
  [33X[0;0YIn this section we show the Francy Core Types[133X
  
  
  [1X5.4 [33X[0;0YAttributes[133X[101X
  
  [33X[0;0YIn this section we show the Francy Core Attributes[133X
  
  [1X5.4-1 FrancyId[101X
  
  [33X[1;0Y[29X[2XFrancyId[102X( [3Xarg[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Y[10XIsString[110X with the id of the object[133X
  
  [33X[0;0YAll Objects created in Francy have a generated identifier.[133X
  
  [1X5.4-2 FrancyId[101X
  
  [33X[1;0Y[29X[2XFrancyId[102X( [3Xarg1[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Y[10XIsString[110X with the id of the object[133X
  
  [33X[0;0YPrints the object unique identifier.[133X
  
  [1X5.4-3 SetFrancyId[101X
  
  [33X[1;0Y[29X[2XSetFrancyId[102X( [3Xo[103X, [3Xs[103X ) [32X function[133X
  
  [33X[0;0YUse  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![133X
  
