ICU

From Apache OpenOffice Wiki
Revision as of 12:33, 1 September 2006 by ErAck (Talk | contribs)

Jump to: navigation, search

The International Components for Unicode or ICU is an external library originally developed by IBM, available at http://icu.sourceforge.net/. OOo uses the C libraries ICU4C (there is also a set of Java libraries ICU4J available) for glyph layout in CTL languages, Unicode algorithms like collation, break iterators for word boundaries, and calendar systems.

OOo up to version 2.0.4 uses ICU 2.6, which is quite old by now and is heavily patched to suit OOo's needs. Most patches are available later in one of the upstream versions. Some patches are only relevant in the OOo environment and won't make it upstream. ICU 3.6 beta includes most of the patches OOo applied. Upgrade to ICU 3.6 is ongoing in CWS icuupgrade

Most functionality is encapsulated in the i18npool module and should be accessed using the ::com::sun::star::i18n::* UNO API only, just little source code uses ICU functionality directly for glyph layout, where necessary. Please do not add further dependencies, if possible. As of CWS icuupgrade resynced to SRC680_m181 the dependent source files that have to be touched and built when upgrading to a newer ICU version, apart from the entire module module i18npool, were:

Note the two NOTEs interspersed, or Windows won't build!

# 2006-08-11T15:22+0200 as of CWS 'icuupgrade' resynced to SRC680_m181
#
# Dependencies on ICU.
# Plus, of course, i18npool.
# The scp2 files depend on icuversion.mk.
#
# Module 'proximity' may use ICU if enabled PROX_PUNI_USE_ICU or REQUIRE_ICU_LIBRARY in
# proximity/inc/punicfg.h
# or (makefile) environment, which currently is not the case.
#
# touch these files, assuming this list is in ~/devbase/icu/these_use_icu.txt:
# touch `grep -v '^#' ~/devbase/icu/these_use_icu.txt | sed -e 's/\([^:]*\):.*/\1/'`
#
forms/source/xforms/warnings_guard_unicode_regex.h:51:#include <unicode/regex.h>
linguistic/source/hhconvdic.cxx:37:#include <external/unicode/uscript.h>
svtools/source/edit/texteng.cxx:96:#include <unicode/ubidi.h>
svx/source/editeng/impedit2.cxx:115:#include <unicode/ubidi.h>
svx/source/outliner/outliner.cxx:107:#include <unicode/ubidi.h>
sw/source/core/text/frmcrsr.cxx:74:#include <unicode/ubidi.h>
sw/source/core/text/porfld.cxx:119:#include <unicode/ubidi.h>
sw/source/core/text/porlay.cxx:113:#include <unicode/ubidi.h>
sw/source/filter/ww8/writerwordglue.cxx:55:#include <unicode/ubidi.h>          //ubidi_getLogicalRun
sw/source/filter/ww8/writerwordglue.cxx:55:#include <unicode/ubidi.h>          //ubidi_getLogicalRun
vcl/source/gdi/sallayout.cxx:74:#include <unicode/ubidi.h>
vcl/source/gdi/sallayout.cxx:75:#include <unicode/uchar.h>
vcl/source/glyphs/gcach_layout.cxx:176:#include <layout/LayoutEngine.h>
vcl/source/glyphs/gcach_layout.cxx:177:#include <layout/LEFontInstance.h>
vcl/source/glyphs/gcach_layout.cxx:178:#include <layout/LEScripts.h>
vcl/source/glyphs/gcach_layout.cxx:185:#include <unicode/uscript.h>
vcl/source/glyphs/gcach_layout.cxx:186:#include <unicode/ubidi.h>
#
binfilter/bf_svx/source/editeng/svx_impedit2.cxx:149:#include <unicode/ubidi.h>
binfilter/bf_svx/source/outliner/svx_outliner.cxx:107:#include <unicode/ubidi.h>
binfilter/bf_sw/source/core/text/sw_frmcrsr.cxx:78:#include <unicode/ubidi.h>
binfilter/bf_sw/source/core/text/sw_porlay.cxx:94:#include <unicode/ubidi.h>
binfilter/bf_sw/source/filter/ww8/sw_wrtw8nds.cxx:60:#include <unicode/ubidi.h>
#
#proximity.lnk/source/proximity/icudbg.c:33:#include "unicode/ustring.h"
#proximity.lnk/source/proximity/icudbg.c:34:#include "unicode/ucnv.h"
#proximity.lnk/source/proximity/icudbg.c:35:#include "unicode/unorm.h"
#proximity.lnk/source/proximity/icudbg.c:36:#include "unicode/uchar.h"
#proximity.lnk/source/proximity/icufun.c:29:#include <unicode/ustring.h>
#proximity.lnk/source/proximity/icufun.c:30:#include <unicode/ucnv.h>
#proximity.lnk/source/proximity/icufun.c:31:#include <unicode/unorm.h>
#
#
# Modules linking against ICU[A-Z]*LIB
#
# NOTE: under Windows you'll have to remove those painful *.def files in these
# modules, or you will get unresolved externals! e.g.
# rm */wntmsci10*/misc/*.def
#
# NOTE: due to the nature of how Windows searches for DLLs, executable's path
# first,
# copy solver\wntmsci10.pro\bin.m181\regcomp.exe binfilter\wntmsci10.pro\bin
# or otherwise the build will break in binfilter/util !
#
#./linguistic/source/makefile.mk:        $(ICUUCLIB)
#./svx/util/makefile.mk:            $(ICUUCLIB)
#./svx/util/makefile.mk:            $(ICUUCLIB)
#./sw/util/makefile.mk:    $(ICUUCLIB) \
#./vcl/util/makefile.mk:            $(ICUUCLIB)			\
#./vcl/util/makefile.mk:            $(ICULELIB)			\
#./forms/util/makefile.mk:        $(ICUUCLIB) \
#./forms/util/makefile.mk:        $(ICUINLIB)
#./i18npool/source/collator/makefile.mk:		$(ICUINLIB) \
#./i18npool/source/collator/makefile.mk:		$(ICUUCLIB)
#./i18npool/source/indexentry/makefile.mk:        $(ICUINLIB) \
#./i18npool/source/indexentry/makefile.mk:        $(ICUUCLIB)
#./i18npool/util/makefile.mk:		$(ICUINLIB) \
#./i18npool/util/makefile.mk:		$(ICUUCLIB)
#./binfilter/bf_sw/util/makefile.mk:    $(ICUUCLIB)
#./binfilter/bf_svx/util/makefile.mk:            $(ICUUCLIB)\
#./svtools/util/makefile.mk:		$(ICUUCLIB)		\

The above list may be obtained by invoking the following script in the $SRC_ROOT directory:

# using GNU ID-utils database
# look for ICU...LIB in makefiles to get modules

# Note that the Solaris grep doesn't know option -H, use GNU grep!
find . -name makefile.mk -exec grep -H 'ICU[A-Z]*LIB' {} \;

# look for include unicode/*, layout/*
lid --separator newline --result=grep --regexp 'unicode|layout' | egrep -v '(/build/icu/|com/sun/star/)' | egrep 'include.*[<"/](unicode|layout)/'
Personal tools