Removed all escaping from help system.
All checks were successful
Run test asserts / Test-Asserts (push) Successful in 5s

This commit is contained in:
Willem Cazander 2024-07-17 15:08:25 +02:00
parent c8416c42e9
commit a0141d962c
8 changed files with 80 additions and 42 deletions

View file

@ -1,44 +1,44 @@
MB_DOC_FIRE_VARIABLE_FLOW ?= \n
MB_DOC_FIRE_VARIABLE_FLOW ?= $(call mb-make-call,mb-make-space-newline)
#*** Recursive variable: MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_VARIABLE_FLOW,Flow builder of fire flow variable data.)
MB_DOC_FIRE_VARIABLE ?= \n
MB_DOC_FIRE_VARIABLE ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_VARIABLE,Flow builder of firemake variable data.)
MB_DOC_FIRE_VARIABLE_DEEP ?= \n
MB_DOC_FIRE_VARIABLE_DEEP ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_VARIABLE_DEEP,Flow builder of makefire deep variable data.)
MB_DOC_FIRE_VARIABLE_ROCK ?= \n
MB_DOC_FIRE_VARIABLE_ROCK ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_VARIABLE_ROCK,Flow builder of makefire rock variable data.)
MB_DOC_FIRE_VARIABLE_I18N ?= \n
MB_DOC_FIRE_VARIABLE_I18N ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_VARIABLE_I18N,Flow builder of makefire i18n variable data.)
MB_DOC_FIRE_FUNCTION ?= \n
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_FUNCTION,Flow builder of firemake function data.)
MB_DOC_FIRE_FUNCTION_DEEP ?= \n
MB_DOC_FIRE_FUNCTION_DEEP ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_FUNCTION_DEEP,Flow builder of firemake deep function data.)
MB_DOC_FIRE_FUNCTION_FLOW ?= \n
MB_DOC_FIRE_FUNCTION_FLOW ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_FUNCTION_FLOW,Flow builder of firemake flow function data.)
MB_DOC_FIRE_TARGET ?= \n
MB_DOC_FIRE_TARGET ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_TARGET,Flow builder of firemake target data.)
MB_DOC_FIRE_TARGET_DEEP ?= \n
MB_DOC_FIRE_TARGET_DEEP ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_TARGET_DEEP,Flow builder of firemake deep target data.)
MB_DOC_FIRE_TARGET_RUN ?= \n
MB_DOC_FIRE_TARGET_RUN ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_TARGET_RUN,Flow builder of firemake run target data.)
MB_DOC_FIRE_TARGET_MODULE ?= \n
MB_DOC_FIRE_TARGET_MODULE ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_TARGET_MODULE,Flow builder of firemake module target data.)
MB_DOC_FIRE_TARGET_ASSERT ?= \n
MB_DOC_FIRE_TARGET_ASSERT ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_TARGET_ASSERT,Flow builder of firemake assert target data.)
MB_DOC_FIRE_TARGET_HELP ?= \n
MB_DOC_FIRE_TARGET_HELP ?= $(call mb-make-call,mb-make-space-newline)
MB_DOC_FIRE_VARIABLE_FLOW += $(call mb-make-call,_mb-doc-variable4u-flow,MB_DOC_FIRE_TARGET_HELP,Flow builder of firemake help data.)
MB_DOC_XML_ROOT := firemake
@ -67,12 +67,17 @@ MB_DOC_FORMAT ?= txt
#MB_DOC_FIRE_VARIABLE_DEEP += $(call mb-make-call,_mb-doc-variable4u-deep,MB_DOC_FORMAT,Output format of documention$(MB_MAKE_COMMA) only 'txt' or 'xml' is supported.)
define _mb-doc-variable-txt
$(MB_   )* $(2)$(MB_MAKE_EQUALS)$(4)\n$(if $(3),\t$(3)\n)\n
$(MB_   )* $(2)$(MB_MAKE_EQUALS)$(4)$(call mb-make-call,mb-make-space-newline)$\
$(MB_      )$(if $(3),$(call mb-make-call,mb-make-space-tab)$(3)$(call mb-make-call,mb-make-space-newline))$\
$(MB_   )$(call mb-make-call,mb-make-space-newline)
endef
define _mb-doc-variable-xml
$(MB_   )\n\t$(call mb-make-call,mb-make-xml-open,variable,$(MB_DOC_XML_ATTR_NAME),$(2),$(MB_DOC_XML_ATTR_LEVEL),$(1))\n\t\t$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_VALUE),$(4))\n\t\t$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_DESC),$(3))\n\t$(call mb-make-call,mb-make-xml-close,variable)
$(MB_   )$(call mb-make-call,mb-make-space-newline)$\
$(MB_      )$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-open,variable,$(MB_DOC_XML_ATTR_NAME),$(2),$(MB_DOC_XML_ATTR_LEVEL),$(1))$(call mb-make-call,mb-make-space-newline)$\
$(MB_         )$(if $(4),$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_VALUE),$(4))$(call mb-make-call,mb-make-space-newline))$\
$(MB_         )$(if $(3),$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_DESC),$(3))$(call mb-make-call,mb-make-space-newline))$\
$(MB_      )$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-close,variable)
endef
define _mb-doc-variable4u-deep
$(MB_   )$(call mb-make-call,_mb-doc-variable-$(MB_DOC_FORMAT),deep,$(1),$(2),$($(1)))
@ -109,10 +114,15 @@ MB_DOC_FIRE_FUNCTION_DEEP += $(call mb-make-call,_mb-doc-function4u-deep,mb-doc-
define _mb-doc-function-txt
$(MB_   )* $(2) $(if $(4),$(MB_MAKE_EQUALS) $(4))$(if $(3),\n\t$(3)\n)\n
$(MB_   )* $(2) $(if $(4),$(MB_MAKE_EQUALS) $(4))$(if $(3),$(call mb-make-call,mb-make-space-newline)$(call mb-make-call,mb-make-space-tab)$(3)$(call mb-make-call,mb-make-space-newline))$\
$(MB_   )$(call mb-make-call,mb-make-space-newline)
endef
define _mb-doc-function-xml
$(MB_   )\n\t$(call mb-make-call,mb-make-xml-open,function,$(MB_DOC_XML_ATTR_NAME),$(2),$(MB_DOC_XML_ATTR_LEVEL),$(1))\n\t\t$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_ARGS),$(4))\n\t\t$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_DESC),$(3))\n\t$(call mb-make-call,mb-make-xml-close,function)
$(MB_   )$(call mb-make-call,mb-make-space-newline)$\
$(MB_      )$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-open,function,$(MB_DOC_XML_ATTR_NAME),$(2),$(MB_DOC_XML_ATTR_LEVEL),$(1))$(call mb-make-call,mb-make-space-newline)$\
$(MB_         )$(if $(4),$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_ARGS),$(4))$(call mb-make-call,mb-make-space-newline))$\
$(MB_         )$(if $(3),$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_DESC),$(3))$(call mb-make-call,mb-make-space-newline))$\
$(MB_      )$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-close,function)
endef
define _mb-doc-function4u-deep
$(MB_   )$(call mb-make-call,_mb-doc-function-$(MB_DOC_FORMAT),deep,$(1),$(2),$(3))
@ -135,11 +145,16 @@ MB_DOC_FIRE_FUNCTION_DEEP += $(call mb-make-call,_mb-doc-function4u-deep,mb-doc-
define _mb-doc-target-txt
$(MB_   )* $(2)$(if $(3),\n\t$(3))\n\n
$(MB_   )* $(2)$(if $(3),$(call mb-make-call,mb-make-space-newline)$(call mb-make-call,mb-make-space-tab)$(3))$(call mb-make-call,mb-make-space-newline)$\
$(MB_   )$(call mb-make-call,mb-make-space-newline)
endef
define _mb-doc-target-xml
$(MB_   )\n\t$(call mb-make-call,mb-make-xml-open,target,$(MB_DOC_XML_ATTR_NAME),$(2),$(MB_DOC_XML_ATTR_LEVEL),$(1))$(if $3,\n\t\t$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_DESC),$(3))\n\t$(call mb-make-call,mb-make-xml-close,target),\n\t$(call mb-make-call,mb-make-xml-close,target))
$(MB_   )$(call mb-make-call,mb-make-space-newline)$\
$(MB_      )$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-open,target,$(MB_DOC_XML_ATTR_NAME),$(2),$(MB_DOC_XML_ATTR_LEVEL),$(1))$(call mb-make-call,mb-make-space-newline)$\
$(MB_         )$(if $(3),$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-tag-value,$(MB_DOC_XML_TAG_DESC),$(3))$(call mb-make-call,mb-make-space-newline))$\
$(MB_      )$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-close,target)
endef
# $(MB_         )$(call mb-make-call,mb-make-space-tab)$(call mb-make-call,mb-make-xml-close,target),$(call mb-make-call,mb-make-space-newline)
define mb-doc-target
$(MB_   )$(eval MB_DOC_FIRE_TARGET += $$(call mb-make-call,_mb-doc-target-$$(MB_DOC_FORMAT),build,$(1),$(2)))
endef

View file

@ -2,9 +2,6 @@
MB_MAKE_COMMA := ,
$(call mb-make-call,mb-doc-variable-rock,MB_MAKE_COMMA,Expanded special char; comma.)
MB_MAKE_SPACE := $(subst ,, )
$(call mb-make-call,mb-doc-variable-rock,MB_MAKE_SPACE,Expanded special char; space.)
MB_MAKE_EQUALS := =
$(call mb-make-call,mb-doc-variable-rock,MB_MAKE_EQUALS,Expanded special char; equals.)
@ -27,18 +24,6 @@ endef
$(call mb-make-call,mb-doc-function-deep,mb-make-flag-phony,Marks an target as phony.,<target>)
define mb-make-newline
endef
$(call mb-make-call,mb-doc-function-deep,mb-make-newline,Prints a newline character.)
define mb-make-space2comma
$(MB_   )$(subst $(MB_MAKE_SPACE),$(MB_MAKE_COMMA),$1)
endef
$(call mb-make-call,mb-doc-function-deep,mb-make-space2comma,Replaces all spaces witth comma's.)
define mb-make-wildcard-treewalker
$(MB_   )$(foreach _dir,$(wildcard $(1)*),$(call mb-make-wildcard-treewalker,$(_dir)/,$(2)) $(filter $(subst *,%,$(2)),$(_dir)))
endef

View file

@ -0,0 +1,25 @@
define mb-make-space-newline
$(MB_   )
$(MB_   )
endef
$(call mb-make-call,mb-doc-function-deep,mb-make-space-newline,Prints a newline character.)
define mb-make-space-tab
$(MB_   ) $(MB_ )
endef
$(call mb-make-call,mb-doc-function-deep,mb-make-space-tab,Prints a tab character.)
define mb-make-space-white
$(MB_   )$(subst ,, )
endef
$(call mb-make-call,mb-doc-function-deep,mb-make-space-white,Prints a white space character.)
define mb-make-space-white-to-comma
$(MB_   )$(subst $(call mb-make-call,mb-make-space-white),$(MB_MAKE_COMMA),$1)
endef
$(call mb-make-call,mb-doc-function-deep,mb-make-space-white-to-comma,Replaces all spaces with comma's.,<input>)

View file

@ -16,7 +16,10 @@ define _escape-xml-attr
$(MB_   )$(subst ',&apos;,$(subst ",&quote;,$(subst &,&amp;,$(subst <,&lt;,$(subst >,&gt;,$(subst $(MB_MAKE_XML_CDATA_START),,$(subst $(MB_MAKE_XML_CDATA_END),,$(1))))))))
endef
define mb-make-xml-open
$(MB_   )$(MB_MAKE_XML_LT)$(1)$(if $(2), $(2)$(MB_MAKE_EQUALS)"$(call mb-make-call,_escape-xml-attr,$(3))")$(if $(4), $(4)$(MB_MAKE_EQUALS)"$(call mb-make-call,_escape-xml-attr,$(5))")$(MB_MAKE_XML_GT)
$(MB_   )$(MB_MAKE_XML_LT)$(1)$\
$(MB_    )$(if $(2), $(2)$(MB_MAKE_EQUALS)"$(call mb-make-call,_escape-xml-attr,$(3))")$\
$(MB_    )$(if $(4), $(4)$(MB_MAKE_EQUALS)"$(call mb-make-call,_escape-xml-attr,$(5))")$\
$(MB_   )$(MB_MAKE_XML_GT)
endef
$(call mb-make-call,mb-doc-function-deep,mb-make-xml-open,Print xml open tag.,<tag> [attr1-name] [attr1-value] [attr2-name] [attr2-value])
@ -31,7 +34,9 @@ define _escape-xml-value
$(MB_   )$(subst $(MB_MAKE_XML_CDATA_START),,$(subst $(MB_MAKE_XML_CDATA_END),,$(1)))
endef
define mb-make-xml-value
$(MB_   )$(MB_MAKE_XML_CDATA_START)$(call mb-make-call,_escape-xml-value,$(1))$(MB_MAKE_XML_CDATA_END)
$(MB_   )$(MB_MAKE_XML_CDATA_START)$\
$(MB_    )$(call mb-make-call,_escape-xml-value,$(1))$\
$(MB_   )$(MB_MAKE_XML_CDATA_END)
endef
$(call mb-make-call,mb-doc-function-deep,mb-make-xml-value,Print xml value in cdata wrapper.,<value>)

View file

@ -16,4 +16,11 @@ MB_           :=
MB_            :=
MB_             :=
MB_              :=
MB_               :=
MB_                :=
MB_                 :=
MB_                  :=
# Defines the real white space " " variable for line wrapping without white space
$(eval $$(subst ,, ) :=)

View file

@ -161,8 +161,8 @@ $(MB_   )$(if $(wildcard $(1)/utils),$(call mb-make-call,_mb-auto
$(MB_   )$(if $(filter on,$(MB_AUTOEXEC_SHOW_HOST)),$(call mb-make-call,mb-autoexec-append-cmd,$(1),omsxctl boot_exec_show_host))
$(MB_   )$(if $(MB_AUTOEXEC_STARTUP_NOTE),$(call mb-make-call,mb-autoexec-append-echo,$(1),mb::note $(MB_AUTOEXEC_STARTUP_NOTE)))
$(MB_   )$(if $(filter on,$(MB_FLIGHT_VIDEO)),$(call mb-make-call,mb-autoexec-append-save-video,$(1)))
$(MB_   )echo -n -e "$(subst $(MB_MAKE_SPACE)set,set,$(foreach var,$(MB_AUTOEXEC_EMBED_VARS),set MSX_$(var)$(MB_MAKE_EQUALS)$($(var))\r\n))" >> $(1)/autoexec.bat
$(MB_   )echo -n -e "$(subst $(MB_MAKE_SPACE)set,set,$(foreach var,$(MB_AUTOEXEC_EMBED_VARS),echo MSX_$(var)$(MB_MAKE_EQUALS)%MSX_$(var)%\r\n))" >> $(1)/autoexec.bat
$(MB_   )echo -n -e "$(subst $(call mb-make-call,mb-make-space-white)set,set,$(foreach var,$(MB_AUTOEXEC_EMBED_VARS),set MSX_$(var)$(MB_MAKE_EQUALS)$($(var))\r\n))" >> $(1)/autoexec.bat
$(MB_   )echo -n -e "$(subst $(call mb-make-call,mb-make-space-white)set,set,$(foreach var,$(MB_AUTOEXEC_EMBED_VARS),echo MSX_$(var)$(MB_MAKE_EQUALS)%MSX_$(var)%\r\n))" >> $(1)/autoexec.bat
$(MB_   )$(call mb-make-call,mb-autoexec-append-cmd,$(1),set TIME$(MB_MAKE_EQUALS)$(MB_AUTOEXEC_TIME_FORMAT))
$(MB_   )$(call mb-make-call,mb-autoexec-append-cmd,$(1),set DATE$(MB_MAKE_EQUALS)$(MB_AUTOEXEC_DATE_FORMAT))
$(MB_   )$(if $(filter on,$(MB_AUTOEXEC_SHOW_PATH)),$(call mb-make-call,mb-autoexec-append-cmd,$(1),echo mb::path %PATH%))
@ -173,7 +173,7 @@ $(MB_   )$(call mb-make-call,mb-autoexec-append-cmd,$(1),set MB_S
$(MB_   )$(call mb-make-call,mb-autoexec-append-cmd,$(1),set MB_TARGET$(MB_MAKE_EQUALS)$@)
$(MB_   )$(if $(filter on,$(MB_AUTOEXEC_SHOW_FOLDER)),$(call mb-make-call,mb-autoexec-append-echo,$(1),mb::bath %MB_SLIME%))
$(MB_   )$(if $(filter on,$(MB_AUTOEXEC_SHOW_TARGET)),$(call mb-make-call,mb-autoexec-append-echo,$(1),mb::pipe %MB_TARGET%))
$(MB_   )$(if $(filter on,$(MB_AUTOEXEC_PROMPT_SPACE)),$(call mb-make-call,mb-autoexec-append-cmd,$(1),set PROMPT \"$(value MB_AUTOEXEC_PROMPT_FORMAT)$(MB_MAKE_SPACE)\"))
$(MB_   )$(if $(filter on,$(MB_AUTOEXEC_PROMPT_SPACE)),$(call mb-make-call,mb-autoexec-append-cmd,$(1),set PROMPT \"$(value MB_AUTOEXEC_PROMPT_FORMAT)$(call mb-make-call,mb-make-space-white)\"))
$(MB_   )$(if $(filter on,$(MB_AUTOEXEC_PROMPT_SPACE)),,$(call mb-make-call,mb-autoexec-append-cmd,$(1),,set PROMPT \"$(value MB_AUTOEXEC_PROMPT_FORMAT)\"))
endef
$(call mb-make-call,mb-doc-function,mb-autoexec-write-default,Write a default autoexec.bat file.,<dir> [fg-color] [bg-color])

View file

@ -7,7 +7,7 @@ $(call mb-make-call,mb-doc-variable-rock,MB_FLOW_HELP_TEMP,Temp file to output h
define _mb-flow-print-help
$(MB_   )@echo -e "$(2)"
$(MB_   )$(file >$(MB_FLOW_HELP_TEMP),$($(1)))
$(MB_   )@cat $(MB_FLOW_HELP_TEMP) | sed 's/\\n/\n/g' | sed 's/\\t/\t/g'
$(MB_   )@cat $(MB_FLOW_HELP_TEMP)
$(MB_   )$(call mb-make-call,mb-os-file-delete,$(MB_FLOW_HELP_TEMP))
endef
@ -117,7 +117,7 @@ $(MB_@RECIPE)$$(file >>$(MB_FLOW_HELP_TEMP),$$(MB_DOC_FIRE_TARGET_MODULE))
$(MB_@RECIPE)$$(file >>$(MB_FLOW_HELP_TEMP),$$(MB_DOC_FIRE_TARGET_ASSERT))
$(MB_@RECIPE)$$(file >>$(MB_FLOW_HELP_TEMP),$$(MB_DOC_FIRE_TARGET_HELP))
$(MB_@RECIPE)$$(file >>$(MB_FLOW_HELP_TEMP),$$(call mb-make-call,mb-make-xml-close,$$(MB_DOC_XML_ROOT)))
$(MB_@RECIPE)@cat $$(MB_FLOW_HELP_TEMP) | sed 's/\\n/\n/g' | sed 's/\\t/\t/g'
$(MB_@RECIPE)@cat $$(MB_FLOW_HELP_TEMP)
$(MB_@RECIPE)$$(call mb-make-call,mb-os-file-delete,$$(MB_FLOW_HELP_TEMP))
$(MB_   )$$(call mb-make-call,mb-doc-target-help,@help-firemake,Output all documention in XML for IDE integration.)
$(MB_   )$$(call mb-make-call,mb-make-target-phony,@help-firemake)

View file

@ -45,6 +45,7 @@ $(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_doc.mk))
$(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_call.mk))
$(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_check.mk))
$(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_module.mk))
$(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_space.mk))
$(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make_xml.mk))
$(eval $(call __mb-include,make/सिस्टमₚᵣₐᵧToੴ/mb_make.mk))
@@include-libs:: $(MB_@INCLUDE_CHAIN)