CLASS zcl_abapgit_syntax_factory DEFINITION
  PUBLIC
  ABSTRACT
  CREATE PUBLIC .

  PUBLIC SECTION.

    CLASS-METHODS create
      IMPORTING
        !iv_filename       TYPE string
        !iv_hidden_chars   TYPE abap_bool DEFAULT abap_false
      RETURNING
        VALUE(ro_instance) TYPE REF TO zcl_abapgit_syntax_highlighter .
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_abapgit_syntax_factory IMPLEMENTATION.


  METHOD create.

    " Create instance of highighter dynamically dependent on syntax type
    IF iv_filename CP '*.abap'.
      ro_instance = NEW zcl_abapgit_syntax_abap( ).
    ELSEIF iv_filename CP '*.xml' OR iv_filename CP '*.html'.
      ro_instance = NEW zcl_abapgit_syntax_xml( ).
    ELSEIF iv_filename CP '*.css'.
      ro_instance = NEW zcl_abapgit_syntax_css( ).
    ELSEIF iv_filename CP '*.js'.
      ro_instance = NEW zcl_abapgit_syntax_js( ).
    ELSEIF iv_filename CP '*.json'.
      ro_instance = NEW zcl_abapgit_syntax_json( ).
    ELSEIF iv_filename CP '*.txt' OR iv_filename CP '*.ini'  OR iv_filename CP '*.text'.
      ro_instance = NEW zcl_abapgit_syntax_txt( ).
    ELSE.
      CLEAR ro_instance.
    ENDIF.

    IF ro_instance IS BOUND.
      ro_instance->set_hidden_chars( iv_hidden_chars ).
    ENDIF.
  ENDMETHOD.
ENDCLASS.
