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