# Copyright (c) 2001-2013 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
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
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
