Skip to content
Snippets Groups Projects
  1. Sep 06, 2023
    • Jonathan Schöbel's avatar
      Validator: implemented allowed tag-attribute combinations · 6be0d112
      Jonathan Schöbel authored
      The Validator can check if a attribute is allowed in a tag. It does so
      by associating allowed tags with attributes. This is done in that way,
      to support also attributes which are allowed for every tag (global
      attributes), but this is not yet supported. So some functions allow for
      NULL to be passed and some will still crash.
      
      The predicate SH_Validator_check_attr returns whether an attribute is
      allowed for a specific tag. If tag is NULL, it returns whether an attr
      is allowed at all, not whether it is allowed for every tag. For this
      another predicate will be provided, when this is to be implemented.
      
      The method SH_Validator_register_attr registers an tag-attr combination.
      Note, that it will automatically call SH_Validator_register_tag, if the
      tag doesn't exist. Later it will be possible, to set tag to NULL to
      register a global attribute, but for now the method will crash.
      
      The method SH_Validator_deregister_attr removes a tag-attr combination
      registered earlier. Note, that deregistering a non existent combination
      will result in an error. This behaviour is arguable and might be subject
      to change. When setting only tag to NULL, all tags for this attribute
      are deregistered. When setting only attr to NULL, all attrs for this tag
      are deregistered. This might suffer from problems, if this involves some
      attrs, that are global. Also this will use the internal method
      remove_tag_for_all_attrs, which has the problem, that it might fail
      partially. Normally when failing all functions revert the program to the
      same state, as it was before the call. This function however is
      different, as if it fails there might be some combinations, that haven't
      been removed, but others are already. Nevertheless, the validator is
      still in a valid state, so it is possible to call this function a second
      time, but it is not sure, which combinations are already deregistered.
      
      As the attrs also use the internal strings of the tags, it must be
      ensured, when a tag is deregistered, that all remaining references are
      removed, otherwise there would be dangling pointers. Note, that for this
      also remove_tag_for_all_attrs is used, so the method
      SH_Validator_deregister_tag suffers from the same problems listed above.
      Also if this internal method fails, the tag won't be removed at all.
      
      Furthermore, the tests for deregistering a tag are still missing.
      6be0d112
  2. Aug 16, 2023
    • Jonathan Schöbel's avatar
      Validator: deregister attr · 706f0d94
      Jonathan Schöbel authored
      A attribute can be deregistered by calling SH_Validator_deregister_attr.
      Note that deregistering an attr, that was never registered is considered
      an error, but this may change, as technically it is not registered
      afterwards and sometimes (i.e. for a blacklist) it might be preferable
      to ensure, that a specific attr is not registered, but it is not clear
      whether there should be an error or not.
      Also the deallocating of the data used for an attr was moved to an extra
      method, as this is needed in several locations and it might be subject
      to change.
      706f0d94
  3. Jul 27, 2023
  4. Jul 26, 2023
  5. Jul 24, 2023
    • Jonathan Schöbel's avatar
      Validator: added attrs · 6c391521
      Jonathan Schöbel authored
      The Validator also contains information about supported attrs. Currently
      they can't be initialized by a spec. Also it can only be queried whether
      an attr does exist at all and not whether it is supported in combination
      with a specific tag. The tests are missing.
      6c391521
  6. Jul 08, 2023
    • Jonathan Schöbel's avatar
      Validator: add initializer · 875cd8a3
      Jonathan Schöbel authored
      There is a method to add a set of tags to a validator on initialisation.
      First this removes a user application from the burden of maintaining the
      html spec and also is more performant, as a lot of tags are to be
      inserted at once, so there aren't multiple allocation calls.
      As the validator needs the tags to be in order, the tags must be sorted
      on insertion. Of course it would be easier for the code, if the tags
      were already in order, but first there could be easily a mistake and
      second sorting the tags by an algorithm allows the tags to be specified
      in a logically grouped and those more maintainable order.
      For the sorting, insertion sort is used. Of course it has a worse
      quadratic time complexity, but in a constructor, I wouldn't introduce
      the overhead of memory managment a heap- or mergesort would introduce
      and in-place sorting is also out, because the data lies in ro-memory.
      Thus I choose an algorithm with constant space complexity. Also the
      'long' running time is not so important, as the initilization only runs
      at startup once and the tags are not likely to exceed a few hundred so
      even a quadratic time isn't that bad.
      875cd8a3
  7. Jul 07, 2023
  8. Jul 05, 2023
  9. Jul 04, 2023
  10. Jul 02, 2023
  11. Jul 01, 2023
  12. Jun 29, 2023
  13. Jun 24, 2023
  14. Jun 21, 2023
  15. Jun 20, 2023
    • Jonathan Schöbel's avatar
      improved configure.ac · 28341acd
      Jonathan Schöbel authored
      Some adjustments suggested by autoupdate and autoscan were added.
      28341acd
    • Jonathan Schöbel's avatar
      Merge branch 'feature/polymorph-fragment' · f965156b
      Jonathan Schöbel authored
      The transition from a single fragment, which is a tree, to a polymorph
      fragment implemented by a base class (Fragment) and a subclass for
      storing the tree (NodeFragment) and another subclass for storing text
      (TextFragment) is now considered complete.
      What is still missing is the proper treatment of embed text. This should
      be indented and breaked at 72/79/80. Also newlines and special chars
      should be replaced on generation, maybe also giving some way of
      preventing XSS. Regarding the NodeFragment there should be some
      adjustments to further adjust the styling, which of course should also
      be reflected by TextFragment. This should also include the generation of
      self-closing tags. Furthermore the html generation should be based on a
      single text object, to which is added to. This will later on also enable
      to directly send generated parts over the network while still generating
      some data.
      But all this changes are to meant to change the behaviour of existing
      classes, so the will be eventually implemented on seperate branches.
      f965156b
  16. Jun 19, 2023
    • Jonathan Schöbel's avatar
      Fragment (base): added tests · 9acc29b4
      Jonathan Schöbel authored
      The html generation for both TextFragment and NodeFragment combined is
      tested. As the encoding semantics of the TextFragments are neither
      defined nor implemented, some tests are marked as XFAIL.
      9acc29b4
    • Jonathan Schöbel's avatar
      TextFragment: added text wrapper methods · 20b53be3
      Jonathan Schöbel authored
      Some basic text functionality is now directly supported via wrapper
      functions.
      
      Note that wrapper functions aren't tested in unit tests.
      20b53be3
    • Jonathan Schöbel's avatar
      TextFragment: added direct getter for text · 585b596a
      Jonathan Schöbel authored
      While this method is neccessary to manipulate the content of a
      TextFragment, the TextFragment should abstract the semantics of Text.
      While simple wrapper functions for appending are to be added, methods
      purely manipulating the text, i.e. relying on the text's contents, wont
      get wrapper functions. Thus this method is still needed until a more
      sophisticated approach is implemented.
      585b596a
    • Jonathan Schöbel's avatar
      ci: make jobs interruptible · d7c1c9fc
      Jonathan Schöbel authored
      d7c1c9fc
    • Jonathan Schöbel's avatar
      created ci rules to build and create a package on gitlab · a6528ca1
      Jonathan Schöbel authored
      There are seperate build, test and release stages. Also the resulting
      package is uploaded. To do that a special script was written to get the
      real name of the package, which autoconf inserts into the scripts on
      configure-time.
      a6528ca1
Loading