# Copyright (c) 2001-2015 International Business Machines
# Corporation and others. All Rights Reserved.
# Begin temporary addition.
# These are very bad "C" APIs that do not work with a C compiler and
# violate many ICU coding guidelines. These were added with ticket #5996.
# Temporarily marked as C++ for the hdrtst to pass.
# These are gone in ICU 50.1, remove
#vzone.h
#zrule.h
#ztrans.h
# End temporary addition.
# common & i18n
alphaindex.h
appendable.h
bidi.h
basictz.h
bmsearch.h
brkiter.h
bytestream.h
bytestrie.h
bytestriebuilder.h
calendar.h
caniter.h
chariter.h
choicfmt.h
coleitr.h
coll.h
colldata.h
convert.h
cpdtrans.h
curramt.h
currunit.h
currpinf.h
datefmt.h
dbbi.h
dcfmtsym.h
decimfmt.h
dtintrv.h
dtitvinf.h
dtitvfmt.h
dtfmtsym.h
dtptngen.h
dtrule.h
enumset.h
errorcode.h
fieldpos.h
filteredbrk.h
fmtable.h
format.h
fpositer.h
gender.h
gregocal.h
idna.h
listformatter.h
locdspnm.h
locid.h
measfmt.h
measunit.h
measure.h
messagepattern.h
msgfmt.h
normalizer2.h
normlzr.h
numfmt.h
numsys.h
parsepos.h
plurfmt.h
plurrule.h
rbbi.h
rbnf.h
rbtz.h
regex.h
region.h
rep.h
resbund.h
schriter.h
scientificformathelper.h
scientificnumberformatter.h
search.h
selfmt.h
simpletz.h
smpdtfmt.h
sortkey.h
std_string.h
strenum.h
stringtriebuilder.h
stringpiece.h
stsearch.h
symtable.h
tblcoll.h
timezone.h
tmunit.h
tmutamt.h
tmutfmt.h
translit.h
tzfmt.h
tznames.h
tzrule.h
tztrans.h
ucharstrie.h
ucharstriebuilder.h
uchriter.h
unifilt.h
unifunct.h
unimatch.h
unirepl.h
uniset.h
unistr.h
uobject.h
usetiter.h
vtzone.h
# io library
ustream.h
# layout & layoutex
LayoutEngine.h
LEFontInstance.h
LEGlyphFilter.h
LEGlyphStorage.h
LELanguages.h
LEScripts.h
LESwaps.h
# LETypes.h -- C header
# loengine.h -- C header
ParagraphLayout.h
RunArrays.h
