#
# ENVIRONMENTS
#
# XLATE_DEBUG:  Enable debug output
# XLATE_MAXLEN: Set maximum length for API call
# XLATE_USEAPI: Use API
# XLATE_UPDATE: Force update cache
#

#
# PARAMETER FILES
#   If the source file is acompanied with parameter files with 
#   following extension, they are used to override default parameters.
#
# .LANG:   Languages translated to
# .FORMAT: Format of output files
#

XLATE_FORMAT ?= xtxt cm
XLATE_ENGINE ?= deepl

ifeq ($(strip $(XLATE_FILES)),)
override XLATE_FILES := \
	$(filter-out README.%.md,\
	$(wildcard *.docx *.pptx *.txt *.md *.pm *.pod))
else
override XLATE_FILES := $(subst |||, ,$(XLATE_FILES))
endif

comma:=,
override XLATE_LANG := $(subst $(comma), ,$(XLATE_LANG))

# GNU Make treat strings containing double quotes differently on versions
define REMOVE_QUOTE
  override $1 := $$(subst ",,$$($1))
endef
$(foreach name,XLATE_LANG XLATE_FORMAT XLATE_FILES,\
	$(eval $(call REMOVE_QUOTE,$(name))))

define FOREACH
$(foreach file,$(XLATE_FILES),
$(foreach lang,$(or $(shell cat $(file).LANG 2> /dev/null),$(XLATE_LANG)),
$(foreach form,$(or $(shell cat $(file).FORMAT 2> /dev/null),$(XLATE_FORMAT)),
$(foreach ecnt,$(words $(or $(shell cat $(file).ENGINE 2> /dev/null),$(XLATE_ENGINE))),
$(foreach engn,$(or $(shell cat $(file).ENGINE 2> /dev/null),$(XLATE_ENGINE)),
$(call $1,$(lang),$(form),$(file),$(engn),$(ecnt))
)))))
endef

define ADD_TARGET
ifeq ($5,1)
  TARGET += $$(addsuffix .$1.$2,$$(basename $3))
else
  TARGET += $$(addsuffix .$4-$1.$2,$$(basename $3))
endif
endef
$(eval $(call FOREACH,ADD_TARGET))

ALL := $(TARGET)

ALL: $(ALL)

TEXTCONV := optex -Mtc cat
CONVERT += doc docx pptx xlsx
CONVERT += pdf
SRCEXT  = stxt
$(foreach ext,$(CONVERT),$(eval \
  %.$(SRCEXT): %.$(ext) ; $$(TEXTCONV) $$< > $$@ \
))

STXT = $(if $(findstring $(suffix $1),$(CONVERT:%=.%)),$(basename $1).$(SRCEXT))
TEMPFILES += $(foreach file,$(XLATE_FILES),$(call STXT,$(file)))

define DEFINE_RULE
ifeq ($5,1)
$(basename $3).$1.$2: $3 $(call STXT,$3)
	$$(XLATE) -e $4 -t $1 -o $2 $$< > $$@
else
$(basename $3).$4-$1.$2: $3 $(call STXT,$3)
	$$(XLATE) -e $4 -t $1 -o $2 $$< > $$@
endif
endef
$(eval $(call FOREACH,DEFINE_RULE))

XLATE = xlate \
	$(if $(XLATE_DEBUG),-d) \
	$(if $(XLATE_MAXLEN),-m$(XLATE_MAXLEN)) \
	$(if $(XLATE_USEAPI),-a) \
	$(if $(XLATE_UPDATE),-u)

.PHONY: clean
clean:
	rm -fr $(ALL) $(TEMPFILES)