## 

MODULE_VERSION = 0.003
#BETA_VERSION = 01
UNICODE_VERSION = 5.1.0

UNICODEDATA = UnicodeData-$(UNICODE_VERSION).txt
LINEBREAK = LineBreak-$(UNICODE_VERSION).txt
EASTASIANWIDTH = EastAsianWidth-$(UNICODE_VERSION).txt
DATA_PM = ../lib/Unicode/LineBreak/Data.pm
CONSTANTS_PM = ../lib/Unicode/LineBreak/Constants.pm
RULES_PM = ../lib/Unicode/LineBreak/Rules.pm
VERSION_PM = ../lib/Unicode/LineBreak/Version.pm
META_YML = ../META.yml

all: $(DATA_PM) $(RULES_PM) $(VERSION_PM) $(CONSTANTS_PM)

$(DATA_PM): $(EASTASIANWIDTH) $(LINEBREAK) EastAsianWidth.custom LineBreak.custom map2pl.pl
	( \
	  echo '#-*- perl -*-'; \
	  echo ''; \
	  echo 'package Unicode::LineBreak;'; \
	  echo ''; \
	  echo '=encoding utf8'; \
	  echo ''; \
	  echo "This file is automatically generated.  DON'T EDIT THIS FILE MANUALLY."; \
	  echo ''; \
	  echo '=cut'; \
	  echo ''; \
	  perl map2pl.pl $(LINEBREAK) LineBreak.custom Constants.lb lb; \
	  perl map2pl.pl $(EASTASIANWIDTH) EastAsianWidth.custom Constants.ea ea; \
	  echo '1;' \
	) > $@

$(RULES_PM): Rules rules2pl.pl
	perl rules2pl.pl $< Constants.rules $(RULES_PM)

$(CONSTANTS_PM): $(DATA_PM) $(RULES_PM)
	( \
	  echo "=encoding utf8"; \
	  echo ""; \
	  echo "This file is automatically generated.  DON'T EDIT THIS FILE MANUALLY."; \
	  echo "";\
	  echo "=cut"; \
	  echo ""; \
	  echo "package Unicode::LineBreak;"; \
	  echo ""; \
	  cat Constants.rules Constants.lb Constants.ea; \
	  echo "1;"; \
	) > $@;

$(VERSION_PM): $(DATA_PM) $(RULES_PM) makefile
	VER=$(MODULE_VERSION); \
	[ -n "$(BETA_VERSION)" ] && VER=$${VER}_$(BETA_VERSION); \
	[ -z "$(BETA_VERSION)" ] && VER=$${VER}.`echo -n $(UNICODE_VERSION) | perl -pe 's/\.//g'`; \
	( \
	  echo '#-*- perl -*-'; \
	  echo ''; \
	  echo 'package Unicode::LineBreak;'; \
	  echo ''; \
          echo '=encoding utf8'; \
          echo ''; \
          echo "This file is automatically generated.  DON'T EDIT THIS FILE MANUALLY."; \
          echo ''; \
          echo '=cut'; \
          echo ''; \
	  echo 'our $$VERSION = '"'"$$VER"';"; \
	  echo 'our $$UNICODE_VERSION = '"'"$(UNICODE_VERSION)"';"; \
	  echo ''; \
	  echo '1;' \
	) > $@; \
	perl -i.bak -pe 's/^version:.+/version:             '$${VER}'/' $(META_YML)

EastAsianWidth.custom: $(UNICODEDATA) $(EASTASIANWIDTH)
	( \
	  echo '## Zero-width characters.'; \
	  perl -ne '@_=split(/;/,$$_); print "$$_[0];z # $$_[1]\n" if $$_[2]=~/M.|Cc|Cf|Zl|Zp/' $(UNICODEDATA); \
	  echo ''; \
	  echo '## Ambiguous width alphabetics.'; \
	  perl -ne '/# LATIN (CAPITAL|SMALL) (LETTER|LIGATURE)/ && s/;A /;AnLat / && print;' \
	  -e '/# GREEK (CAPITAL|SMALL) (LETTER|LIGATURE)/ && s/;A /;AnGre / && print;' \
	  -e '/# CYRILLIC (CAPITAL|SMALL) (LETTER|LIGATURE)/ && s/;A /;AnCyr / && print;' \
	  $(EASTASIANWIDTH); \
	) > $@

LineBreak.custom: $(UNICODEDATA) $(LINEBREAK)
	( \
	  echo '## SA characters optionally treated as CM (see UAX #14, 6.1 LB1)'; \
	  echo '## which has general category Mc or Mn.'; \
	  sed -ne 's/^\([^;]*\);SA .*/\1/p' $(LINEBREAK) | \
	  perl -ne 'BEGIN { while (<STDIN>) {chomp $$_; $$SA{$$_}=1} }' \
	  -e '@_=split(/;/);' \
	  -e 'if ($$SA{$$_[0]}) { if ($$_[2]=~/Mc|Mn/) { print "$$_[0];SAcm # $$_[1]\n" } else { print "$$_[0];SAal # $$_[1]\n" } }' \
	  $(UNICODEDATA); \
	  echo ''; \
	  echo '## NS characters optionally treated as ID.'; \
	  sed -ne '/LETTER SMALL/s/;NS /;NSidKana /p' \
	      -e '/PROLONGED SOUND MARK/s/;NS /;NSidLong /p' \
	      -e '/ITERATION MARK/s/;NS /;NSidIter /p' \
	      -e '/MASU MARK/s/;NS /;NSidMasu /p' \
	  $(LINEBREAK) \
	) > $@

clean:
	rm -f $(DATA_PM) Constants.* $(CONSTANTS_PM) $(RULES_PM) $(VERSION_PM)

