#  Makefile for Monafonts TTF
#  by 1@2ch, * public domain *  2002/3

TTFVERSION=2.21
SHINONOMEVERSION=0.9.8
DATESTAMP=`date +%Y%m%d`

# tools & perl libraries

TOOLS=../ttftools

PERL=perl -I$(TOOLS)
CAT=cat
SED=sed
SORT=sort
AWK=awk
RM=rm -f
CP=cp
ZIP=zip -r

TTFPACK=$(PERL) $(TOOLS)/ttfpack
COMMONCHARS=$(PERL) $(TOOLS)/commonchars
PICKCHARS=$(PERL) $(TOOLS)/pickchars
JIS2ASCII=$(PERL) $(TOOLS)/jis2ascii
JIS2SJIS=$(PERL) $(TOOLS)/jis2sjis
JIS2UNICODE=$(PERL) $(TOOLS)/jis2unicode
MAKE_CMAP=$(PERL) $(TOOLS)/make_cmap
MAKE_HEAD=$(PERL) $(TOOLS)/make_head
MAKE_HHEA=$(PERL) $(TOOLS)/make_hhea
MAKE_HMTX=$(PERL) $(TOOLS)/make_hmtx
MAKE_HDMX=$(PERL) $(TOOLS)/make_hdmx
MAKE_VHEA=$(PERL) $(TOOLS)/make_vhea
MAKE_VMTX=$(PERL) $(TOOLS)/make_vmtx
MAKE_MAXP=$(PERL) $(TOOLS)/make_maxp
MAKE_NAME=$(PERL) $(TOOLS)/make_name
MAKE_OS2=$(PERL) $(TOOLS)/make_OS_s2
MAKE_POST=$(PERL) $(TOOLS)/make_post
MAKE_EBLC=$(PERL) $(TOOLS)/make_EBLC
MAKE_EBDT=$(PERL) $(TOOLS)/make_EBDT
MAKE_EBSC=$(PERL) $(TOOLS)/make_EBSC
MAKE_LOCA_FAKE=$(PERL) $(TOOLS)/make_loca_fake
MKTESTSJIS=$(PERL) $(TOOLS)/mktestsjis
MKTESTUNICODE=$(PERL) $(TOOLS)/mktestunicode
GETUNIT=$(AWK) 'BEGIN{IGNORECASE=1} $$1~/^unitsperem$$/{print $$2}'
COUNTLINES=$(AWK) 'BEGIN{n=0} {n++} END{print n}'
REPEATFILE=$(PERL) $(TOOLS)/repeatfile
NUMGLYPHS_KLUDGE=$(AWK) '{print $$1+1}'

# bdf sources

BDFSRC=../src
SRCBITS12=$(BDFSRC)/monak12-base.bit $(BDFSRC)/monak12-ext.bit \
	  $(BDFSRC)/mona6x12.bit0 $(BDFSRC)/mona6x12r.bit1

SRCBITS14=$(BDFSRC)/monak14-base.bit $(BDFSRC)/monak14-ext.bit \
	  $(BDFSRC)/mona7x14.bit0 $(BDFSRC)/mona7x14r.bit1

SRCBITS16=$(BDFSRC)/monak16-base.bit $(BDFSRC)/monak16-ext.bit \
	  $(BDFSRC)/mona8x16.bit0 $(BDFSRC)/mona8x16r.bit1


###################################################

# targets

all: mona-mac.ttf mona-win.ttf

# utilities

clean:
	-$(RM) mona-mac.ttf mona-win.ttf *.zip *.bak *~ .*~ common.enc numglyphs \
		cmap-ascii.src cmap-sjis.src cmap-unicode.src \
		mona12.bit mona14.bit mona16.bit \
		mona12k.bit mona14k.bit mona16k.bit \
		$(TTFTABLES) test-sjis.html test-unicode.html

pack: mona-mac.ttf mona-win.ttf README-ttf.txt
	$(ZIP) monafonts-mac-$(TTFVERSION).zip README-ttf.txt mona-mac.ttf
	$(ZIP) monafonts-win-$(TTFVERSION).zip README-ttf.txt mona-win.ttf

# test

test: test-sjis.html test-unicode.html
test-sjis.html: cmap-sjis.src
	$(SORT) cmap-sjis.src | $(MKTESTSJIS) > test-sjis.html
test-unicode.html: cmap-unicode.src
	$(SORT) cmap-unicode.src | $(MKTESTUNICODE) > test-unicode.html


###################################################

# ttf definitions

TTFTABLES_COMMON=cmap head hhea hmtx hdmx maxp name OS_s2 post \
		 vhea vmtx EBLC EBDT EBSC 
TTFTABLES_MAC=
TTFTABLES_WIN=glyf loca cvt
TTFTABLES=$(TTFTABLES_COMMON) $(TTFTABLES_MAC) $(TTFTABLES_WIN)

mona-mac.ttf: $(TTFTABLES_COMMON) $(TTFTABLES_MAC)
	$(TTFPACK) 0x00010000 $(TTFTABLES_COMMON) $(TTFTABLES_MAC) > mona-mac.ttf
mona-win.ttf: $(TTFTABLES_COMMON) $(TTFTABLES_WIN)
	$(TTFPACK) 0x00010000 $(TTFTABLES_COMMON) $(TTFTABLES_WIN) > mona-win.ttf


# tables

# get common character encodings(jisx0208) in all point sizes
common.enc: $(SRCBITS12) $(SRCBITS14) $(SRCBITS16)
	$(COMMONCHARS) $(SRCBITS12) : $(SRCBITS14) : $(SRCBITS16) : > common.enc

# get number of glyphs
numglyphs: common.enc
	$(COUNTLINES) common.enc > numglyphs

# head (TTF HEADer) table
head: head.src
	$(MAKE_HEAD) head.src checkSumAdjustment=0 > head

# maxp (MAXimum Profile) table
maxp: maxp.src numglyphs
	$(MAKE_MAXP) maxp.src numGlyphs=`$(NUMGLYPHS_KLUDGE) numglyphs` > maxp

# OS/2 table
OS_s2: OS_s2.src
	$(MAKE_OS2) OS_s2.src > OS_s2

# post (POSTscript) table
post: post.src
	$(MAKE_POST) post.src > post

# name table
name: name.src
	$(SED) "s/@@VERSION@@/$(TTFVERSION)/g; \
		s/@@DATESTAMP@@/$(DATESTAMP)/g; \
		s/@@SHINONOMEVERSION@@/$(SHINONOMEVERSION)/g; " name.src | \
		$(MAKE_NAME) - > name

# hhea (Horizontal metrics table HEAder) table
hhea: hhea.src numglyphs
	$(MAKE_HHEA) hhea.src numberOfHMetrics=`$(CAT) numglyphs` > hhea

# hmtx (Horizontal MeTriX) table
hmtx: common.enc mona16.bit head.src
	$(MAKE_HMTX) mona16.bit 16 `$(GETUNIT) head.src` > hmtx

# hdmx (Horizontal Device MetriX) table
hdmx: mona12.bit mona14.bit mona16.bit
	$(MAKE_HDMX) `$(CAT) numglyphs` 12 mona12.bit 14 mona14.bit 16 mona16.bit > hdmx

# vhea (Vertical metrics table HEAder) table
vhea: vhea.src numglyphs
	$(MAKE_VHEA) vhea.src numberOfVMetrics=`$(CAT) numglyphs` > vhea

# vmtx (Vertical MeTriX) table
vmtx: common.enc mona16.bit head.src
	$(MAKE_VMTX) mona16.bit 16 `$(GETUNIT) head.src` > vmtx

# EBSC (Embedded Bitmap Scaling Control) table
EBSC: EBSC.src
	$(MAKE_EBSC) EBSC.src > EBSC

# unify all glyphs (defaultchar, jisx0201, jisx0208) into one file
mona12.bit: common.enc defaultchar.enc $(SRCBITS12)
	$(PICKCHARS) defaultchar.enc $(SRCBITS12) > mona12.bit
	$(PICKCHARS) common.enc $(SRCBITS12) >> mona12.bit

mona14.bit: common.enc defaultchar.enc $(SRCBITS14)
	$(PICKCHARS) defaultchar.enc $(SRCBITS14) > mona14.bit
	$(PICKCHARS) common.enc $(SRCBITS14) >> mona14.bit

mona16.bit: common.enc defaultchar.enc $(SRCBITS16)
	$(PICKCHARS) defaultchar.enc $(SRCBITS16) > mona16.bit
	$(PICKCHARS) common.enc $(SRCBITS16) >> mona16.bit

# EBLC (Embedded Bitmap LoCation) table
EBLC: mona12.bit mona14.bit mona16.bit
	$(MAKE_EBLC) 12 mona12.bit 14 mona14.bit 16 mona16.bit > EBLC

# EBDT (Embedded Bitmap DaTa) table
EBDT: mona12.bit mona14.bit mona16.bit
	$(MAKE_EBDT) mona12.bit mona14.bit mona16.bit > EBDT

# create ascii/sjis/unicode charmap from jisx0208 encodings
cmap-ascii.src: common.enc
	$(JIS2ASCII) common.enc > cmap-ascii.src
cmap-sjis.src: common.enc
	$(JIS2SJIS) common.enc > cmap-sjis.src
cmap-unicode.src: common.enc
	$(JIS2UNICODE) common.enc > cmap-unicode.src

# cmap (Character MAPping) table
# 0 1 0    0 (Format0, Macintosh, Roman,    English)
# 2 1 1    0 (Format2, Macintosh, Japanese, Japanese)
# 4 3 1 1041 (Format4, Microsoft, Unicode,  Japanese)
cmap: cmap-ascii.src cmap-sjis.src cmap-unicode.src
	$(MAKE_CMAP) cmap-ascii.src   0 1 0    0 \
		     cmap-sjis.src    2 1 1    0 \
		     cmap-unicode.src 4 3 1 1041 \
		> cmap

# glyf table - this table is dummy, just repeated identical glyph.
glyf: numglyphs glyf.src
	$(REPEATFILE) `$(CAT) numglyphs` glyf.src > glyf

# cvt (Control Value Table) - simply copying
cvt: cvt.src
	$(CP) cvt.src cvt

# loca (LOCAtion) table
loca: numglyphs glyf.src
	$(MAKE_LOCA_FAKE) `$(CAT) numglyphs` glyf.src > loca
