summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-02-12 20:54:23 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-02-12 20:54:23 (GMT)
commit231c2cb6d00061e70860626467107f4c63f359a0 (patch)
treec3ab479f071e882030d6b2fc6d2e3d88b25d16fe /3rdParty
parent0efa7c32aaf21a29b42b5926cc116007056843be (diff)
downloadswift-contrib-231c2cb6d00061e70860626467107f4c63f359a0.zip
swift-contrib-231c2cb6d00061e70860626467107f4c63f359a0.tar.bz2
Creating more submodules.
Diffstat (limited to '3rdParty')
m---------3rdParty/Expat0
-rw-r--r--3rdParty/Expat/SConscript23
-rw-r--r--3rdParty/Expat/expat_config.h5
-rwxr-xr-x3rdParty/Expat/src/ascii.h92
-rwxr-xr-x3rdParty/Expat/src/asciitab.h36
-rwxr-xr-x3rdParty/Expat/src/expat.h1014
-rwxr-xr-x3rdParty/Expat/src/expat_external.h115
-rwxr-xr-x3rdParty/Expat/src/iasciitab.h37
-rwxr-xr-x3rdParty/Expat/src/internal.h73
-rwxr-xr-x3rdParty/Expat/src/latin1tab.h36
-rwxr-xr-x3rdParty/Expat/src/nametab.h150
-rwxr-xr-x3rdParty/Expat/src/utf8tab.h37
-rwxr-xr-x3rdParty/Expat/src/xmlparse.c6287
-rwxr-xr-x3rdParty/Expat/src/xmlrole.c1336
-rwxr-xr-x3rdParty/Expat/src/xmlrole.h114
-rwxr-xr-x3rdParty/Expat/src/xmltok.c1651
-rwxr-xr-x3rdParty/Expat/src/xmltok.h316
-rwxr-xr-x3rdParty/Expat/src/xmltok_impl.c1783
-rwxr-xr-x3rdParty/Expat/src/xmltok_impl.h46
-rwxr-xr-x3rdParty/Expat/src/xmltok_ns.c115
m---------3rdParty/LCov0
-rwxr-xr-x3rdParty/LCov/gendesc223
-rwxr-xr-x3rdParty/LCov/genhtml4819
-rwxr-xr-x3rdParty/LCov/geninfo2178
-rwxr-xr-x3rdParty/LCov/genpng381
-rwxr-xr-x3rdParty/LCov/lcov2699
m---------3rdParty/LibIDN0
-rw-r--r--3rdParty/LibIDN/SConscript45
-rw-r--r--3rdParty/LibIDN/src/gunicomp.h661
-rw-r--r--3rdParty/LibIDN/src/gunidecomp.h10363
-rw-r--r--3rdParty/LibIDN/src/idn-int.h527
-rw-r--r--3rdParty/LibIDN/src/idna.c846
-rw-r--r--3rdParty/LibIDN/src/idna.h100
-rw-r--r--3rdParty/LibIDN/src/nfkc.c1058
-rw-r--r--3rdParty/LibIDN/src/profiles.c313
-rw-r--r--3rdParty/LibIDN/src/punycode.c456
-rw-r--r--3rdParty/LibIDN/src/punycode.h218
-rw-r--r--3rdParty/LibIDN/src/rfc3454.c4252
-rw-r--r--3rdParty/LibIDN/src/stringprep.c675
-rw-r--r--3rdParty/LibIDN/src/stringprep.h233
-rw-r--r--3rdParty/LibIDN/src/toutf8.c156
-rw-r--r--3rdParty/LibIDN/stubs/striconv.h0
-rw-r--r--3rdParty/LibIDN/stubs/win32/inttypes.h0
-rw-r--r--3rdParty/LibIDN/stubs/win32/stdint.h40
-rw-r--r--3rdParty/LibIDN/stubs/win32/unistd.h1
m---------3rdParty/SCons0
-rw-r--r--3rdParty/SCons/scons-LICENSE25
-rw-r--r--3rdParty/SCons/scons-README204
-rw-r--r--3rdParty/SCons/scons-local/SCons/Action.py1240
-rw-r--r--3rdParty/SCons/scons-local/SCons/Builder.py868
-rw-r--r--3rdParty/SCons/scons-local/SCons/CacheDir.py217
-rw-r--r--3rdParty/SCons/scons-local/SCons/Conftest.py784
-rw-r--r--3rdParty/SCons/scons-local/SCons/Debug.py222
-rw-r--r--3rdParty/SCons/scons-local/SCons/Defaults.py478
-rw-r--r--3rdParty/SCons/scons-local/SCons/Environment.py2320
-rw-r--r--3rdParty/SCons/scons-local/SCons/Errors.py207
-rw-r--r--3rdParty/SCons/scons-local/SCons/Executor.py636
-rw-r--r--3rdParty/SCons/scons-local/SCons/Job.py435
-rw-r--r--3rdParty/SCons/scons-local/SCons/Memoize.py292
-rw-r--r--3rdParty/SCons/scons-local/SCons/Node/Alias.py153
-rw-r--r--3rdParty/SCons/scons-local/SCons/Node/FS.py3166
-rw-r--r--3rdParty/SCons/scons-local/SCons/Node/Python.py125
-rw-r--r--3rdParty/SCons/scons-local/SCons/Node/__init__.py1341
-rw-r--r--3rdParty/SCons/scons-local/SCons/Options/BoolOption.py50
-rw-r--r--3rdParty/SCons/scons-local/SCons/Options/EnumOption.py50
-rw-r--r--3rdParty/SCons/scons-local/SCons/Options/ListOption.py50
-rw-r--r--3rdParty/SCons/scons-local/SCons/Options/PackageOption.py50
-rw-r--r--3rdParty/SCons/scons-local/SCons/Options/PathOption.py76
-rw-r--r--3rdParty/SCons/scons-local/SCons/Options/__init__.py74
-rw-r--r--3rdParty/SCons/scons-local/SCons/PathList.py232
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/__init__.py233
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/aix.py70
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/cygwin.py55
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/darwin.py46
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/hpux.py46
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/irix.py44
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/os2.py55
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/posix.py264
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/sunos.py50
-rw-r--r--3rdParty/SCons/scons-local/SCons/Platform/win32.py337
-rw-r--r--3rdParty/SCons/scons-local/SCons/SConf.py1029
-rw-r--r--3rdParty/SCons/scons-local/SCons/SConsign.py381
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/C.py132
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/D.py74
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/Dir.py111
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/Fortran.py320
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/IDL.py48
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/LaTeX.py343
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/Prog.py103
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/RC.py55
-rw-r--r--3rdParty/SCons/scons-local/SCons/Scanner/__init__.py417
-rw-r--r--3rdParty/SCons/scons-local/SCons/Script/Interactive.py386
-rw-r--r--3rdParty/SCons/scons-local/SCons/Script/Main.py1331
-rw-r--r--3rdParty/SCons/scons-local/SCons/Script/SConsOptions.py946
-rw-r--r--3rdParty/SCons/scons-local/SCons/Script/SConscript.py638
-rw-r--r--3rdParty/SCons/scons-local/SCons/Script/__init__.py414
-rw-r--r--3rdParty/SCons/scons-local/SCons/Sig.py63
-rw-r--r--3rdParty/SCons/scons-local/SCons/Subst.py911
-rw-r--r--3rdParty/SCons/scons-local/SCons/Taskmaster.py1030
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/386asm.py61
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/BitKeeper.py65
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/CVS.py73
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/FortranCommon.py247
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/JavaCommon.py323
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/MSCommon/__init__.py49
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/MSCommon/common.py179
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/MSCommon/netframework.py84
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/MSCommon/sdk.py257
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/MSCommon/vs.py495
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/Perforce.py104
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/PharLapCommon.py138
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/RCS.py64
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/SCCS.py64
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/Subversion.py71
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/__init__.py673
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/aixc++.py82
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/aixcc.py74
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/aixf77.py80
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/aixlink.py76
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/applelink.py71
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/ar.py63
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/as.py78
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/bcc32.py82
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/c++.py99
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/cc.py114
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/cvf.py58
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/default.py50
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/dmd.py224
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/dvi.py64
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/dvipdf.py125
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/dvips.py94
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/f77.py62
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/f90.py62
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/f95.py63
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/filesystem.py98
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/fortran.py63
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/g++.py90
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/g77.py73
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/gas.py53
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/gcc.py80
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/gfortran.py64
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/gnulink.py63
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/gs.py81
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/hpc++.py85
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/hpcc.py53
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/hplink.py77
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/icc.py59
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/icl.py52
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/ifl.py72
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/ifort.py89
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/ilink.py59
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/ilink32.py60
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/install.py229
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/intelc.py488
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/jar.py110
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/javac.py234
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/javah.py138
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/latex.py82
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/lex.py99
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/link.py121
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/linkloc.py112
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/m4.py63
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/masm.py77
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/midl.py90
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/mingw.py159
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/mslib.py64
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/mslink.py265
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/mssdk.py64
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/msvc.py260
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/msvs.py1433
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/mwcc.py208
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/mwld.py107
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/nasm.py72
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/__init__.py314
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/ipk.py185
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/msi.py526
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/rpm.py367
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/src_tarbz2.py43
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/src_targz.py43
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/src_zip.py43
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/tarbz2.py44
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/targz.py44
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/packaging/zip.py44
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/pdf.py78
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/pdflatex.py81
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/pdftex.py105
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/qt.py336
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/rmic.py121
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/rpcgen.py70
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/rpm.py132
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sgiar.py68
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sgic++.py58
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sgicc.py53
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sgilink.py63
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sunar.py67
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sunc++.py106
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/suncc.py58
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sunf77.py63
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sunf90.py64
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sunf95.py64
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sunlink.py77
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/swig.py155
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/tar.py73
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/tex.py646
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/tlib.py53
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/wix.py100
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/yacc.py131
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/zip.py100
-rw-r--r--3rdParty/SCons/scons-local/SCons/Util.py1621
-rw-r--r--3rdParty/SCons/scons-local/SCons/Variables/BoolVariable.py91
-rw-r--r--3rdParty/SCons/scons-local/SCons/Variables/EnumVariable.py107
-rw-r--r--3rdParty/SCons/scons-local/SCons/Variables/ListVariable.py139
-rw-r--r--3rdParty/SCons/scons-local/SCons/Variables/PackageVariable.py109
-rw-r--r--3rdParty/SCons/scons-local/SCons/Variables/PathVariable.py147
-rw-r--r--3rdParty/SCons/scons-local/SCons/Variables/__init__.py309
-rw-r--r--3rdParty/SCons/scons-local/SCons/Warnings.py217
-rw-r--r--3rdParty/SCons/scons-local/SCons/__init__.py49
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/__init__.py257
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_UserString.py98
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_hashlib.py91
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_itertools.py124
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_optparse.py1725
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_sets.py583
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_sets15.py176
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_shlex.py325
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_subprocess.py1296
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/_scons_textwrap.py382
-rw-r--r--3rdParty/SCons/scons-local/SCons/compat/builtins.py187
-rw-r--r--3rdParty/SCons/scons-local/SCons/cpp.py598
-rw-r--r--3rdParty/SCons/scons-local/SCons/dblite.py225
-rw-r--r--3rdParty/SCons/scons-local/SCons/exitfuncs.py77
-rwxr-xr-x3rdParty/SCons/scons-time.py1519
-rwxr-xr-x3rdParty/SCons/scons.py171
-rwxr-xr-x3rdParty/SCons/sconsign.py508
234 files changed, 0 insertions, 92757 deletions
diff --git a/3rdParty/Expat b/3rdParty/Expat
new file mode 160000
+Subproject 2e5ac4f15191c245a39b3e223c18de0477c23ab
diff --git a/3rdParty/Expat/SConscript b/3rdParty/Expat/SConscript
deleted file mode 100644
index 3e3b751..0000000
--- a/3rdParty/Expat/SConscript
+++ /dev/null
@@ -1,23 +0,0 @@
-Import(["env", "conf_env"])
-
-env["EXPAT_FLAGS"] = {
- "CPPDEFINES": ["XML_STATIC"],
- "CPPPATH": [Dir("src")],
- "LIBPATH": [Dir(".")],
- "LIBS": ["Expat"],
- }
-
-myenv = env.Clone()
-myenv.Append(CPPDEFINES = ["XML_STATIC", "HAVE_EXPAT_CONFIG_H"])
-myenv.Append(CPPPATH = [".", "src"])
-
-conf = Configure(conf_env)
-if conf.CheckFunc('memmove') :
- myenv.Append(CPPDEFINES = ["HAVE_MEMMOVE"])
-conf.Finish()
-
-myenv.StaticLibrary("Expat", [
- "src/xmltok.c",
- "src/xmlparse.c",
- "src/xmlrole.c"
- ])
diff --git a/3rdParty/Expat/expat_config.h b/3rdParty/Expat/expat_config.h
deleted file mode 100644
index 46f8a75..0000000
--- a/3rdParty/Expat/expat_config.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#define XML_CONTEXT_BYTES 1024
-#define XML_NS 1
-
-#include "../Boost/boost/detail/endian.hpp"
-#define BYTEORDER BOOST_BYTE_ORDER
diff --git a/3rdParty/Expat/src/ascii.h b/3rdParty/Expat/src/ascii.h
deleted file mode 100755
index d10530b..0000000
--- a/3rdParty/Expat/src/ascii.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-#define ASCII_A 0x41
-#define ASCII_B 0x42
-#define ASCII_C 0x43
-#define ASCII_D 0x44
-#define ASCII_E 0x45
-#define ASCII_F 0x46
-#define ASCII_G 0x47
-#define ASCII_H 0x48
-#define ASCII_I 0x49
-#define ASCII_J 0x4A
-#define ASCII_K 0x4B
-#define ASCII_L 0x4C
-#define ASCII_M 0x4D
-#define ASCII_N 0x4E
-#define ASCII_O 0x4F
-#define ASCII_P 0x50
-#define ASCII_Q 0x51
-#define ASCII_R 0x52
-#define ASCII_S 0x53
-#define ASCII_T 0x54
-#define ASCII_U 0x55
-#define ASCII_V 0x56
-#define ASCII_W 0x57
-#define ASCII_X 0x58
-#define ASCII_Y 0x59
-#define ASCII_Z 0x5A
-
-#define ASCII_a 0x61
-#define ASCII_b 0x62
-#define ASCII_c 0x63
-#define ASCII_d 0x64
-#define ASCII_e 0x65
-#define ASCII_f 0x66
-#define ASCII_g 0x67
-#define ASCII_h 0x68
-#define ASCII_i 0x69
-#define ASCII_j 0x6A
-#define ASCII_k 0x6B
-#define ASCII_l 0x6C
-#define ASCII_m 0x6D
-#define ASCII_n 0x6E
-#define ASCII_o 0x6F
-#define ASCII_p 0x70
-#define ASCII_q 0x71
-#define ASCII_r 0x72
-#define ASCII_s 0x73
-#define ASCII_t 0x74
-#define ASCII_u 0x75
-#define ASCII_v 0x76
-#define ASCII_w 0x77
-#define ASCII_x 0x78
-#define ASCII_y 0x79
-#define ASCII_z 0x7A
-
-#define ASCII_0 0x30
-#define ASCII_1 0x31
-#define ASCII_2 0x32
-#define ASCII_3 0x33
-#define ASCII_4 0x34
-#define ASCII_5 0x35
-#define ASCII_6 0x36
-#define ASCII_7 0x37
-#define ASCII_8 0x38
-#define ASCII_9 0x39
-
-#define ASCII_TAB 0x09
-#define ASCII_SPACE 0x20
-#define ASCII_EXCL 0x21
-#define ASCII_QUOT 0x22
-#define ASCII_AMP 0x26
-#define ASCII_APOS 0x27
-#define ASCII_MINUS 0x2D
-#define ASCII_PERIOD 0x2E
-#define ASCII_COLON 0x3A
-#define ASCII_SEMI 0x3B
-#define ASCII_LT 0x3C
-#define ASCII_EQUALS 0x3D
-#define ASCII_GT 0x3E
-#define ASCII_LSQB 0x5B
-#define ASCII_RSQB 0x5D
-#define ASCII_UNDERSCORE 0x5F
-#define ASCII_LPAREN 0x28
-#define ASCII_RPAREN 0x29
-#define ASCII_FF 0x0C
-#define ASCII_SLASH 0x2F
-#define ASCII_HASH 0x23
-#define ASCII_PIPE 0x7C
-#define ASCII_COMMA 0x2C
diff --git a/3rdParty/Expat/src/asciitab.h b/3rdParty/Expat/src/asciitab.h
deleted file mode 100755
index 79a15c2..0000000
--- a/3rdParty/Expat/src/asciitab.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML,
-/* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML,
-/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM,
-/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS,
-/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS,
-/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL,
-/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
-/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
-/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI,
-/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST,
-/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
-/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
-/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB,
-/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT,
-/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
-/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
-/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
-/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER,
diff --git a/3rdParty/Expat/src/expat.h b/3rdParty/Expat/src/expat.h
deleted file mode 100755
index 20a8278..0000000
--- a/3rdParty/Expat/src/expat.h
+++ /dev/null
@@ -1,1014 +0,0 @@
-/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-#ifndef Expat_INCLUDED
-#define Expat_INCLUDED 1
-
-#ifdef __VMS
-/* 0 1 2 3 0 1 2 3
- 1234567890123456789012345678901 1234567890123456789012345678901 */
-#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler
-#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler
-#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler
-#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg
-#endif
-
-#include <stdlib.h>
-#include "expat_external.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct XML_ParserStruct;
-typedef struct XML_ParserStruct *XML_Parser;
-
-/* Should this be defined using stdbool.h when C99 is available? */
-typedef unsigned char XML_Bool;
-#define XML_TRUE ((XML_Bool) 1)
-#define XML_FALSE ((XML_Bool) 0)
-
-/* The XML_Status enum gives the possible return values for several
- API functions. The preprocessor #defines are included so this
- stanza can be added to code that still needs to support older
- versions of Expat 1.95.x:
-
- #ifndef XML_STATUS_OK
- #define XML_STATUS_OK 1
- #define XML_STATUS_ERROR 0
- #endif
-
- Otherwise, the #define hackery is quite ugly and would have been
- dropped.
-*/
-enum XML_Status {
- XML_STATUS_ERROR = 0,
-#define XML_STATUS_ERROR XML_STATUS_ERROR
- XML_STATUS_OK = 1,
-#define XML_STATUS_OK XML_STATUS_OK
- XML_STATUS_SUSPENDED = 2
-#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED
-};
-
-enum XML_Error {
- XML_ERROR_NONE,
- XML_ERROR_NO_MEMORY,
- XML_ERROR_SYNTAX,
- XML_ERROR_NO_ELEMENTS,
- XML_ERROR_INVALID_TOKEN,
- XML_ERROR_UNCLOSED_TOKEN,
- XML_ERROR_PARTIAL_CHAR,
- XML_ERROR_TAG_MISMATCH,
- XML_ERROR_DUPLICATE_ATTRIBUTE,
- XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
- XML_ERROR_PARAM_ENTITY_REF,
- XML_ERROR_UNDEFINED_ENTITY,
- XML_ERROR_RECURSIVE_ENTITY_REF,
- XML_ERROR_ASYNC_ENTITY,
- XML_ERROR_BAD_CHAR_REF,
- XML_ERROR_BINARY_ENTITY_REF,
- XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
- XML_ERROR_MISPLACED_XML_PI,
- XML_ERROR_UNKNOWN_ENCODING,
- XML_ERROR_INCORRECT_ENCODING,
- XML_ERROR_UNCLOSED_CDATA_SECTION,
- XML_ERROR_EXTERNAL_ENTITY_HANDLING,
- XML_ERROR_NOT_STANDALONE,
- XML_ERROR_UNEXPECTED_STATE,
- XML_ERROR_ENTITY_DECLARED_IN_PE,
- XML_ERROR_FEATURE_REQUIRES_XML_DTD,
- XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING,
- /* Added in 1.95.7. */
- XML_ERROR_UNBOUND_PREFIX,
- /* Added in 1.95.8. */
- XML_ERROR_UNDECLARING_PREFIX,
- XML_ERROR_INCOMPLETE_PE,
- XML_ERROR_XML_DECL,
- XML_ERROR_TEXT_DECL,
- XML_ERROR_PUBLICID,
- XML_ERROR_SUSPENDED,
- XML_ERROR_NOT_SUSPENDED,
- XML_ERROR_ABORTED,
- XML_ERROR_FINISHED,
- XML_ERROR_SUSPEND_PE,
- /* Added in 2.0. */
- XML_ERROR_RESERVED_PREFIX_XML,
- XML_ERROR_RESERVED_PREFIX_XMLNS,
- XML_ERROR_RESERVED_NAMESPACE_URI
-};
-
-enum XML_Content_Type {
- XML_CTYPE_EMPTY = 1,
- XML_CTYPE_ANY,
- XML_CTYPE_MIXED,
- XML_CTYPE_NAME,
- XML_CTYPE_CHOICE,
- XML_CTYPE_SEQ
-};
-
-enum XML_Content_Quant {
- XML_CQUANT_NONE,
- XML_CQUANT_OPT,
- XML_CQUANT_REP,
- XML_CQUANT_PLUS
-};
-
-/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be
- XML_CQUANT_NONE, and the other fields will be zero or NULL.
- If type == XML_CTYPE_MIXED, then quant will be NONE or REP and
- numchildren will contain number of elements that may be mixed in
- and children point to an array of XML_Content cells that will be
- all of XML_CTYPE_NAME type with no quantification.
-
- If type == XML_CTYPE_NAME, then the name points to the name, and
- the numchildren field will be zero and children will be NULL. The
- quant fields indicates any quantifiers placed on the name.
-
- CHOICE and SEQ will have name NULL, the number of children in
- numchildren and children will point, recursively, to an array
- of XML_Content cells.
-
- The EMPTY, ANY, and MIXED types will only occur at top level.
-*/
-
-typedef struct XML_cp XML_Content;
-
-struct XML_cp {
- enum XML_Content_Type type;
- enum XML_Content_Quant quant;
- XML_Char * name;
- unsigned int numchildren;
- XML_Content * children;
-};
-
-
-/* This is called for an element declaration. See above for
- description of the model argument. It's the caller's responsibility
- to free model when finished with it.
-*/
-typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData,
- const XML_Char *name,
- XML_Content *model);
-
-XMLPARSEAPI(void)
-XML_SetElementDeclHandler(XML_Parser parser,
- XML_ElementDeclHandler eldecl);
-
-/* The Attlist declaration handler is called for *each* attribute. So
- a single Attlist declaration with multiple attributes declared will
- generate multiple calls to this handler. The "default" parameter
- may be NULL in the case of the "#IMPLIED" or "#REQUIRED"
- keyword. The "isrequired" parameter will be true and the default
- value will be NULL in the case of "#REQUIRED". If "isrequired" is
- true and default is non-NULL, then this is a "#FIXED" default.
-*/
-typedef void (XMLCALL *XML_AttlistDeclHandler) (
- void *userData,
- const XML_Char *elname,
- const XML_Char *attname,
- const XML_Char *att_type,
- const XML_Char *dflt,
- int isrequired);
-
-XMLPARSEAPI(void)
-XML_SetAttlistDeclHandler(XML_Parser parser,
- XML_AttlistDeclHandler attdecl);
-
-/* The XML declaration handler is called for *both* XML declarations
- and text declarations. The way to distinguish is that the version
- parameter will be NULL for text declarations. The encoding
- parameter may be NULL for XML declarations. The standalone
- parameter will be -1, 0, or 1 indicating respectively that there
- was no standalone parameter in the declaration, that it was given
- as no, or that it was given as yes.
-*/
-typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData,
- const XML_Char *version,
- const XML_Char *encoding,
- int standalone);
-
-XMLPARSEAPI(void)
-XML_SetXmlDeclHandler(XML_Parser parser,
- XML_XmlDeclHandler xmldecl);
-
-
-typedef struct {
- void *(*malloc_fcn)(size_t size);
- void *(*realloc_fcn)(void *ptr, size_t size);
- void (*free_fcn)(void *ptr);
-} XML_Memory_Handling_Suite;
-
-/* Constructs a new parser; encoding is the encoding specified by the
- external protocol or NULL if there is none specified.
-*/
-XMLPARSEAPI(XML_Parser)
-XML_ParserCreate(const XML_Char *encoding);
-
-/* Constructs a new parser and namespace processor. Element type
- names and attribute names that belong to a namespace will be
- expanded; unprefixed attribute names are never expanded; unprefixed
- element type names are expanded only if there is a default
- namespace. The expanded name is the concatenation of the namespace
- URI, the namespace separator character, and the local part of the
- name. If the namespace separator is '\0' then the namespace URI
- and the local part will be concatenated without any separator.
- It is a programming error to use the separator '\0' with namespace
- triplets (see XML_SetReturnNSTriplet).
-*/
-XMLPARSEAPI(XML_Parser)
-XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator);
-
-
-/* Constructs a new parser using the memory management suite referred to
- by memsuite. If memsuite is NULL, then use the standard library memory
- suite. If namespaceSeparator is non-NULL it creates a parser with
- namespace processing as described above. The character pointed at
- will serve as the namespace separator.
-
- All further memory operations used for the created parser will come from
- the given suite.
-*/
-XMLPARSEAPI(XML_Parser)
-XML_ParserCreate_MM(const XML_Char *encoding,
- const XML_Memory_Handling_Suite *memsuite,
- const XML_Char *namespaceSeparator);
-
-/* Prepare a parser object to be re-used. This is particularly
- valuable when memory allocation overhead is disproportionatly high,
- such as when a large number of small documnents need to be parsed.
- All handlers are cleared from the parser, except for the
- unknownEncodingHandler. The parser's external state is re-initialized
- except for the values of ns and ns_triplets.
-
- Added in Expat 1.95.3.
-*/
-XMLPARSEAPI(XML_Bool)
-XML_ParserReset(XML_Parser parser, const XML_Char *encoding);
-
-/* atts is array of name/value pairs, terminated by 0;
- names and values are 0 terminated.
-*/
-typedef void (XMLCALL *XML_StartElementHandler) (void *userData,
- const XML_Char *name,
- const XML_Char **atts);
-
-typedef void (XMLCALL *XML_EndElementHandler) (void *userData,
- const XML_Char *name);
-
-
-/* s is not 0 terminated. */
-typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData,
- const XML_Char *s,
- int len);
-
-/* target and data are 0 terminated */
-typedef void (XMLCALL *XML_ProcessingInstructionHandler) (
- void *userData,
- const XML_Char *target,
- const XML_Char *data);
-
-/* data is 0 terminated */
-typedef void (XMLCALL *XML_CommentHandler) (void *userData,
- const XML_Char *data);
-
-typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData);
-typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData);
-
-/* This is called for any characters in the XML document for which
- there is no applicable handler. This includes both characters that
- are part of markup which is of a kind that is not reported
- (comments, markup declarations), or characters that are part of a
- construct which could be reported but for which no handler has been
- supplied. The characters are passed exactly as they were in the XML
- document except that they will be encoded in UTF-8 or UTF-16.
- Line boundaries are not normalized. Note that a byte order mark
- character is not passed to the default handler. There are no
- guarantees about how characters are divided between calls to the
- default handler: for example, a comment might be split between
- multiple calls.
-*/
-typedef void (XMLCALL *XML_DefaultHandler) (void *userData,
- const XML_Char *s,
- int len);
-
-/* This is called for the start of the DOCTYPE declaration, before
- any DTD or internal subset is parsed.
-*/
-typedef void (XMLCALL *XML_StartDoctypeDeclHandler) (
- void *userData,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid,
- int has_internal_subset);
-
-/* This is called for the start of the DOCTYPE declaration when the
- closing > is encountered, but after processing any external
- subset.
-*/
-typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData);
-
-/* This is called for entity declarations. The is_parameter_entity
- argument will be non-zero if the entity is a parameter entity, zero
- otherwise.
-
- For internal entities (<!ENTITY foo "bar">), value will
- be non-NULL and systemId, publicID, and notationName will be NULL.
- The value string is NOT nul-terminated; the length is provided in
- the value_length argument. Since it is legal to have zero-length
- values, do not use this argument to test for internal entities.
-
- For external entities, value will be NULL and systemId will be
- non-NULL. The publicId argument will be NULL unless a public
- identifier was provided. The notationName argument will have a
- non-NULL value only for unparsed entity declarations.
-
- Note that is_parameter_entity can't be changed to XML_Bool, since
- that would break binary compatibility.
-*/
-typedef void (XMLCALL *XML_EntityDeclHandler) (
- void *userData,
- const XML_Char *entityName,
- int is_parameter_entity,
- const XML_Char *value,
- int value_length,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId,
- const XML_Char *notationName);
-
-XMLPARSEAPI(void)
-XML_SetEntityDeclHandler(XML_Parser parser,
- XML_EntityDeclHandler handler);
-
-/* OBSOLETE -- OBSOLETE -- OBSOLETE
- This handler has been superceded by the EntityDeclHandler above.
- It is provided here for backward compatibility.
-
- This is called for a declaration of an unparsed (NDATA) entity.
- The base argument is whatever was set by XML_SetBase. The
- entityName, systemId and notationName arguments will never be
- NULL. The other arguments may be.
-*/
-typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) (
- void *userData,
- const XML_Char *entityName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId,
- const XML_Char *notationName);
-
-/* This is called for a declaration of notation. The base argument is
- whatever was set by XML_SetBase. The notationName will never be
- NULL. The other arguments can be.
-*/
-typedef void (XMLCALL *XML_NotationDeclHandler) (
- void *userData,
- const XML_Char *notationName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId);
-
-/* When namespace processing is enabled, these are called once for
- each namespace declaration. The call to the start and end element
- handlers occur between the calls to the start and end namespace
- declaration handlers. For an xmlns attribute, prefix will be
- NULL. For an xmlns="" attribute, uri will be NULL.
-*/
-typedef void (XMLCALL *XML_StartNamespaceDeclHandler) (
- void *userData,
- const XML_Char *prefix,
- const XML_Char *uri);
-
-typedef void (XMLCALL *XML_EndNamespaceDeclHandler) (
- void *userData,
- const XML_Char *prefix);
-
-/* This is called if the document is not standalone, that is, it has an
- external subset or a reference to a parameter entity, but does not
- have standalone="yes". If this handler returns XML_STATUS_ERROR,
- then processing will not continue, and the parser will return a
- XML_ERROR_NOT_STANDALONE error.
- If parameter entity parsing is enabled, then in addition to the
- conditions above this handler will only be called if the referenced
- entity was actually read.
-*/
-typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData);
-
-/* This is called for a reference to an external parsed general
- entity. The referenced entity is not automatically parsed. The
- application can parse it immediately or later using
- XML_ExternalEntityParserCreate.
-
- The parser argument is the parser parsing the entity containing the
- reference; it can be passed as the parser argument to
- XML_ExternalEntityParserCreate. The systemId argument is the
- system identifier as specified in the entity declaration; it will
- not be NULL.
-
- The base argument is the system identifier that should be used as
- the base for resolving systemId if systemId was relative; this is
- set by XML_SetBase; it may be NULL.
-
- The publicId argument is the public identifier as specified in the
- entity declaration, or NULL if none was specified; the whitespace
- in the public identifier will have been normalized as required by
- the XML spec.
-
- The context argument specifies the parsing context in the format
- expected by the context argument to XML_ExternalEntityParserCreate;
- context is valid only until the handler returns, so if the
- referenced entity is to be parsed later, it must be copied.
- context is NULL only when the entity is a parameter entity.
-
- The handler should return XML_STATUS_ERROR if processing should not
- continue because of a fatal error in the handling of the external
- entity. In this case the calling parser will return an
- XML_ERROR_EXTERNAL_ENTITY_HANDLING error.
-
- Note that unlike other handlers the first argument is the parser,
- not userData.
-*/
-typedef int (XMLCALL *XML_ExternalEntityRefHandler) (
- XML_Parser parser,
- const XML_Char *context,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId);
-
-/* This is called in two situations:
- 1) An entity reference is encountered for which no declaration
- has been read *and* this is not an error.
- 2) An internal entity reference is read, but not expanded, because
- XML_SetDefaultHandler has been called.
- Note: skipped parameter entities in declarations and skipped general
- entities in attribute values cannot be reported, because
- the event would be out of sync with the reporting of the
- declarations or attribute values
-*/
-typedef void (XMLCALL *XML_SkippedEntityHandler) (
- void *userData,
- const XML_Char *entityName,
- int is_parameter_entity);
-
-/* This structure is filled in by the XML_UnknownEncodingHandler to
- provide information to the parser about encodings that are unknown
- to the parser.
-
- The map[b] member gives information about byte sequences whose
- first byte is b.
-
- If map[b] is c where c is >= 0, then b by itself encodes the
- Unicode scalar value c.
-
- If map[b] is -1, then the byte sequence is malformed.
-
- If map[b] is -n, where n >= 2, then b is the first byte of an
- n-byte sequence that encodes a single Unicode scalar value.
-
- The data member will be passed as the first argument to the convert
- function.
-
- The convert function is used to convert multibyte sequences; s will
- point to a n-byte sequence where map[(unsigned char)*s] == -n. The
- convert function must return the Unicode scalar value represented
- by this byte sequence or -1 if the byte sequence is malformed.
-
- The convert function may be NULL if the encoding is a single-byte
- encoding, that is if map[b] >= -1 for all bytes b.
-
- When the parser is finished with the encoding, then if release is
- not NULL, it will call release passing it the data member; once
- release has been called, the convert function will not be called
- again.
-
- Expat places certain restrictions on the encodings that are supported
- using this mechanism.
-
- 1. Every ASCII character that can appear in a well-formed XML document,
- other than the characters
-
- $@\^`{}~
-
- must be represented by a single byte, and that byte must be the
- same byte that represents that character in ASCII.
-
- 2. No character may require more than 4 bytes to encode.
-
- 3. All characters encoded must have Unicode scalar values <=
- 0xFFFF, (i.e., characters that would be encoded by surrogates in
- UTF-16 are not allowed). Note that this restriction doesn't
- apply to the built-in support for UTF-8 and UTF-16.
-
- 4. No Unicode character may be encoded by more than one distinct
- sequence of bytes.
-*/
-typedef struct {
- int map[256];
- void *data;
- int (XMLCALL *convert)(void *data, const char *s);
- void (XMLCALL *release)(void *data);
-} XML_Encoding;
-
-/* This is called for an encoding that is unknown to the parser.
-
- The encodingHandlerData argument is that which was passed as the
- second argument to XML_SetUnknownEncodingHandler.
-
- The name argument gives the name of the encoding as specified in
- the encoding declaration.
-
- If the callback can provide information about the encoding, it must
- fill in the XML_Encoding structure, and return XML_STATUS_OK.
- Otherwise it must return XML_STATUS_ERROR.
-
- If info does not describe a suitable encoding, then the parser will
- return an XML_UNKNOWN_ENCODING error.
-*/
-typedef int (XMLCALL *XML_UnknownEncodingHandler) (
- void *encodingHandlerData,
- const XML_Char *name,
- XML_Encoding *info);
-
-XMLPARSEAPI(void)
-XML_SetElementHandler(XML_Parser parser,
- XML_StartElementHandler start,
- XML_EndElementHandler end);
-
-XMLPARSEAPI(void)
-XML_SetStartElementHandler(XML_Parser parser,
- XML_StartElementHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetEndElementHandler(XML_Parser parser,
- XML_EndElementHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetCharacterDataHandler(XML_Parser parser,
- XML_CharacterDataHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetProcessingInstructionHandler(XML_Parser parser,
- XML_ProcessingInstructionHandler handler);
-XMLPARSEAPI(void)
-XML_SetCommentHandler(XML_Parser parser,
- XML_CommentHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetCdataSectionHandler(XML_Parser parser,
- XML_StartCdataSectionHandler start,
- XML_EndCdataSectionHandler end);
-
-XMLPARSEAPI(void)
-XML_SetStartCdataSectionHandler(XML_Parser parser,
- XML_StartCdataSectionHandler start);
-
-XMLPARSEAPI(void)
-XML_SetEndCdataSectionHandler(XML_Parser parser,
- XML_EndCdataSectionHandler end);
-
-/* This sets the default handler and also inhibits expansion of
- internal entities. These entity references will be passed to the
- default handler, or to the skipped entity handler, if one is set.
-*/
-XMLPARSEAPI(void)
-XML_SetDefaultHandler(XML_Parser parser,
- XML_DefaultHandler handler);
-
-/* This sets the default handler but does not inhibit expansion of
- internal entities. The entity reference will not be passed to the
- default handler.
-*/
-XMLPARSEAPI(void)
-XML_SetDefaultHandlerExpand(XML_Parser parser,
- XML_DefaultHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetDoctypeDeclHandler(XML_Parser parser,
- XML_StartDoctypeDeclHandler start,
- XML_EndDoctypeDeclHandler end);
-
-XMLPARSEAPI(void)
-XML_SetStartDoctypeDeclHandler(XML_Parser parser,
- XML_StartDoctypeDeclHandler start);
-
-XMLPARSEAPI(void)
-XML_SetEndDoctypeDeclHandler(XML_Parser parser,
- XML_EndDoctypeDeclHandler end);
-
-XMLPARSEAPI(void)
-XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
- XML_UnparsedEntityDeclHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetNotationDeclHandler(XML_Parser parser,
- XML_NotationDeclHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetNamespaceDeclHandler(XML_Parser parser,
- XML_StartNamespaceDeclHandler start,
- XML_EndNamespaceDeclHandler end);
-
-XMLPARSEAPI(void)
-XML_SetStartNamespaceDeclHandler(XML_Parser parser,
- XML_StartNamespaceDeclHandler start);
-
-XMLPARSEAPI(void)
-XML_SetEndNamespaceDeclHandler(XML_Parser parser,
- XML_EndNamespaceDeclHandler end);
-
-XMLPARSEAPI(void)
-XML_SetNotStandaloneHandler(XML_Parser parser,
- XML_NotStandaloneHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetExternalEntityRefHandler(XML_Parser parser,
- XML_ExternalEntityRefHandler handler);
-
-/* If a non-NULL value for arg is specified here, then it will be
- passed as the first argument to the external entity ref handler
- instead of the parser object.
-*/
-XMLPARSEAPI(void)
-XML_SetExternalEntityRefHandlerArg(XML_Parser parser,
- void *arg);
-
-XMLPARSEAPI(void)
-XML_SetSkippedEntityHandler(XML_Parser parser,
- XML_SkippedEntityHandler handler);
-
-XMLPARSEAPI(void)
-XML_SetUnknownEncodingHandler(XML_Parser parser,
- XML_UnknownEncodingHandler handler,
- void *encodingHandlerData);
-
-/* This can be called within a handler for a start element, end
- element, processing instruction or character data. It causes the
- corresponding markup to be passed to the default handler.
-*/
-XMLPARSEAPI(void)
-XML_DefaultCurrent(XML_Parser parser);
-
-/* If do_nst is non-zero, and namespace processing is in effect, and
- a name has a prefix (i.e. an explicit namespace qualifier) then
- that name is returned as a triplet in a single string separated by
- the separator character specified when the parser was created: URI
- + sep + local_name + sep + prefix.
-
- If do_nst is zero, then namespace information is returned in the
- default manner (URI + sep + local_name) whether or not the name
- has a prefix.
-
- Note: Calling XML_SetReturnNSTriplet after XML_Parse or
- XML_ParseBuffer has no effect.
-*/
-
-XMLPARSEAPI(void)
-XML_SetReturnNSTriplet(XML_Parser parser, int do_nst);
-
-/* This value is passed as the userData argument to callbacks. */
-XMLPARSEAPI(void)
-XML_SetUserData(XML_Parser parser, void *userData);
-
-/* Returns the last value set by XML_SetUserData or NULL. */
-#define XML_GetUserData(parser) (*(void **)(parser))
-
-/* This is equivalent to supplying an encoding argument to
- XML_ParserCreate. On success XML_SetEncoding returns non-zero,
- zero otherwise.
- Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer
- has no effect and returns XML_STATUS_ERROR.
-*/
-XMLPARSEAPI(enum XML_Status)
-XML_SetEncoding(XML_Parser parser, const XML_Char *encoding);
-
-/* If this function is called, then the parser will be passed as the
- first argument to callbacks instead of userData. The userData will
- still be accessible using XML_GetUserData.
-*/
-XMLPARSEAPI(void)
-XML_UseParserAsHandlerArg(XML_Parser parser);
-
-/* If useDTD == XML_TRUE is passed to this function, then the parser
- will assume that there is an external subset, even if none is
- specified in the document. In such a case the parser will call the
- externalEntityRefHandler with a value of NULL for the systemId
- argument (the publicId and context arguments will be NULL as well).
- Note: For the purpose of checking WFC: Entity Declared, passing
- useDTD == XML_TRUE will make the parser behave as if the document
- had a DTD with an external subset.
- Note: If this function is called, then this must be done before
- the first call to XML_Parse or XML_ParseBuffer, since it will
- have no effect after that. Returns
- XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING.
- Note: If the document does not have a DOCTYPE declaration at all,
- then startDoctypeDeclHandler and endDoctypeDeclHandler will not
- be called, despite an external subset being parsed.
- Note: If XML_DTD is not defined when Expat is compiled, returns
- XML_ERROR_FEATURE_REQUIRES_XML_DTD.
-*/
-XMLPARSEAPI(enum XML_Error)
-XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD);
-
-
-/* Sets the base to be used for resolving relative URIs in system
- identifiers in declarations. Resolving relative identifiers is
- left to the application: this value will be passed through as the
- base argument to the XML_ExternalEntityRefHandler,
- XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base
- argument will be copied. Returns XML_STATUS_ERROR if out of memory,
- XML_STATUS_OK otherwise.
-*/
-XMLPARSEAPI(enum XML_Status)
-XML_SetBase(XML_Parser parser, const XML_Char *base);
-
-XMLPARSEAPI(const XML_Char *)
-XML_GetBase(XML_Parser parser);
-
-/* Returns the number of the attribute/value pairs passed in last call
- to the XML_StartElementHandler that were specified in the start-tag
- rather than defaulted. Each attribute/value pair counts as 2; thus
- this correspondds to an index into the atts array passed to the
- XML_StartElementHandler.
-*/
-XMLPARSEAPI(int)
-XML_GetSpecifiedAttributeCount(XML_Parser parser);
-
-/* Returns the index of the ID attribute passed in the last call to
- XML_StartElementHandler, or -1 if there is no ID attribute. Each
- attribute/value pair counts as 2; thus this correspondds to an
- index into the atts array passed to the XML_StartElementHandler.
-*/
-XMLPARSEAPI(int)
-XML_GetIdAttributeIndex(XML_Parser parser);
-
-/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is
- detected. The last call to XML_Parse must have isFinal true; len
- may be zero for this call (or any other).
-
- Though the return values for these functions has always been
- described as a Boolean value, the implementation, at least for the
- 1.95.x series, has always returned exactly one of the XML_Status
- values.
-*/
-XMLPARSEAPI(enum XML_Status)
-XML_Parse(XML_Parser parser, const char *s, int len, int isFinal);
-
-XMLPARSEAPI(void *)
-XML_GetBuffer(XML_Parser parser, int len);
-
-XMLPARSEAPI(enum XML_Status)
-XML_ParseBuffer(XML_Parser parser, int len, int isFinal);
-
-/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return.
- Must be called from within a call-back handler, except when aborting
- (resumable = 0) an already suspended parser. Some call-backs may
- still follow because they would otherwise get lost. Examples:
- - endElementHandler() for empty elements when stopped in
- startElementHandler(),
- - endNameSpaceDeclHandler() when stopped in endElementHandler(),
- and possibly others.
-
- Can be called from most handlers, including DTD related call-backs,
- except when parsing an external parameter entity and resumable != 0.
- Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise.
- Possible error codes:
- - XML_ERROR_SUSPENDED: when suspending an already suspended parser.
- - XML_ERROR_FINISHED: when the parser has already finished.
- - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE.
-
- When resumable != 0 (true) then parsing is suspended, that is,
- XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED.
- Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer()
- return XML_STATUS_ERROR with error code XML_ERROR_ABORTED.
-
- *Note*:
- This will be applied to the current parser instance only, that is, if
- there is a parent parser then it will continue parsing when the
- externalEntityRefHandler() returns. It is up to the implementation of
- the externalEntityRefHandler() to call XML_StopParser() on the parent
- parser (recursively), if one wants to stop parsing altogether.
-
- When suspended, parsing can be resumed by calling XML_ResumeParser().
-*/
-XMLPARSEAPI(enum XML_Status)
-XML_StopParser(XML_Parser parser, XML_Bool resumable);
-
-/* Resumes parsing after it has been suspended with XML_StopParser().
- Must not be called from within a handler call-back. Returns same
- status codes as XML_Parse() or XML_ParseBuffer().
- Additional error code XML_ERROR_NOT_SUSPENDED possible.
-
- *Note*:
- This must be called on the most deeply nested child parser instance
- first, and on its parent parser only after the child parser has finished,
- to be applied recursively until the document entity's parser is restarted.
- That is, the parent parser will not resume by itself and it is up to the
- application to call XML_ResumeParser() on it at the appropriate moment.
-*/
-XMLPARSEAPI(enum XML_Status)
-XML_ResumeParser(XML_Parser parser);
-
-enum XML_Parsing {
- XML_INITIALIZED,
- XML_PARSING,
- XML_FINISHED,
- XML_SUSPENDED
-};
-
-typedef struct {
- enum XML_Parsing parsing;
- XML_Bool finalBuffer;
-} XML_ParsingStatus;
-
-/* Returns status of parser with respect to being initialized, parsing,
- finished, or suspended and processing the final buffer.
- XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus,
- XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED
-*/
-XMLPARSEAPI(void)
-XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status);
-
-/* Creates an XML_Parser object that can parse an external general
- entity; context is a '\0'-terminated string specifying the parse
- context; encoding is a '\0'-terminated string giving the name of
- the externally specified encoding, or NULL if there is no
- externally specified encoding. The context string consists of a
- sequence of tokens separated by formfeeds (\f); a token consisting
- of a name specifies that the general entity of the name is open; a
- token of the form prefix=uri specifies the namespace for a
- particular prefix; a token of the form =uri specifies the default
- namespace. This can be called at any point after the first call to
- an ExternalEntityRefHandler so longer as the parser has not yet
- been freed. The new parser is completely independent and may
- safely be used in a separate thread. The handlers and userData are
- initialized from the parser argument. Returns NULL if out of memory.
- Otherwise returns a new XML_Parser object.
-*/
-XMLPARSEAPI(XML_Parser)
-XML_ExternalEntityParserCreate(XML_Parser parser,
- const XML_Char *context,
- const XML_Char *encoding);
-
-enum XML_ParamEntityParsing {
- XML_PARAM_ENTITY_PARSING_NEVER,
- XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE,
- XML_PARAM_ENTITY_PARSING_ALWAYS
-};
-
-/* Controls parsing of parameter entities (including the external DTD
- subset). If parsing of parameter entities is enabled, then
- references to external parameter entities (including the external
- DTD subset) will be passed to the handler set with
- XML_SetExternalEntityRefHandler. The context passed will be 0.
-
- Unlike external general entities, external parameter entities can
- only be parsed synchronously. If the external parameter entity is
- to be parsed, it must be parsed during the call to the external
- entity ref handler: the complete sequence of
- XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and
- XML_ParserFree calls must be made during this call. After
- XML_ExternalEntityParserCreate has been called to create the parser
- for the external parameter entity (context must be 0 for this
- call), it is illegal to make any calls on the old parser until
- XML_ParserFree has been called on the newly created parser.
- If the library has been compiled without support for parameter
- entity parsing (ie without XML_DTD being defined), then
- XML_SetParamEntityParsing will return 0 if parsing of parameter
- entities is requested; otherwise it will return non-zero.
- Note: If XML_SetParamEntityParsing is called after XML_Parse or
- XML_ParseBuffer, then it has no effect and will always return 0.
-*/
-XMLPARSEAPI(int)
-XML_SetParamEntityParsing(XML_Parser parser,
- enum XML_ParamEntityParsing parsing);
-
-/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then
- XML_GetErrorCode returns information about the error.
-*/
-XMLPARSEAPI(enum XML_Error)
-XML_GetErrorCode(XML_Parser parser);
-
-/* These functions return information about the current parse
- location. They may be called from any callback called to report
- some parse event; in this case the location is the location of the
- first of the sequence of characters that generated the event. When
- called from callbacks generated by declarations in the document
- prologue, the location identified isn't as neatly defined, but will
- be within the relevant markup. When called outside of the callback
- functions, the position indicated will be just past the last parse
- event (regardless of whether there was an associated callback).
-
- They may also be called after returning from a call to XML_Parse
- or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then
- the location is the location of the character at which the error
- was detected; otherwise the location is the location of the last
- parse event, as described above.
-*/
-XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser);
-XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser);
-XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser);
-
-/* Return the number of bytes in the current event.
- Returns 0 if the event is in an internal entity.
-*/
-XMLPARSEAPI(int)
-XML_GetCurrentByteCount(XML_Parser parser);
-
-/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets
- the integer pointed to by offset to the offset within this buffer
- of the current parse position, and sets the integer pointed to by size
- to the size of this buffer (the number of input bytes). Otherwise
- returns a NULL pointer. Also returns a NULL pointer if a parse isn't
- active.
-
- NOTE: The character pointer returned should not be used outside
- the handler that makes the call.
-*/
-XMLPARSEAPI(const char *)
-XML_GetInputContext(XML_Parser parser,
- int *offset,
- int *size);
-
-/* For backwards compatibility with previous versions. */
-#define XML_GetErrorLineNumber XML_GetCurrentLineNumber
-#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber
-#define XML_GetErrorByteIndex XML_GetCurrentByteIndex
-
-/* Frees the content model passed to the element declaration handler */
-XMLPARSEAPI(void)
-XML_FreeContentModel(XML_Parser parser, XML_Content *model);
-
-/* Exposing the memory handling functions used in Expat */
-XMLPARSEAPI(void *)
-XML_MemMalloc(XML_Parser parser, size_t size);
-
-XMLPARSEAPI(void *)
-XML_MemRealloc(XML_Parser parser, void *ptr, size_t size);
-
-XMLPARSEAPI(void)
-XML_MemFree(XML_Parser parser, void *ptr);
-
-/* Frees memory used by the parser. */
-XMLPARSEAPI(void)
-XML_ParserFree(XML_Parser parser);
-
-/* Returns a string describing the error. */
-XMLPARSEAPI(const XML_LChar *)
-XML_ErrorString(enum XML_Error code);
-
-/* Return a string containing the version number of this expat */
-XMLPARSEAPI(const XML_LChar *)
-XML_ExpatVersion(void);
-
-typedef struct {
- int major;
- int minor;
- int micro;
-} XML_Expat_Version;
-
-/* Return an XML_Expat_Version structure containing numeric version
- number information for this version of expat.
-*/
-XMLPARSEAPI(XML_Expat_Version)
-XML_ExpatVersionInfo(void);
-
-/* Added in Expat 1.95.5. */
-enum XML_FeatureEnum {
- XML_FEATURE_END = 0,
- XML_FEATURE_UNICODE,
- XML_FEATURE_UNICODE_WCHAR_T,
- XML_FEATURE_DTD,
- XML_FEATURE_CONTEXT_BYTES,
- XML_FEATURE_MIN_SIZE,
- XML_FEATURE_SIZEOF_XML_CHAR,
- XML_FEATURE_SIZEOF_XML_LCHAR,
- XML_FEATURE_NS,
- XML_FEATURE_LARGE_SIZE
- /* Additional features must be added to the end of this enum. */
-};
-
-typedef struct {
- enum XML_FeatureEnum feature;
- const XML_LChar *name;
- long int value;
-} XML_Feature;
-
-XMLPARSEAPI(const XML_Feature *)
-XML_GetFeatureList(void);
-
-
-/* Expat follows the GNU/Linux convention of odd number minor version for
- beta/development releases and even number minor version for stable
- releases. Micro is bumped with each release, and set to 0 with each
- change to major or minor version.
-*/
-#define XML_MAJOR_VERSION 2
-#define XML_MINOR_VERSION 0
-#define XML_MICRO_VERSION 1
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not Expat_INCLUDED */
diff --git a/3rdParty/Expat/src/expat_external.h b/3rdParty/Expat/src/expat_external.h
deleted file mode 100755
index 2c03284..0000000
--- a/3rdParty/Expat/src/expat_external.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-#ifndef Expat_External_INCLUDED
-#define Expat_External_INCLUDED 1
-
-/* External API definitions */
-
-#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__)
-#define XML_USE_MSC_EXTENSIONS 1
-#endif
-
-/* Expat tries very hard to make the API boundary very specifically
- defined. There are two macros defined to control this boundary;
- each of these can be defined before including this header to
- achieve some different behavior, but doing so it not recommended or
- tested frequently.
-
- XMLCALL - The calling convention to use for all calls across the
- "library boundary." This will default to cdecl, and
- try really hard to tell the compiler that's what we
- want.
-
- XMLIMPORT - Whatever magic is needed to note that a function is
- to be imported from a dynamically loaded library
- (.dll, .so, or .sl, depending on your platform).
-
- The XMLCALL macro was added in Expat 1.95.7. The only one which is
- expected to be directly useful in client code is XMLCALL.
-
- Note that on at least some Unix versions, the Expat library must be
- compiled with the cdecl calling convention as the default since
- system headers may assume the cdecl convention.
-*/
-#ifndef XMLCALL
-#if defined(_MSC_VER)
-#define XMLCALL __cdecl
-#elif defined(__GNUC__) && defined(__i386) && !defined(__INTEL_COMPILER)
-#define XMLCALL __attribute__((cdecl))
-#else
-/* For any platform which uses this definition and supports more than
- one calling convention, we need to extend this definition to
- declare the convention used on that platform, if it's possible to
- do so.
-
- If this is the case for your platform, please file a bug report
- with information on how to identify your platform via the C
- pre-processor and how to specify the same calling convention as the
- platform's malloc() implementation.
-*/
-#define XMLCALL
-#endif
-#endif /* not defined XMLCALL */
-
-
-#if !defined(XML_STATIC) && !defined(XMLIMPORT)
-#ifndef XML_BUILDING_EXPAT
-/* using Expat from an application */
-
-#ifdef XML_USE_MSC_EXTENSIONS
-#define XMLIMPORT __declspec(dllimport)
-#endif
-
-#endif
-#endif /* not defined XML_STATIC */
-
-
-/* If we didn't define it above, define it away: */
-#ifndef XMLIMPORT
-#define XMLIMPORT
-#endif
-
-
-#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef XML_UNICODE_WCHAR_T
-#define XML_UNICODE
-#endif
-
-#ifdef XML_UNICODE /* Information is UTF-16 encoded. */
-#ifdef XML_UNICODE_WCHAR_T
-typedef wchar_t XML_Char;
-typedef wchar_t XML_LChar;
-#else
-typedef unsigned short XML_Char;
-typedef char XML_LChar;
-#endif /* XML_UNICODE_WCHAR_T */
-#else /* Information is UTF-8 encoded. */
-typedef char XML_Char;
-typedef char XML_LChar;
-#endif /* XML_UNICODE */
-
-#ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */
-#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
-typedef __int64 XML_Index;
-typedef unsigned __int64 XML_Size;
-#else
-typedef long long XML_Index;
-typedef unsigned long long XML_Size;
-#endif
-#else
-typedef long XML_Index;
-typedef unsigned long XML_Size;
-#endif /* XML_LARGE_SIZE */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not Expat_External_INCLUDED */
diff --git a/3rdParty/Expat/src/iasciitab.h b/3rdParty/Expat/src/iasciitab.h
deleted file mode 100755
index 24a1d5c..0000000
--- a/3rdParty/Expat/src/iasciitab.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */
-/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML,
-/* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML,
-/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM,
-/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS,
-/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS,
-/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL,
-/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
-/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
-/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI,
-/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST,
-/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
-/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
-/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB,
-/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT,
-/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
-/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
-/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
-/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER,
diff --git a/3rdParty/Expat/src/internal.h b/3rdParty/Expat/src/internal.h
deleted file mode 100755
index dd54548..0000000
--- a/3rdParty/Expat/src/internal.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* internal.h
-
- Internal definitions used by Expat. This is not needed to compile
- client code.
-
- The following calling convention macros are defined for frequently
- called functions:
-
- FASTCALL - Used for those internal functions that have a simple
- body and a low number of arguments and local variables.
-
- PTRCALL - Used for functions called though function pointers.
-
- PTRFASTCALL - Like PTRCALL, but for low number of arguments.
-
- inline - Used for selected internal functions for which inlining
- may improve performance on some platforms.
-
- Note: Use of these macros is based on judgement, not hard rules,
- and therefore subject to change.
-*/
-
-#if defined(__GNUC__) && defined(__i386__) && !defined(__MINGW32__)
-/* We'll use this version by default only where we know it helps.
-
- regparm() generates warnings on Solaris boxes. See SF bug #692878.
-
- Instability reported with egcs on a RedHat Linux 7.3.
- Let's comment out:
- #define FASTCALL __attribute__((stdcall, regparm(3)))
- and let's try this:
-*/
-#define FASTCALL __attribute__((regparm(3)))
-#define PTRFASTCALL __attribute__((regparm(3)))
-#endif
-
-/* Using __fastcall seems to have an unexpected negative effect under
- MS VC++, especially for function pointers, so we won't use it for
- now on that platform. It may be reconsidered for a future release
- if it can be made more effective.
- Likely reason: __fastcall on Windows is like stdcall, therefore
- the compiler cannot perform stack optimizations for call clusters.
-*/
-
-/* Make sure all of these are defined if they aren't already. */
-
-#ifndef FASTCALL
-#define FASTCALL
-#endif
-
-#ifndef PTRCALL
-#define PTRCALL
-#endif
-
-#ifndef PTRFASTCALL
-#define PTRFASTCALL
-#endif
-
-#ifndef XML_MIN_SIZE
-#if !defined(__cplusplus) && !defined(inline)
-#ifdef __GNUC__
-#define inline __inline
-#endif /* __GNUC__ */
-#endif
-#endif /* XML_MIN_SIZE */
-
-#ifdef __cplusplus
-#define inline inline
-#else
-#ifndef inline
-#define inline
-#endif
-#endif
diff --git a/3rdParty/Expat/src/latin1tab.h b/3rdParty/Expat/src/latin1tab.h
deleted file mode 100755
index 53c25d7..0000000
--- a/3rdParty/Expat/src/latin1tab.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-/* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER,
-/* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME,
-/* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER,
-/* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
-/* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
-/* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
-/* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
-/* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
diff --git a/3rdParty/Expat/src/nametab.h b/3rdParty/Expat/src/nametab.h
deleted file mode 100755
index b05e62c..0000000
--- a/3rdParty/Expat/src/nametab.h
+++ /dev/null
@@ -1,150 +0,0 @@
-static const unsigned namingBitmap[] = {
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE,
-0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF,
-0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF,
-0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF,
-0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD,
-0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF,
-0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF,
-0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE,
-0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF,
-0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000,
-0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060,
-0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003,
-0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003,
-0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000,
-0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001,
-0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003,
-0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000,
-0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003,
-0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003,
-0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000,
-0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000,
-0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF,
-0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB,
-0x40000000, 0xF580C900, 0x00000007, 0x02010800,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF,
-0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF,
-0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF,
-0x00000000, 0x00004C40, 0x00000000, 0x00000000,
-0x00000007, 0x00000000, 0x00000000, 0x00000000,
-0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF,
-0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF,
-0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000,
-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
-0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000,
-0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE,
-0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF,
-0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF,
-0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000,
-0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003,
-0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD,
-0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF,
-0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF,
-0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE,
-0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF,
-0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF,
-0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF,
-0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF,
-0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF,
-0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0,
-0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1,
-0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3,
-0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80,
-0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3,
-0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3,
-0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000,
-0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000,
-0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF,
-0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x00000000, 0x00000000,
-0x00000000, 0x00000000, 0x1FFF0000, 0x00000002,
-0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF,
-0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF,
-};
-static const unsigned char nmstrtPages[] = {
-0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00,
-0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
-0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-static const unsigned char namePages[] = {
-0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00,
-0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
-0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
-0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
diff --git a/3rdParty/Expat/src/utf8tab.h b/3rdParty/Expat/src/utf8tab.h
deleted file mode 100755
index 7bb3e77..0000000
--- a/3rdParty/Expat/src/utf8tab.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-
-/* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
-/* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
-/* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
-/* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
-/* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
-/* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
-/* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4,
-/* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
-/* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM,
diff --git a/3rdParty/Expat/src/xmlparse.c b/3rdParty/Expat/src/xmlparse.c
deleted file mode 100755
index 94e31de..0000000
--- a/3rdParty/Expat/src/xmlparse.c
+++ /dev/null
@@ -1,6287 +0,0 @@
-/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-#include <stddef.h>
-#include <string.h> /* memset(), memcpy() */
-#include <assert.h>
-
-#define XML_BUILDING_EXPAT 1
-
-#ifdef COMPILED_FROM_DSP
-#include "winconfig.h"
-#elif defined(MACOS_CLASSIC)
-#include "macconfig.h"
-#elif defined(__amigaos4__)
-#include "amigaconfig.h"
-#elif defined(__WATCOMC__)
-#include "watcomconfig.h"
-#elif defined(HAVE_EXPAT_CONFIG_H)
-#include <expat_config.h>
-#endif /* ndef COMPILED_FROM_DSP */
-
-#include "ascii.h"
-#include "expat.h"
-
-#ifdef XML_UNICODE
-#define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX
-#define XmlConvert XmlUtf16Convert
-#define XmlGetInternalEncoding XmlGetUtf16InternalEncoding
-#define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS
-#define XmlEncode XmlUtf16Encode
-/* Using pointer subtraction to convert to integer type. */
-#define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((char *)(s) - (char *)NULL) & 1))
-typedef unsigned short ICHAR;
-#else
-#define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX
-#define XmlConvert XmlUtf8Convert
-#define XmlGetInternalEncoding XmlGetUtf8InternalEncoding
-#define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS
-#define XmlEncode XmlUtf8Encode
-#define MUST_CONVERT(enc, s) (!(enc)->isUtf8)
-typedef char ICHAR;
-#endif
-
-
-#ifndef XML_NS
-
-#define XmlInitEncodingNS XmlInitEncoding
-#define XmlInitUnknownEncodingNS XmlInitUnknownEncoding
-#undef XmlGetInternalEncodingNS
-#define XmlGetInternalEncodingNS XmlGetInternalEncoding
-#define XmlParseXmlDeclNS XmlParseXmlDecl
-
-#endif
-
-#ifdef XML_UNICODE
-
-#ifdef XML_UNICODE_WCHAR_T
-#define XML_T(x) (const wchar_t)x
-#define XML_L(x) L ## x
-#else
-#define XML_T(x) (const unsigned short)x
-#define XML_L(x) x
-#endif
-
-#else
-
-#define XML_T(x) x
-#define XML_L(x) x
-
-#endif
-
-/* Round up n to be a multiple of sz, where sz is a power of 2. */
-#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1))
-
-/* Handle the case where memmove() doesn't exist. */
-#ifndef HAVE_MEMMOVE
-#ifdef HAVE_BCOPY
-#define memmove(d,s,l) bcopy((s),(d),(l))
-#else
-#error memmove does not exist on this platform, nor is a substitute available
-#endif /* HAVE_BCOPY */
-#endif /* HAVE_MEMMOVE */
-
-#include "internal.h"
-#include "xmltok.h"
-#include "xmlrole.h"
-
-typedef const XML_Char *KEY;
-
-typedef struct {
- KEY name;
-} NAMED;
-
-typedef struct {
- NAMED **v;
- unsigned char power;
- size_t size;
- size_t used;
- const XML_Memory_Handling_Suite *mem;
-} HASH_TABLE;
-
-/* Basic character hash algorithm, taken from Python's string hash:
- h = h * 1000003 ^ character, the constant being a prime number.
-
-*/
-#ifdef XML_UNICODE
-#define CHAR_HASH(h, c) \
- (((h) * 0xF4243) ^ (unsigned short)(c))
-#else
-#define CHAR_HASH(h, c) \
- (((h) * 0xF4243) ^ (unsigned char)(c))
-#endif
-
-/* For probing (after a collision) we need a step size relative prime
- to the hash table size, which is a power of 2. We use double-hashing,
- since we can calculate a second hash value cheaply by taking those bits
- of the first hash value that were discarded (masked out) when the table
- index was calculated: index = hash & mask, where mask = table->size - 1.
- We limit the maximum step size to table->size / 4 (mask >> 2) and make
- it odd, since odd numbers are always relative prime to a power of 2.
-*/
-#define SECOND_HASH(hash, mask, power) \
- ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2))
-#define PROBE_STEP(hash, mask, power) \
- ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1))
-
-typedef struct {
- NAMED **p;
- NAMED **end;
-} HASH_TABLE_ITER;
-
-#define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */
-#define INIT_DATA_BUF_SIZE 1024
-#define INIT_ATTS_SIZE 16
-#define INIT_ATTS_VERSION 0xFFFFFFFF
-#define INIT_BLOCK_SIZE 1024
-#define INIT_BUFFER_SIZE 1024
-
-#define EXPAND_SPARE 24
-
-typedef struct binding {
- struct prefix *prefix;
- struct binding *nextTagBinding;
- struct binding *prevPrefixBinding;
- const struct attribute_id *attId;
- XML_Char *uri;
- int uriLen;
- int uriAlloc;
-} BINDING;
-
-typedef struct prefix {
- const XML_Char *name;
- BINDING *binding;
-} PREFIX;
-
-typedef struct {
- const XML_Char *str;
- const XML_Char *localPart;
- const XML_Char *prefix;
- int strLen;
- int uriLen;
- int prefixLen;
-} TAG_NAME;
-
-/* TAG represents an open element.
- The name of the element is stored in both the document and API
- encodings. The memory buffer 'buf' is a separately-allocated
- memory area which stores the name. During the XML_Parse()/
- XMLParseBuffer() when the element is open, the memory for the 'raw'
- version of the name (in the document encoding) is shared with the
- document buffer. If the element is open across calls to
- XML_Parse()/XML_ParseBuffer(), the buffer is re-allocated to
- contain the 'raw' name as well.
-
- A parser re-uses these structures, maintaining a list of allocated
- TAG objects in a free list.
-*/
-typedef struct tag {
- struct tag *parent; /* parent of this element */
- const char *rawName; /* tagName in the original encoding */
- int rawNameLength;
- TAG_NAME name; /* tagName in the API encoding */
- char *buf; /* buffer for name components */
- char *bufEnd; /* end of the buffer */
- BINDING *bindings;
-} TAG;
-
-typedef struct {
- const XML_Char *name;
- const XML_Char *textPtr;
- int textLen; /* length in XML_Chars */
- int processed; /* # of processed bytes - when suspended */
- const XML_Char *systemId;
- const XML_Char *base;
- const XML_Char *publicId;
- const XML_Char *notation;
- XML_Bool open;
- XML_Bool is_param;
- XML_Bool is_internal; /* true if declared in internal subset outside PE */
-} ENTITY;
-
-typedef struct {
- enum XML_Content_Type type;
- enum XML_Content_Quant quant;
- const XML_Char * name;
- int firstchild;
- int lastchild;
- int childcnt;
- int nextsib;
-} CONTENT_SCAFFOLD;
-
-#define INIT_SCAFFOLD_ELEMENTS 32
-
-typedef struct block {
- struct block *next;
- int size;
- XML_Char s[1];
-} BLOCK;
-
-typedef struct {
- BLOCK *blocks;
- BLOCK *freeBlocks;
- const XML_Char *end;
- XML_Char *ptr;
- XML_Char *start;
- const XML_Memory_Handling_Suite *mem;
-} STRING_POOL;
-
-/* The XML_Char before the name is used to determine whether
- an attribute has been specified. */
-typedef struct attribute_id {
- XML_Char *name;
- PREFIX *prefix;
- XML_Bool maybeTokenized;
- XML_Bool xmlns;
-} ATTRIBUTE_ID;
-
-typedef struct {
- const ATTRIBUTE_ID *id;
- XML_Bool isCdata;
- const XML_Char *value;
-} DEFAULT_ATTRIBUTE;
-
-typedef struct {
- unsigned long version;
- unsigned long hash;
- const XML_Char *uriName;
-} NS_ATT;
-
-typedef struct {
- const XML_Char *name;
- PREFIX *prefix;
- const ATTRIBUTE_ID *idAtt;
- int nDefaultAtts;
- int allocDefaultAtts;
- DEFAULT_ATTRIBUTE *defaultAtts;
-} ELEMENT_TYPE;
-
-typedef struct {
- HASH_TABLE generalEntities;
- HASH_TABLE elementTypes;
- HASH_TABLE attributeIds;
- HASH_TABLE prefixes;
- STRING_POOL pool;
- STRING_POOL entityValuePool;
- /* false once a parameter entity reference has been skipped */
- XML_Bool keepProcessing;
- /* true once an internal or external PE reference has been encountered;
- this includes the reference to an external subset */
- XML_Bool hasParamEntityRefs;
- XML_Bool standalone;
-#ifdef XML_DTD
- /* indicates if external PE has been read */
- XML_Bool paramEntityRead;
- HASH_TABLE paramEntities;
-#endif /* XML_DTD */
- PREFIX defaultPrefix;
- /* === scaffolding for building content model === */
- XML_Bool in_eldecl;
- CONTENT_SCAFFOLD *scaffold;
- unsigned contentStringLen;
- unsigned scaffSize;
- unsigned scaffCount;
- int scaffLevel;
- int *scaffIndex;
-} DTD;
-
-typedef struct open_internal_entity {
- const char *internalEventPtr;
- const char *internalEventEndPtr;
- struct open_internal_entity *next;
- ENTITY *entity;
- int startTagLevel;
- XML_Bool betweenDecl; /* WFC: PE Between Declarations */
-} OPEN_INTERNAL_ENTITY;
-
-typedef enum XML_Error PTRCALL Processor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr);
-
-static Processor prologProcessor;
-static Processor prologInitProcessor;
-static Processor contentProcessor;
-static Processor cdataSectionProcessor;
-#ifdef XML_DTD
-static Processor ignoreSectionProcessor;
-static Processor externalParEntProcessor;
-static Processor externalParEntInitProcessor;
-static Processor entityValueProcessor;
-static Processor entityValueInitProcessor;
-#endif /* XML_DTD */
-static Processor epilogProcessor;
-static Processor errorProcessor;
-static Processor externalEntityInitProcessor;
-static Processor externalEntityInitProcessor2;
-static Processor externalEntityInitProcessor3;
-static Processor externalEntityContentProcessor;
-static Processor internalEntityProcessor;
-
-static enum XML_Error
-handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName);
-static enum XML_Error
-processXmlDecl(XML_Parser parser, int isGeneralTextEntity,
- const char *s, const char *next);
-static enum XML_Error
-initializeEncoding(XML_Parser parser);
-static enum XML_Error
-doProlog(XML_Parser parser, const ENCODING *enc, const char *s,
- const char *end, int tok, const char *next, const char **nextPtr,
- XML_Bool haveMore);
-static enum XML_Error
-processInternalEntity(XML_Parser parser, ENTITY *entity,
- XML_Bool betweenDecl);
-static enum XML_Error
-doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
- const char *start, const char *end, const char **endPtr,
- XML_Bool haveMore);
-static enum XML_Error
-doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr,
- const char *end, const char **nextPtr, XML_Bool haveMore);
-#ifdef XML_DTD
-static enum XML_Error
-doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr,
- const char *end, const char **nextPtr, XML_Bool haveMore);
-#endif /* XML_DTD */
-
-static enum XML_Error
-storeAtts(XML_Parser parser, const ENCODING *, const char *s,
- TAG_NAME *tagNamePtr, BINDING **bindingsPtr);
-static enum XML_Error
-addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId,
- const XML_Char *uri, BINDING **bindingsPtr);
-static int
-defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, XML_Bool isCdata,
- XML_Bool isId, const XML_Char *dfltValue, XML_Parser parser);
-static enum XML_Error
-storeAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata,
- const char *, const char *, STRING_POOL *);
-static enum XML_Error
-appendAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata,
- const char *, const char *, STRING_POOL *);
-static ATTRIBUTE_ID *
-getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start,
- const char *end);
-static int
-setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *);
-static enum XML_Error
-storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *start,
- const char *end);
-static int
-reportProcessingInstruction(XML_Parser parser, const ENCODING *enc,
- const char *start, const char *end);
-static int
-reportComment(XML_Parser parser, const ENCODING *enc, const char *start,
- const char *end);
-static void
-reportDefault(XML_Parser parser, const ENCODING *enc, const char *start,
- const char *end);
-
-static const XML_Char * getContext(XML_Parser parser);
-static XML_Bool
-setContext(XML_Parser parser, const XML_Char *context);
-
-static void FASTCALL normalizePublicId(XML_Char *s);
-
-static DTD * dtdCreate(const XML_Memory_Handling_Suite *ms);
-/* do not call if parentParser != NULL */
-static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms);
-static void
-dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms);
-static int
-dtdCopy(DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms);
-static int
-copyEntityTable(HASH_TABLE *, STRING_POOL *, const HASH_TABLE *);
-
-static NAMED *
-lookup(HASH_TABLE *table, KEY name, size_t createSize);
-static void FASTCALL
-hashTableInit(HASH_TABLE *, const XML_Memory_Handling_Suite *ms);
-static void FASTCALL hashTableClear(HASH_TABLE *);
-static void FASTCALL hashTableDestroy(HASH_TABLE *);
-static void FASTCALL
-hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *);
-static NAMED * FASTCALL hashTableIterNext(HASH_TABLE_ITER *);
-
-static void FASTCALL
-poolInit(STRING_POOL *, const XML_Memory_Handling_Suite *ms);
-static void FASTCALL poolClear(STRING_POOL *);
-static void FASTCALL poolDestroy(STRING_POOL *);
-static XML_Char *
-poolAppend(STRING_POOL *pool, const ENCODING *enc,
- const char *ptr, const char *end);
-static XML_Char *
-poolStoreString(STRING_POOL *pool, const ENCODING *enc,
- const char *ptr, const char *end);
-static XML_Bool FASTCALL poolGrow(STRING_POOL *pool);
-static const XML_Char * FASTCALL
-poolCopyString(STRING_POOL *pool, const XML_Char *s);
-static const XML_Char *
-poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n);
-static const XML_Char * FASTCALL
-poolAppendString(STRING_POOL *pool, const XML_Char *s);
-
-static int FASTCALL nextScaffoldPart(XML_Parser parser);
-static XML_Content * build_model(XML_Parser parser);
-static ELEMENT_TYPE *
-getElementType(XML_Parser parser, const ENCODING *enc,
- const char *ptr, const char *end);
-
-static XML_Parser
-parserCreate(const XML_Char *encodingName,
- const XML_Memory_Handling_Suite *memsuite,
- const XML_Char *nameSep,
- DTD *dtd);
-static void
-parserInit(XML_Parser parser, const XML_Char *encodingName);
-
-#define poolStart(pool) ((pool)->start)
-#define poolEnd(pool) ((pool)->ptr)
-#define poolLength(pool) ((pool)->ptr - (pool)->start)
-#define poolChop(pool) ((void)--(pool->ptr))
-#define poolLastChar(pool) (((pool)->ptr)[-1])
-#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
-#define poolFinish(pool) ((pool)->start = (pool)->ptr)
-#define poolAppendChar(pool, c) \
- (((pool)->ptr == (pool)->end && !poolGrow(pool)) \
- ? 0 \
- : ((*((pool)->ptr)++ = c), 1))
-
-struct XML_ParserStruct {
- /* The first member must be userData so that the XML_GetUserData
- macro works. */
- void *m_userData;
- void *m_handlerArg;
- char *m_buffer;
- const XML_Memory_Handling_Suite m_mem;
- /* first character to be parsed */
- const char *m_bufferPtr;
- /* past last character to be parsed */
- char *m_bufferEnd;
- /* allocated end of buffer */
- const char *m_bufferLim;
- XML_Index m_parseEndByteIndex;
- const char *m_parseEndPtr;
- XML_Char *m_dataBuf;
- XML_Char *m_dataBufEnd;
- XML_StartElementHandler m_startElementHandler;
- XML_EndElementHandler m_endElementHandler;
- XML_CharacterDataHandler m_characterDataHandler;
- XML_ProcessingInstructionHandler m_processingInstructionHandler;
- XML_CommentHandler m_commentHandler;
- XML_StartCdataSectionHandler m_startCdataSectionHandler;
- XML_EndCdataSectionHandler m_endCdataSectionHandler;
- XML_DefaultHandler m_defaultHandler;
- XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler;
- XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler;
- XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler;
- XML_NotationDeclHandler m_notationDeclHandler;
- XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler;
- XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler;
- XML_NotStandaloneHandler m_notStandaloneHandler;
- XML_ExternalEntityRefHandler m_externalEntityRefHandler;
- XML_Parser m_externalEntityRefHandlerArg;
- XML_SkippedEntityHandler m_skippedEntityHandler;
- XML_UnknownEncodingHandler m_unknownEncodingHandler;
- XML_ElementDeclHandler m_elementDeclHandler;
- XML_AttlistDeclHandler m_attlistDeclHandler;
- XML_EntityDeclHandler m_entityDeclHandler;
- XML_XmlDeclHandler m_xmlDeclHandler;
- const ENCODING *m_encoding;
- INIT_ENCODING m_initEncoding;
- const ENCODING *m_internalEncoding;
- const XML_Char *m_protocolEncodingName;
- XML_Bool m_ns;
- XML_Bool m_ns_triplets;
- void *m_unknownEncodingMem;
- void *m_unknownEncodingData;
- void *m_unknownEncodingHandlerData;
- void (XMLCALL *m_unknownEncodingRelease)(void *);
- PROLOG_STATE m_prologState;
- Processor *m_processor;
- enum XML_Error m_errorCode;
- const char *m_eventPtr;
- const char *m_eventEndPtr;
- const char *m_positionPtr;
- OPEN_INTERNAL_ENTITY *m_openInternalEntities;
- OPEN_INTERNAL_ENTITY *m_freeInternalEntities;
- XML_Bool m_defaultExpandInternalEntities;
- int m_tagLevel;
- ENTITY *m_declEntity;
- const XML_Char *m_doctypeName;
- const XML_Char *m_doctypeSysid;
- const XML_Char *m_doctypePubid;
- const XML_Char *m_declAttributeType;
- const XML_Char *m_declNotationName;
- const XML_Char *m_declNotationPublicId;
- ELEMENT_TYPE *m_declElementType;
- ATTRIBUTE_ID *m_declAttributeId;
- XML_Bool m_declAttributeIsCdata;
- XML_Bool m_declAttributeIsId;
- DTD *m_dtd;
- const XML_Char *m_curBase;
- TAG *m_tagStack;
- TAG *m_freeTagList;
- BINDING *m_inheritedBindings;
- BINDING *m_freeBindingList;
- int m_attsSize;
- int m_nSpecifiedAtts;
- int m_idAttIndex;
- ATTRIBUTE *m_atts;
- NS_ATT *m_nsAtts;
- unsigned long m_nsAttsVersion;
- unsigned char m_nsAttsPower;
- POSITION m_position;
- STRING_POOL m_tempPool;
- STRING_POOL m_temp2Pool;
- char *m_groupConnector;
- unsigned int m_groupSize;
- XML_Char m_namespaceSeparator;
- XML_Parser m_parentParser;
- XML_ParsingStatus m_parsingStatus;
-#ifdef XML_DTD
- XML_Bool m_isParamEntity;
- XML_Bool m_useForeignDTD;
- enum XML_ParamEntityParsing m_paramEntityParsing;
-#endif
-};
-
-#define MALLOC(s) (parser->m_mem.malloc_fcn((s)))
-#define REALLOC(p,s) (parser->m_mem.realloc_fcn((p),(s)))
-#define FREE(p) (parser->m_mem.free_fcn((p)))
-
-#define userData (parser->m_userData)
-#define handlerArg (parser->m_handlerArg)
-#define startElementHandler (parser->m_startElementHandler)
-#define endElementHandler (parser->m_endElementHandler)
-#define characterDataHandler (parser->m_characterDataHandler)
-#define processingInstructionHandler \
- (parser->m_processingInstructionHandler)
-#define commentHandler (parser->m_commentHandler)
-#define startCdataSectionHandler \
- (parser->m_startCdataSectionHandler)
-#define endCdataSectionHandler (parser->m_endCdataSectionHandler)
-#define defaultHandler (parser->m_defaultHandler)
-#define startDoctypeDeclHandler (parser->m_startDoctypeDeclHandler)
-#define endDoctypeDeclHandler (parser->m_endDoctypeDeclHandler)
-#define unparsedEntityDeclHandler \
- (parser->m_unparsedEntityDeclHandler)
-#define notationDeclHandler (parser->m_notationDeclHandler)
-#define startNamespaceDeclHandler \
- (parser->m_startNamespaceDeclHandler)
-#define endNamespaceDeclHandler (parser->m_endNamespaceDeclHandler)
-#define notStandaloneHandler (parser->m_notStandaloneHandler)
-#define externalEntityRefHandler \
- (parser->m_externalEntityRefHandler)
-#define externalEntityRefHandlerArg \
- (parser->m_externalEntityRefHandlerArg)
-#define internalEntityRefHandler \
- (parser->m_internalEntityRefHandler)
-#define skippedEntityHandler (parser->m_skippedEntityHandler)
-#define unknownEncodingHandler (parser->m_unknownEncodingHandler)
-#define elementDeclHandler (parser->m_elementDeclHandler)
-#define attlistDeclHandler (parser->m_attlistDeclHandler)
-#define entityDeclHandler (parser->m_entityDeclHandler)
-#define xmlDeclHandler (parser->m_xmlDeclHandler)
-#define encoding (parser->m_encoding)
-#define initEncoding (parser->m_initEncoding)
-#define internalEncoding (parser->m_internalEncoding)
-#define unknownEncodingMem (parser->m_unknownEncodingMem)
-#define unknownEncodingData (parser->m_unknownEncodingData)
-#define unknownEncodingHandlerData \
- (parser->m_unknownEncodingHandlerData)
-#define unknownEncodingRelease (parser->m_unknownEncodingRelease)
-#define protocolEncodingName (parser->m_protocolEncodingName)
-#define ns (parser->m_ns)
-#define ns_triplets (parser->m_ns_triplets)
-#define prologState (parser->m_prologState)
-#define processor (parser->m_processor)
-#define errorCode (parser->m_errorCode)
-#define eventPtr (parser->m_eventPtr)
-#define eventEndPtr (parser->m_eventEndPtr)
-#define positionPtr (parser->m_positionPtr)
-#define position (parser->m_position)
-#define openInternalEntities (parser->m_openInternalEntities)
-#define freeInternalEntities (parser->m_freeInternalEntities)
-#define defaultExpandInternalEntities \
- (parser->m_defaultExpandInternalEntities)
-#define tagLevel (parser->m_tagLevel)
-#define buffer (parser->m_buffer)
-#define bufferPtr (parser->m_bufferPtr)
-#define bufferEnd (parser->m_bufferEnd)
-#define parseEndByteIndex (parser->m_parseEndByteIndex)
-#define parseEndPtr (parser->m_parseEndPtr)
-#define bufferLim (parser->m_bufferLim)
-#define dataBuf (parser->m_dataBuf)
-#define dataBufEnd (parser->m_dataBufEnd)
-#define _dtd (parser->m_dtd)
-#define curBase (parser->m_curBase)
-#define declEntity (parser->m_declEntity)
-#define doctypeName (parser->m_doctypeName)
-#define doctypeSysid (parser->m_doctypeSysid)
-#define doctypePubid (parser->m_doctypePubid)
-#define declAttributeType (parser->m_declAttributeType)
-#define declNotationName (parser->m_declNotationName)
-#define declNotationPublicId (parser->m_declNotationPublicId)
-#define declElementType (parser->m_declElementType)
-#define declAttributeId (parser->m_declAttributeId)
-#define declAttributeIsCdata (parser->m_declAttributeIsCdata)
-#define declAttributeIsId (parser->m_declAttributeIsId)
-#define freeTagList (parser->m_freeTagList)
-#define freeBindingList (parser->m_freeBindingList)
-#define inheritedBindings (parser->m_inheritedBindings)
-#define tagStack (parser->m_tagStack)
-#define atts (parser->m_atts)
-#define attsSize (parser->m_attsSize)
-#define nSpecifiedAtts (parser->m_nSpecifiedAtts)
-#define idAttIndex (parser->m_idAttIndex)
-#define nsAtts (parser->m_nsAtts)
-#define nsAttsVersion (parser->m_nsAttsVersion)
-#define nsAttsPower (parser->m_nsAttsPower)
-#define tempPool (parser->m_tempPool)
-#define temp2Pool (parser->m_temp2Pool)
-#define groupConnector (parser->m_groupConnector)
-#define groupSize (parser->m_groupSize)
-#define namespaceSeparator (parser->m_namespaceSeparator)
-#define parentParser (parser->m_parentParser)
-#define ps_parsing (parser->m_parsingStatus.parsing)
-#define ps_finalBuffer (parser->m_parsingStatus.finalBuffer)
-#ifdef XML_DTD
-#define isParamEntity (parser->m_isParamEntity)
-#define useForeignDTD (parser->m_useForeignDTD)
-#define paramEntityParsing (parser->m_paramEntityParsing)
-#endif /* XML_DTD */
-
-XML_Parser XMLCALL
-XML_ParserCreate(const XML_Char *encodingName)
-{
- return XML_ParserCreate_MM(encodingName, NULL, NULL);
-}
-
-XML_Parser XMLCALL
-XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep)
-{
- XML_Char tmp[2];
- *tmp = nsSep;
- return XML_ParserCreate_MM(encodingName, NULL, tmp);
-}
-
-static const XML_Char implicitContext[] = {
- ASCII_x, ASCII_m, ASCII_l, ASCII_EQUALS, ASCII_h, ASCII_t, ASCII_t, ASCII_p,
- ASCII_COLON, ASCII_SLASH, ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w,
- ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g,
- ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L, ASCII_SLASH, ASCII_1, ASCII_9,
- ASCII_9, ASCII_8, ASCII_SLASH, ASCII_n, ASCII_a, ASCII_m, ASCII_e,
- ASCII_s, ASCII_p, ASCII_a, ASCII_c, ASCII_e, '\0'
-};
-
-XML_Parser XMLCALL
-XML_ParserCreate_MM(const XML_Char *encodingName,
- const XML_Memory_Handling_Suite *memsuite,
- const XML_Char *nameSep)
-{
- XML_Parser parser = parserCreate(encodingName, memsuite, nameSep, NULL);
- if (parser != NULL && ns) {
- /* implicit context only set for root parser, since child
- parsers (i.e. external entity parsers) will inherit it
- */
- if (!setContext(parser, implicitContext)) {
- XML_ParserFree(parser);
- return NULL;
- }
- }
- return parser;
-}
-
-static XML_Parser
-parserCreate(const XML_Char *encodingName,
- const XML_Memory_Handling_Suite *memsuite,
- const XML_Char *nameSep,
- DTD *dtd)
-{
- XML_Parser parser;
-
- if (memsuite) {
- XML_Memory_Handling_Suite *mtemp;
- parser = (XML_Parser)
- memsuite->malloc_fcn(sizeof(struct XML_ParserStruct));
- if (parser != NULL) {
- mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem);
- mtemp->malloc_fcn = memsuite->malloc_fcn;
- mtemp->realloc_fcn = memsuite->realloc_fcn;
- mtemp->free_fcn = memsuite->free_fcn;
- }
- }
- else {
- XML_Memory_Handling_Suite *mtemp;
- parser = (XML_Parser)malloc(sizeof(struct XML_ParserStruct));
- if (parser != NULL) {
- mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem);
- mtemp->malloc_fcn = malloc;
- mtemp->realloc_fcn = realloc;
- mtemp->free_fcn = free;
- }
- }
-
- if (!parser)
- return parser;
-
- buffer = NULL;
- bufferLim = NULL;
-
- attsSize = INIT_ATTS_SIZE;
- atts = (ATTRIBUTE *)MALLOC(attsSize * sizeof(ATTRIBUTE));
- if (atts == NULL) {
- FREE(parser);
- return NULL;
- }
- dataBuf = (XML_Char *)MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char));
- if (dataBuf == NULL) {
- FREE(atts);
- FREE(parser);
- return NULL;
- }
- dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE;
-
- if (dtd)
- _dtd = dtd;
- else {
- _dtd = dtdCreate(&parser->m_mem);
- if (_dtd == NULL) {
- FREE(dataBuf);
- FREE(atts);
- FREE(parser);
- return NULL;
- }
- }
-
- freeBindingList = NULL;
- freeTagList = NULL;
- freeInternalEntities = NULL;
-
- groupSize = 0;
- groupConnector = NULL;
-
- unknownEncodingHandler = NULL;
- unknownEncodingHandlerData = NULL;
-
- namespaceSeparator = ASCII_EXCL;
- ns = XML_FALSE;
- ns_triplets = XML_FALSE;
-
- nsAtts = NULL;
- nsAttsVersion = 0;
- nsAttsPower = 0;
-
- poolInit(&tempPool, &(parser->m_mem));
- poolInit(&temp2Pool, &(parser->m_mem));
- parserInit(parser, encodingName);
-
- if (encodingName && !protocolEncodingName) {
- XML_ParserFree(parser);
- return NULL;
- }
-
- if (nameSep) {
- ns = XML_TRUE;
- internalEncoding = XmlGetInternalEncodingNS();
- namespaceSeparator = *nameSep;
- }
- else {
- internalEncoding = XmlGetInternalEncoding();
- }
-
- return parser;
-}
-
-static void
-parserInit(XML_Parser parser, const XML_Char *encodingName)
-{
- processor = prologInitProcessor;
- XmlPrologStateInit(&prologState);
- protocolEncodingName = (encodingName != NULL
- ? poolCopyString(&tempPool, encodingName)
- : NULL);
- curBase = NULL;
- XmlInitEncoding(&initEncoding, &encoding, 0);
- userData = NULL;
- handlerArg = NULL;
- startElementHandler = NULL;
- endElementHandler = NULL;
- characterDataHandler = NULL;
- processingInstructionHandler = NULL;
- commentHandler = NULL;
- startCdataSectionHandler = NULL;
- endCdataSectionHandler = NULL;
- defaultHandler = NULL;
- startDoctypeDeclHandler = NULL;
- endDoctypeDeclHandler = NULL;
- unparsedEntityDeclHandler = NULL;
- notationDeclHandler = NULL;
- startNamespaceDeclHandler = NULL;
- endNamespaceDeclHandler = NULL;
- notStandaloneHandler = NULL;
- externalEntityRefHandler = NULL;
- externalEntityRefHandlerArg = parser;
- skippedEntityHandler = NULL;
- elementDeclHandler = NULL;
- attlistDeclHandler = NULL;
- entityDeclHandler = NULL;
- xmlDeclHandler = NULL;
- bufferPtr = buffer;
- bufferEnd = buffer;
- parseEndByteIndex = 0;
- parseEndPtr = NULL;
- declElementType = NULL;
- declAttributeId = NULL;
- declEntity = NULL;
- doctypeName = NULL;
- doctypeSysid = NULL;
- doctypePubid = NULL;
- declAttributeType = NULL;
- declNotationName = NULL;
- declNotationPublicId = NULL;
- declAttributeIsCdata = XML_FALSE;
- declAttributeIsId = XML_FALSE;
- memset(&position, 0, sizeof(POSITION));
- errorCode = XML_ERROR_NONE;
- eventPtr = NULL;
- eventEndPtr = NULL;
- positionPtr = NULL;
- openInternalEntities = NULL;
- defaultExpandInternalEntities = XML_TRUE;
- tagLevel = 0;
- tagStack = NULL;
- inheritedBindings = NULL;
- nSpecifiedAtts = 0;
- unknownEncodingMem = NULL;
- unknownEncodingRelease = NULL;
- unknownEncodingData = NULL;
- parentParser = NULL;
- ps_parsing = XML_INITIALIZED;
-#ifdef XML_DTD
- isParamEntity = XML_FALSE;
- useForeignDTD = XML_FALSE;
- paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
-#endif
-}
-
-/* moves list of bindings to freeBindingList */
-static void FASTCALL
-moveToFreeBindingList(XML_Parser parser, BINDING *bindings)
-{
- while (bindings) {
- BINDING *b = bindings;
- bindings = bindings->nextTagBinding;
- b->nextTagBinding = freeBindingList;
- freeBindingList = b;
- }
-}
-
-XML_Bool XMLCALL
-XML_ParserReset(XML_Parser parser, const XML_Char *encodingName)
-{
- TAG *tStk;
- OPEN_INTERNAL_ENTITY *openEntityList;
- if (parentParser)
- return XML_FALSE;
- /* move tagStack to freeTagList */
- tStk = tagStack;
- while (tStk) {
- TAG *tag = tStk;
- tStk = tStk->parent;
- tag->parent = freeTagList;
- moveToFreeBindingList(parser, tag->bindings);
- tag->bindings = NULL;
- freeTagList = tag;
- }
- /* move openInternalEntities to freeInternalEntities */
- openEntityList = openInternalEntities;
- while (openEntityList) {
- OPEN_INTERNAL_ENTITY *openEntity = openEntityList;
- openEntityList = openEntity->next;
- openEntity->next = freeInternalEntities;
- freeInternalEntities = openEntity;
- }
- moveToFreeBindingList(parser, inheritedBindings);
- FREE(unknownEncodingMem);
- if (unknownEncodingRelease)
- unknownEncodingRelease(unknownEncodingData);
- poolClear(&tempPool);
- poolClear(&temp2Pool);
- parserInit(parser, encodingName);
- dtdReset(_dtd, &parser->m_mem);
- return setContext(parser, implicitContext);
-}
-
-enum XML_Status XMLCALL
-XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName)
-{
- /* Block after XML_Parse()/XML_ParseBuffer() has been called.
- XXX There's no way for the caller to determine which of the
- XXX possible error cases caused the XML_STATUS_ERROR return.
- */
- if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
- return XML_STATUS_ERROR;
- if (encodingName == NULL)
- protocolEncodingName = NULL;
- else {
- protocolEncodingName = poolCopyString(&tempPool, encodingName);
- if (!protocolEncodingName)
- return XML_STATUS_ERROR;
- }
- return XML_STATUS_OK;
-}
-
-XML_Parser XMLCALL
-XML_ExternalEntityParserCreate(XML_Parser oldParser,
- const XML_Char *context,
- const XML_Char *encodingName)
-{
- XML_Parser parser = oldParser;
- DTD *newDtd = NULL;
- DTD *oldDtd = _dtd;
- XML_StartElementHandler oldStartElementHandler = startElementHandler;
- XML_EndElementHandler oldEndElementHandler = endElementHandler;
- XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler;
- XML_ProcessingInstructionHandler oldProcessingInstructionHandler
- = processingInstructionHandler;
- XML_CommentHandler oldCommentHandler = commentHandler;
- XML_StartCdataSectionHandler oldStartCdataSectionHandler
- = startCdataSectionHandler;
- XML_EndCdataSectionHandler oldEndCdataSectionHandler
- = endCdataSectionHandler;
- XML_DefaultHandler oldDefaultHandler = defaultHandler;
- XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler
- = unparsedEntityDeclHandler;
- XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler;
- XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler
- = startNamespaceDeclHandler;
- XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler
- = endNamespaceDeclHandler;
- XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler;
- XML_ExternalEntityRefHandler oldExternalEntityRefHandler
- = externalEntityRefHandler;
- XML_SkippedEntityHandler oldSkippedEntityHandler = skippedEntityHandler;
- XML_UnknownEncodingHandler oldUnknownEncodingHandler
- = unknownEncodingHandler;
- XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler;
- XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler;
- XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler;
- XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler;
- ELEMENT_TYPE * oldDeclElementType = declElementType;
-
- void *oldUserData = userData;
- void *oldHandlerArg = handlerArg;
- XML_Bool oldDefaultExpandInternalEntities = defaultExpandInternalEntities;
- XML_Parser oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg;
-#ifdef XML_DTD
- enum XML_ParamEntityParsing oldParamEntityParsing = paramEntityParsing;
- int oldInEntityValue = prologState.inEntityValue;
-#endif
- XML_Bool oldns_triplets = ns_triplets;
-
-#ifdef XML_DTD
- if (!context)
- newDtd = oldDtd;
-#endif /* XML_DTD */
-
- /* Note that the magical uses of the pre-processor to make field
- access look more like C++ require that `parser' be overwritten
- here. This makes this function more painful to follow than it
- would be otherwise.
- */
- if (ns) {
- XML_Char tmp[2];
- *tmp = namespaceSeparator;
- parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd);
- }
- else {
- parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd);
- }
-
- if (!parser)
- return NULL;
-
- startElementHandler = oldStartElementHandler;
- endElementHandler = oldEndElementHandler;
- characterDataHandler = oldCharacterDataHandler;
- processingInstructionHandler = oldProcessingInstructionHandler;
- commentHandler = oldCommentHandler;
- startCdataSectionHandler = oldStartCdataSectionHandler;
- endCdataSectionHandler = oldEndCdataSectionHandler;
- defaultHandler = oldDefaultHandler;
- unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler;
- notationDeclHandler = oldNotationDeclHandler;
- startNamespaceDeclHandler = oldStartNamespaceDeclHandler;
- endNamespaceDeclHandler = oldEndNamespaceDeclHandler;
- notStandaloneHandler = oldNotStandaloneHandler;
- externalEntityRefHandler = oldExternalEntityRefHandler;
- skippedEntityHandler = oldSkippedEntityHandler;
- unknownEncodingHandler = oldUnknownEncodingHandler;
- elementDeclHandler = oldElementDeclHandler;
- attlistDeclHandler = oldAttlistDeclHandler;
- entityDeclHandler = oldEntityDeclHandler;
- xmlDeclHandler = oldXmlDeclHandler;
- declElementType = oldDeclElementType;
- userData = oldUserData;
- if (oldUserData == oldHandlerArg)
- handlerArg = userData;
- else
- handlerArg = parser;
- if (oldExternalEntityRefHandlerArg != oldParser)
- externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg;
- defaultExpandInternalEntities = oldDefaultExpandInternalEntities;
- ns_triplets = oldns_triplets;
- parentParser = oldParser;
-#ifdef XML_DTD
- paramEntityParsing = oldParamEntityParsing;
- prologState.inEntityValue = oldInEntityValue;
- if (context) {
-#endif /* XML_DTD */
- if (!dtdCopy(_dtd, oldDtd, &parser->m_mem)
- || !setContext(parser, context)) {
- XML_ParserFree(parser);
- return NULL;
- }
- processor = externalEntityInitProcessor;
-#ifdef XML_DTD
- }
- else {
- /* The DTD instance referenced by _dtd is shared between the document's
- root parser and external PE parsers, therefore one does not need to
- call setContext. In addition, one also *must* not call setContext,
- because this would overwrite existing prefix->binding pointers in
- _dtd with ones that get destroyed with the external PE parser.
- This would leave those prefixes with dangling pointers.
- */
- isParamEntity = XML_TRUE;
- XmlPrologStateInitExternalEntity(&prologState);
- processor = externalParEntInitProcessor;
- }
-#endif /* XML_DTD */
- return parser;
-}
-
-static void FASTCALL
-destroyBindings(BINDING *bindings, XML_Parser parser)
-{
- for (;;) {
- BINDING *b = bindings;
- if (!b)
- break;
- bindings = b->nextTagBinding;
- FREE(b->uri);
- FREE(b);
- }
-}
-
-void XMLCALL
-XML_ParserFree(XML_Parser parser)
-{
- TAG *tagList;
- OPEN_INTERNAL_ENTITY *entityList;
- if (parser == NULL)
- return;
- /* free tagStack and freeTagList */
- tagList = tagStack;
- for (;;) {
- TAG *p;
- if (tagList == NULL) {
- if (freeTagList == NULL)
- break;
- tagList = freeTagList;
- freeTagList = NULL;
- }
- p = tagList;
- tagList = tagList->parent;
- FREE(p->buf);
- destroyBindings(p->bindings, parser);
- FREE(p);
- }
- /* free openInternalEntities and freeInternalEntities */
- entityList = openInternalEntities;
- for (;;) {
- OPEN_INTERNAL_ENTITY *openEntity;
- if (entityList == NULL) {
- if (freeInternalEntities == NULL)
- break;
- entityList = freeInternalEntities;
- freeInternalEntities = NULL;
- }
- openEntity = entityList;
- entityList = entityList->next;
- FREE(openEntity);
- }
-
- destroyBindings(freeBindingList, parser);
- destroyBindings(inheritedBindings, parser);
- poolDestroy(&tempPool);
- poolDestroy(&temp2Pool);
-#ifdef XML_DTD
- /* external parameter entity parsers share the DTD structure
- parser->m_dtd with the root parser, so we must not destroy it
- */
- if (!isParamEntity && _dtd)
-#else
- if (_dtd)
-#endif /* XML_DTD */
- dtdDestroy(_dtd, (XML_Bool)!parentParser, &parser->m_mem);
- FREE((void *)atts);
- FREE(groupConnector);
- FREE(buffer);
- FREE(dataBuf);
- FREE(nsAtts);
- FREE(unknownEncodingMem);
- if (unknownEncodingRelease)
- unknownEncodingRelease(unknownEncodingData);
- FREE(parser);
-}
-
-void XMLCALL
-XML_UseParserAsHandlerArg(XML_Parser parser)
-{
- handlerArg = parser;
-}
-
-enum XML_Error XMLCALL
-XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD)
-{
-#ifdef XML_DTD
- /* block after XML_Parse()/XML_ParseBuffer() has been called */
- if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
- return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING;
- useForeignDTD = useDTD;
- return XML_ERROR_NONE;
-#else
- return XML_ERROR_FEATURE_REQUIRES_XML_DTD;
-#endif
-}
-
-void XMLCALL
-XML_SetReturnNSTriplet(XML_Parser parser, int do_nst)
-{
- /* block after XML_Parse()/XML_ParseBuffer() has been called */
- if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
- return;
- ns_triplets = do_nst ? XML_TRUE : XML_FALSE;
-}
-
-void XMLCALL
-XML_SetUserData(XML_Parser parser, void *p)
-{
- if (handlerArg == userData)
- handlerArg = userData = p;
- else
- userData = p;
-}
-
-enum XML_Status XMLCALL
-XML_SetBase(XML_Parser parser, const XML_Char *p)
-{
- if (p) {
- p = poolCopyString(&_dtd->pool, p);
- if (!p)
- return XML_STATUS_ERROR;
- curBase = p;
- }
- else
- curBase = NULL;
- return XML_STATUS_OK;
-}
-
-const XML_Char * XMLCALL
-XML_GetBase(XML_Parser parser)
-{
- return curBase;
-}
-
-int XMLCALL
-XML_GetSpecifiedAttributeCount(XML_Parser parser)
-{
- return nSpecifiedAtts;
-}
-
-int XMLCALL
-XML_GetIdAttributeIndex(XML_Parser parser)
-{
- return idAttIndex;
-}
-
-void XMLCALL
-XML_SetElementHandler(XML_Parser parser,
- XML_StartElementHandler start,
- XML_EndElementHandler end)
-{
- startElementHandler = start;
- endElementHandler = end;
-}
-
-void XMLCALL
-XML_SetStartElementHandler(XML_Parser parser,
- XML_StartElementHandler start) {
- startElementHandler = start;
-}
-
-void XMLCALL
-XML_SetEndElementHandler(XML_Parser parser,
- XML_EndElementHandler end) {
- endElementHandler = end;
-}
-
-void XMLCALL
-XML_SetCharacterDataHandler(XML_Parser parser,
- XML_CharacterDataHandler handler)
-{
- characterDataHandler = handler;
-}
-
-void XMLCALL
-XML_SetProcessingInstructionHandler(XML_Parser parser,
- XML_ProcessingInstructionHandler handler)
-{
- processingInstructionHandler = handler;
-}
-
-void XMLCALL
-XML_SetCommentHandler(XML_Parser parser,
- XML_CommentHandler handler)
-{
- commentHandler = handler;
-}
-
-void XMLCALL
-XML_SetCdataSectionHandler(XML_Parser parser,
- XML_StartCdataSectionHandler start,
- XML_EndCdataSectionHandler end)
-{
- startCdataSectionHandler = start;
- endCdataSectionHandler = end;
-}
-
-void XMLCALL
-XML_SetStartCdataSectionHandler(XML_Parser parser,
- XML_StartCdataSectionHandler start) {
- startCdataSectionHandler = start;
-}
-
-void XMLCALL
-XML_SetEndCdataSectionHandler(XML_Parser parser,
- XML_EndCdataSectionHandler end) {
- endCdataSectionHandler = end;
-}
-
-void XMLCALL
-XML_SetDefaultHandler(XML_Parser parser,
- XML_DefaultHandler handler)
-{
- defaultHandler = handler;
- defaultExpandInternalEntities = XML_FALSE;
-}
-
-void XMLCALL
-XML_SetDefaultHandlerExpand(XML_Parser parser,
- XML_DefaultHandler handler)
-{
- defaultHandler = handler;
- defaultExpandInternalEntities = XML_TRUE;
-}
-
-void XMLCALL
-XML_SetDoctypeDeclHandler(XML_Parser parser,
- XML_StartDoctypeDeclHandler start,
- XML_EndDoctypeDeclHandler end)
-{
- startDoctypeDeclHandler = start;
- endDoctypeDeclHandler = end;
-}
-
-void XMLCALL
-XML_SetStartDoctypeDeclHandler(XML_Parser parser,
- XML_StartDoctypeDeclHandler start) {
- startDoctypeDeclHandler = start;
-}
-
-void XMLCALL
-XML_SetEndDoctypeDeclHandler(XML_Parser parser,
- XML_EndDoctypeDeclHandler end) {
- endDoctypeDeclHandler = end;
-}
-
-void XMLCALL
-XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
- XML_UnparsedEntityDeclHandler handler)
-{
- unparsedEntityDeclHandler = handler;
-}
-
-void XMLCALL
-XML_SetNotationDeclHandler(XML_Parser parser,
- XML_NotationDeclHandler handler)
-{
- notationDeclHandler = handler;
-}
-
-void XMLCALL
-XML_SetNamespaceDeclHandler(XML_Parser parser,
- XML_StartNamespaceDeclHandler start,
- XML_EndNamespaceDeclHandler end)
-{
- startNamespaceDeclHandler = start;
- endNamespaceDeclHandler = end;
-}
-
-void XMLCALL
-XML_SetStartNamespaceDeclHandler(XML_Parser parser,
- XML_StartNamespaceDeclHandler start) {
- startNamespaceDeclHandler = start;
-}
-
-void XMLCALL
-XML_SetEndNamespaceDeclHandler(XML_Parser parser,
- XML_EndNamespaceDeclHandler end) {
- endNamespaceDeclHandler = end;
-}
-
-void XMLCALL
-XML_SetNotStandaloneHandler(XML_Parser parser,
- XML_NotStandaloneHandler handler)
-{
- notStandaloneHandler = handler;
-}
-
-void XMLCALL
-XML_SetExternalEntityRefHandler(XML_Parser parser,
- XML_ExternalEntityRefHandler handler)
-{
- externalEntityRefHandler = handler;
-}
-
-void XMLCALL
-XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg)
-{
- if (arg)
- externalEntityRefHandlerArg = (XML_Parser)arg;
- else
- externalEntityRefHandlerArg = parser;
-}
-
-void XMLCALL
-XML_SetSkippedEntityHandler(XML_Parser parser,
- XML_SkippedEntityHandler handler)
-{
- skippedEntityHandler = handler;
-}
-
-void XMLCALL
-XML_SetUnknownEncodingHandler(XML_Parser parser,
- XML_UnknownEncodingHandler handler,
- void *data)
-{
- unknownEncodingHandler = handler;
- unknownEncodingHandlerData = data;
-}
-
-void XMLCALL
-XML_SetElementDeclHandler(XML_Parser parser,
- XML_ElementDeclHandler eldecl)
-{
- elementDeclHandler = eldecl;
-}
-
-void XMLCALL
-XML_SetAttlistDeclHandler(XML_Parser parser,
- XML_AttlistDeclHandler attdecl)
-{
- attlistDeclHandler = attdecl;
-}
-
-void XMLCALL
-XML_SetEntityDeclHandler(XML_Parser parser,
- XML_EntityDeclHandler handler)
-{
- entityDeclHandler = handler;
-}
-
-void XMLCALL
-XML_SetXmlDeclHandler(XML_Parser parser,
- XML_XmlDeclHandler handler) {
- xmlDeclHandler = handler;
-}
-
-int XMLCALL
-XML_SetParamEntityParsing(XML_Parser parser,
- enum XML_ParamEntityParsing peParsing)
-{
- /* block after XML_Parse()/XML_ParseBuffer() has been called */
- if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)
- return 0;
-#ifdef XML_DTD
- paramEntityParsing = peParsing;
- return 1;
-#else
- return peParsing == XML_PARAM_ENTITY_PARSING_NEVER;
-#endif
-}
-
-enum XML_Status XMLCALL
-XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
-{
- switch (ps_parsing) {
- case XML_SUSPENDED:
- errorCode = XML_ERROR_SUSPENDED;
- return XML_STATUS_ERROR;
- case XML_FINISHED:
- errorCode = XML_ERROR_FINISHED;
- return XML_STATUS_ERROR;
- default:
- ps_parsing = XML_PARSING;
- }
-
- if (len == 0) {
- ps_finalBuffer = (XML_Bool)isFinal;
- if (!isFinal)
- return XML_STATUS_OK;
- positionPtr = bufferPtr;
- parseEndPtr = bufferEnd;
-
- /* If data are left over from last buffer, and we now know that these
- data are the final chunk of input, then we have to check them again
- to detect errors based on that fact.
- */
- errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr);
-
- if (errorCode == XML_ERROR_NONE) {
- switch (ps_parsing) {
- case XML_SUSPENDED:
- XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
- positionPtr = bufferPtr;
- return XML_STATUS_SUSPENDED;
- case XML_INITIALIZED:
- case XML_PARSING:
- ps_parsing = XML_FINISHED;
- /* fall through */
- default:
- return XML_STATUS_OK;
- }
- }
- eventEndPtr = eventPtr;
- processor = errorProcessor;
- return XML_STATUS_ERROR;
- }
-#ifndef XML_CONTEXT_BYTES
- else if (bufferPtr == bufferEnd) {
- const char *end;
- int nLeftOver;
- enum XML_Error result;
- parseEndByteIndex += len;
- positionPtr = s;
- ps_finalBuffer = (XML_Bool)isFinal;
-
- errorCode = processor(parser, s, parseEndPtr = s + len, &end);
-
- if (errorCode != XML_ERROR_NONE) {
- eventEndPtr = eventPtr;
- processor = errorProcessor;
- return XML_STATUS_ERROR;
- }
- else {
- switch (ps_parsing) {
- case XML_SUSPENDED:
- result = XML_STATUS_SUSPENDED;
- break;
- case XML_INITIALIZED:
- case XML_PARSING:
- result = XML_STATUS_OK;
- if (isFinal) {
- ps_parsing = XML_FINISHED;
- return result;
- }
- }
- }
-
- XmlUpdatePosition(encoding, positionPtr, end, &position);
- nLeftOver = s + len - end;
- if (nLeftOver) {
- if (buffer == NULL || nLeftOver > bufferLim - buffer) {
- /* FIXME avoid integer overflow */
- char *temp;
- temp = (buffer == NULL
- ? (char *)MALLOC(len * 2)
- : (char *)REALLOC(buffer, len * 2));
- if (temp == NULL) {
- errorCode = XML_ERROR_NO_MEMORY;
- return XML_STATUS_ERROR;
- }
- buffer = temp;
- if (!buffer) {
- errorCode = XML_ERROR_NO_MEMORY;
- eventPtr = eventEndPtr = NULL;
- processor = errorProcessor;
- return XML_STATUS_ERROR;
- }
- bufferLim = buffer + len * 2;
- }
- memcpy(buffer, end, nLeftOver);
- }
- bufferPtr = buffer;
- bufferEnd = buffer + nLeftOver;
- positionPtr = bufferPtr;
- parseEndPtr = bufferEnd;
- eventPtr = bufferPtr;
- eventEndPtr = bufferPtr;
- return result;
- }
-#endif /* not defined XML_CONTEXT_BYTES */
- else {
- void *buff = XML_GetBuffer(parser, len);
- if (buff == NULL)
- return XML_STATUS_ERROR;
- else {
- memcpy(buff, s, len);
- return XML_ParseBuffer(parser, len, isFinal);
- }
- }
-}
-
-enum XML_Status XMLCALL
-XML_ParseBuffer(XML_Parser parser, int len, int isFinal)
-{
- const char *start;
- enum XML_Status result = XML_STATUS_OK;
-
- switch (ps_parsing) {
- case XML_SUSPENDED:
- errorCode = XML_ERROR_SUSPENDED;
- return XML_STATUS_ERROR;
- case XML_FINISHED:
- errorCode = XML_ERROR_FINISHED;
- return XML_STATUS_ERROR;
- default:
- ps_parsing = XML_PARSING;
- }
-
- start = bufferPtr;
- positionPtr = start;
- bufferEnd += len;
- parseEndPtr = bufferEnd;
- parseEndByteIndex += len;
- ps_finalBuffer = (XML_Bool)isFinal;
-
- errorCode = processor(parser, start, parseEndPtr, &bufferPtr);
-
- if (errorCode != XML_ERROR_NONE) {
- eventEndPtr = eventPtr;
- processor = errorProcessor;
- return XML_STATUS_ERROR;
- }
- else {
- switch (ps_parsing) {
- case XML_SUSPENDED:
- result = XML_STATUS_SUSPENDED;
- break;
- case XML_INITIALIZED:
- case XML_PARSING:
- if (isFinal) {
- ps_parsing = XML_FINISHED;
- return result;
- }
- default: ; /* should not happen */
- }
- }
-
- XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
- positionPtr = bufferPtr;
- return result;
-}
-
-void * XMLCALL
-XML_GetBuffer(XML_Parser parser, int len)
-{
- switch (ps_parsing) {
- case XML_SUSPENDED:
- errorCode = XML_ERROR_SUSPENDED;
- return NULL;
- case XML_FINISHED:
- errorCode = XML_ERROR_FINISHED;
- return NULL;
- default: ;
- }
-
- if (len > bufferLim - bufferEnd) {
- /* FIXME avoid integer overflow */
- int neededSize = len + (int)(bufferEnd - bufferPtr);
-#ifdef XML_CONTEXT_BYTES
- int keep = (int)(bufferPtr - buffer);
-
- if (keep > XML_CONTEXT_BYTES)
- keep = XML_CONTEXT_BYTES;
- neededSize += keep;
-#endif /* defined XML_CONTEXT_BYTES */
- if (neededSize <= bufferLim - buffer) {
-#ifdef XML_CONTEXT_BYTES
- if (keep < bufferPtr - buffer) {
- int offset = (int)(bufferPtr - buffer) - keep;
- memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep);
- bufferEnd -= offset;
- bufferPtr -= offset;
- }
-#else
- memmove(buffer, bufferPtr, bufferEnd - bufferPtr);
- bufferEnd = buffer + (bufferEnd - bufferPtr);
- bufferPtr = buffer;
-#endif /* not defined XML_CONTEXT_BYTES */
- }
- else {
- char *newBuf;
- int bufferSize = (int)(bufferLim - bufferPtr);
- if (bufferSize == 0)
- bufferSize = INIT_BUFFER_SIZE;
- do {
- bufferSize *= 2;
- } while (bufferSize < neededSize);
- newBuf = (char *)MALLOC(bufferSize);
- if (newBuf == 0) {
- errorCode = XML_ERROR_NO_MEMORY;
- return NULL;
- }
- bufferLim = newBuf + bufferSize;
-#ifdef XML_CONTEXT_BYTES
- if (bufferPtr) {
- int keep = (int)(bufferPtr - buffer);
- if (keep > XML_CONTEXT_BYTES)
- keep = XML_CONTEXT_BYTES;
- memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep);
- FREE(buffer);
- buffer = newBuf;
- bufferEnd = buffer + (bufferEnd - bufferPtr) + keep;
- bufferPtr = buffer + keep;
- }
- else {
- bufferEnd = newBuf + (bufferEnd - bufferPtr);
- bufferPtr = buffer = newBuf;
- }
-#else
- if (bufferPtr) {
- memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr);
- FREE(buffer);
- }
- bufferEnd = newBuf + (bufferEnd - bufferPtr);
- bufferPtr = buffer = newBuf;
-#endif /* not defined XML_CONTEXT_BYTES */
- }
- }
- return bufferEnd;
-}
-
-enum XML_Status XMLCALL
-XML_StopParser(XML_Parser parser, XML_Bool resumable)
-{
- switch (ps_parsing) {
- case XML_SUSPENDED:
- if (resumable) {
- errorCode = XML_ERROR_SUSPENDED;
- return XML_STATUS_ERROR;
- }
- ps_parsing = XML_FINISHED;
- break;
- case XML_FINISHED:
- errorCode = XML_ERROR_FINISHED;
- return XML_STATUS_ERROR;
- default:
- if (resumable) {
-#ifdef XML_DTD
- if (isParamEntity) {
- errorCode = XML_ERROR_SUSPEND_PE;
- return XML_STATUS_ERROR;
- }
-#endif
- ps_parsing = XML_SUSPENDED;
- }
- else
- ps_parsing = XML_FINISHED;
- }
- return XML_STATUS_OK;
-}
-
-enum XML_Status XMLCALL
-XML_ResumeParser(XML_Parser parser)
-{
- enum XML_Status result = XML_STATUS_OK;
-
- if (ps_parsing != XML_SUSPENDED) {
- errorCode = XML_ERROR_NOT_SUSPENDED;
- return XML_STATUS_ERROR;
- }
- ps_parsing = XML_PARSING;
-
- errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr);
-
- if (errorCode != XML_ERROR_NONE) {
- eventEndPtr = eventPtr;
- processor = errorProcessor;
- return XML_STATUS_ERROR;
- }
- else {
- switch (ps_parsing) {
- case XML_SUSPENDED:
- result = XML_STATUS_SUSPENDED;
- break;
- case XML_INITIALIZED:
- case XML_PARSING:
- if (ps_finalBuffer) {
- ps_parsing = XML_FINISHED;
- return result;
- }
- default: ;
- }
- }
-
- XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
- positionPtr = bufferPtr;
- return result;
-}
-
-void XMLCALL
-XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status)
-{
- assert(status != NULL);
- *status = parser->m_parsingStatus;
-}
-
-enum XML_Error XMLCALL
-XML_GetErrorCode(XML_Parser parser)
-{
- return errorCode;
-}
-
-XML_Index XMLCALL
-XML_GetCurrentByteIndex(XML_Parser parser)
-{
- if (eventPtr)
- return parseEndByteIndex - (parseEndPtr - eventPtr);
- return -1;
-}
-
-int XMLCALL
-XML_GetCurrentByteCount(XML_Parser parser)
-{
- if (eventEndPtr && eventPtr)
- return (int)(eventEndPtr - eventPtr);
- return 0;
-}
-
-const char * XMLCALL
-XML_GetInputContext(XML_Parser parser, int *offset, int *size)
-{
-#ifdef XML_CONTEXT_BYTES
- if (eventPtr && buffer) {
- *offset = (int)(eventPtr - buffer);
- *size = (int)(bufferEnd - buffer);
- return buffer;
- }
-#endif /* defined XML_CONTEXT_BYTES */
- return (char *) 0;
-}
-
-XML_Size XMLCALL
-XML_GetCurrentLineNumber(XML_Parser parser)
-{
- if (eventPtr && eventPtr >= positionPtr) {
- XmlUpdatePosition(encoding, positionPtr, eventPtr, &position);
- positionPtr = eventPtr;
- }
- return position.lineNumber + 1;
-}
-
-XML_Size XMLCALL
-XML_GetCurrentColumnNumber(XML_Parser parser)
-{
- if (eventPtr && eventPtr >= positionPtr) {
- XmlUpdatePosition(encoding, positionPtr, eventPtr, &position);
- positionPtr = eventPtr;
- }
- return position.columnNumber;
-}
-
-void XMLCALL
-XML_FreeContentModel(XML_Parser parser, XML_Content *model)
-{
- FREE(model);
-}
-
-void * XMLCALL
-XML_MemMalloc(XML_Parser parser, size_t size)
-{
- return MALLOC(size);
-}
-
-void * XMLCALL
-XML_MemRealloc(XML_Parser parser, void *ptr, size_t size)
-{
- return REALLOC(ptr, size);
-}
-
-void XMLCALL
-XML_MemFree(XML_Parser parser, void *ptr)
-{
- FREE(ptr);
-}
-
-void XMLCALL
-XML_DefaultCurrent(XML_Parser parser)
-{
- if (defaultHandler) {
- if (openInternalEntities)
- reportDefault(parser,
- internalEncoding,
- openInternalEntities->internalEventPtr,
- openInternalEntities->internalEventEndPtr);
- else
- reportDefault(parser, encoding, eventPtr, eventEndPtr);
- }
-}
-
-const XML_LChar * XMLCALL
-XML_ErrorString(enum XML_Error code)
-{
- static const XML_LChar* const message[] = {
- 0,
- XML_L("out of memory"),
- XML_L("syntax error"),
- XML_L("no element found"),
- XML_L("not well-formed (invalid token)"),
- XML_L("unclosed token"),
- XML_L("partial character"),
- XML_L("mismatched tag"),
- XML_L("duplicate attribute"),
- XML_L("junk after document element"),
- XML_L("illegal parameter entity reference"),
- XML_L("undefined entity"),
- XML_L("recursive entity reference"),
- XML_L("asynchronous entity"),
- XML_L("reference to invalid character number"),
- XML_L("reference to binary entity"),
- XML_L("reference to external entity in attribute"),
- XML_L("XML or text declaration not at start of entity"),
- XML_L("unknown encoding"),
- XML_L("encoding specified in XML declaration is incorrect"),
- XML_L("unclosed CDATA section"),
- XML_L("error in processing external entity reference"),
- XML_L("document is not standalone"),
- XML_L("unexpected parser state - please send a bug report"),
- XML_L("entity declared in parameter entity"),
- XML_L("requested feature requires XML_DTD support in Expat"),
- XML_L("cannot change setting once parsing has begun"),
- XML_L("unbound prefix"),
- XML_L("must not undeclare prefix"),
- XML_L("incomplete markup in parameter entity"),
- XML_L("XML declaration not well-formed"),
- XML_L("text declaration not well-formed"),
- XML_L("illegal character(s) in public id"),
- XML_L("parser suspended"),
- XML_L("parser not suspended"),
- XML_L("parsing aborted"),
- XML_L("parsing finished"),
- XML_L("cannot suspend in external parameter entity"),
- XML_L("reserved prefix (xml) must not be undeclared or bound to another namespace name"),
- XML_L("reserved prefix (xmlns) must not be declared or undeclared"),
- XML_L("prefix must not be bound to one of the reserved namespace names")
- };
- if (code > 0 && code < sizeof(message)/sizeof(message[0]))
- return message[code];
- return NULL;
-}
-
-const XML_LChar * XMLCALL
-XML_ExpatVersion(void) {
-
- /* V1 is used to string-ize the version number. However, it would
- string-ize the actual version macro *names* unless we get them
- substituted before being passed to V1. CPP is defined to expand
- a macro, then rescan for more expansions. Thus, we use V2 to expand
- the version macros, then CPP will expand the resulting V1() macro
- with the correct numerals. */
- /* ### I'm assuming cpp is portable in this respect... */
-
-#define V1(a,b,c) XML_L(#a)XML_L(".")XML_L(#b)XML_L(".")XML_L(#c)
-#define V2(a,b,c) XML_L("expat_")V1(a,b,c)
-
- return V2(XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION);
-
-#undef V1
-#undef V2
-}
-
-XML_Expat_Version XMLCALL
-XML_ExpatVersionInfo(void)
-{
- XML_Expat_Version version;
-
- version.major = XML_MAJOR_VERSION;
- version.minor = XML_MINOR_VERSION;
- version.micro = XML_MICRO_VERSION;
-
- return version;
-}
-
-const XML_Feature * XMLCALL
-XML_GetFeatureList(void)
-{
- static const XML_Feature features[] = {
- {XML_FEATURE_SIZEOF_XML_CHAR, XML_L("sizeof(XML_Char)"),
- sizeof(XML_Char)},
- {XML_FEATURE_SIZEOF_XML_LCHAR, XML_L("sizeof(XML_LChar)"),
- sizeof(XML_LChar)},
-#ifdef XML_UNICODE
- {XML_FEATURE_UNICODE, XML_L("XML_UNICODE"), 0},
-#endif
-#ifdef XML_UNICODE_WCHAR_T
- {XML_FEATURE_UNICODE_WCHAR_T, XML_L("XML_UNICODE_WCHAR_T"), 0},
-#endif
-#ifdef XML_DTD
- {XML_FEATURE_DTD, XML_L("XML_DTD"), 0},
-#endif
-#ifdef XML_CONTEXT_BYTES
- {XML_FEATURE_CONTEXT_BYTES, XML_L("XML_CONTEXT_BYTES"),
- XML_CONTEXT_BYTES},
-#endif
-#ifdef XML_MIN_SIZE
- {XML_FEATURE_MIN_SIZE, XML_L("XML_MIN_SIZE"), 0},
-#endif
-#ifdef XML_NS
- {XML_FEATURE_NS, XML_L("XML_NS"), 0},
-#endif
-#ifdef XML_LARGE_SIZE
- {XML_FEATURE_LARGE_SIZE, XML_L("XML_LARGE_SIZE"), 0},
-#endif
- {XML_FEATURE_END, NULL, 0}
- };
-
- return features;
-}
-
-/* Initially tag->rawName always points into the parse buffer;
- for those TAG instances opened while the current parse buffer was
- processed, and not yet closed, we need to store tag->rawName in a more
- permanent location, since the parse buffer is about to be discarded.
-*/
-static XML_Bool
-storeRawNames(XML_Parser parser)
-{
- TAG *tag = tagStack;
- while (tag) {
- int bufSize;
- int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1);
- char *rawNameBuf = tag->buf + nameLen;
- /* Stop if already stored. Since tagStack is a stack, we can stop
- at the first entry that has already been copied; everything
- below it in the stack is already been accounted for in a
- previous call to this function.
- */
- if (tag->rawName == rawNameBuf)
- break;
- /* For re-use purposes we need to ensure that the
- size of tag->buf is a multiple of sizeof(XML_Char).
- */
- bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char));
- if (bufSize > tag->bufEnd - tag->buf) {
- char *temp = (char *)REALLOC(tag->buf, bufSize);
- if (temp == NULL)
- return XML_FALSE;
- /* if tag->name.str points to tag->buf (only when namespace
- processing is off) then we have to update it
- */
- if (tag->name.str == (XML_Char *)tag->buf)
- tag->name.str = (XML_Char *)temp;
- /* if tag->name.localPart is set (when namespace processing is on)
- then update it as well, since it will always point into tag->buf
- */
- if (tag->name.localPart)
- tag->name.localPart = (XML_Char *)temp + (tag->name.localPart -
- (XML_Char *)tag->buf);
- tag->buf = temp;
- tag->bufEnd = temp + bufSize;
- rawNameBuf = temp + nameLen;
- }
- memcpy(rawNameBuf, tag->rawName, tag->rawNameLength);
- tag->rawName = rawNameBuf;
- tag = tag->parent;
- }
- return XML_TRUE;
-}
-
-static enum XML_Error PTRCALL
-contentProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- enum XML_Error result = doContent(parser, 0, encoding, start, end,
- endPtr, (XML_Bool)!ps_finalBuffer);
- if (result == XML_ERROR_NONE) {
- if (!storeRawNames(parser))
- return XML_ERROR_NO_MEMORY;
- }
- return result;
-}
-
-static enum XML_Error PTRCALL
-externalEntityInitProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- enum XML_Error result = initializeEncoding(parser);
- if (result != XML_ERROR_NONE)
- return result;
- processor = externalEntityInitProcessor2;
- return externalEntityInitProcessor2(parser, start, end, endPtr);
-}
-
-static enum XML_Error PTRCALL
-externalEntityInitProcessor2(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- const char *next = start; /* XmlContentTok doesn't always set the last arg */
- int tok = XmlContentTok(encoding, start, end, &next);
- switch (tok) {
- case XML_TOK_BOM:
- /* If we are at the end of the buffer, this would cause the next stage,
- i.e. externalEntityInitProcessor3, to pass control directly to
- doContent (by detecting XML_TOK_NONE) without processing any xml text
- declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent.
- */
- if (next == end && !ps_finalBuffer) {
- *endPtr = next;
- return XML_ERROR_NONE;
- }
- start = next;
- break;
- case XML_TOK_PARTIAL:
- if (!ps_finalBuffer) {
- *endPtr = start;
- return XML_ERROR_NONE;
- }
- eventPtr = start;
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (!ps_finalBuffer) {
- *endPtr = start;
- return XML_ERROR_NONE;
- }
- eventPtr = start;
- return XML_ERROR_PARTIAL_CHAR;
- }
- processor = externalEntityInitProcessor3;
- return externalEntityInitProcessor3(parser, start, end, endPtr);
-}
-
-static enum XML_Error PTRCALL
-externalEntityInitProcessor3(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- int tok;
- const char *next = start; /* XmlContentTok doesn't always set the last arg */
- eventPtr = start;
- tok = XmlContentTok(encoding, start, end, &next);
- eventEndPtr = next;
-
- switch (tok) {
- case XML_TOK_XML_DECL:
- {
- enum XML_Error result;
- result = processXmlDecl(parser, 1, start, next);
- if (result != XML_ERROR_NONE)
- return result;
- switch (ps_parsing) {
- case XML_SUSPENDED:
- *endPtr = next;
- return XML_ERROR_NONE;
- case XML_FINISHED:
- return XML_ERROR_ABORTED;
- default:
- start = next;
- }
- }
- break;
- case XML_TOK_PARTIAL:
- if (!ps_finalBuffer) {
- *endPtr = start;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (!ps_finalBuffer) {
- *endPtr = start;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- }
- processor = externalEntityContentProcessor;
- tagLevel = 1;
- return externalEntityContentProcessor(parser, start, end, endPtr);
-}
-
-static enum XML_Error PTRCALL
-externalEntityContentProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- enum XML_Error result = doContent(parser, 1, encoding, start, end,
- endPtr, (XML_Bool)!ps_finalBuffer);
- if (result == XML_ERROR_NONE) {
- if (!storeRawNames(parser))
- return XML_ERROR_NO_MEMORY;
- }
- return result;
-}
-
-static enum XML_Error
-doContent(XML_Parser parser,
- int startTagLevel,
- const ENCODING *enc,
- const char *s,
- const char *end,
- const char **nextPtr,
- XML_Bool haveMore)
-{
- /* save one level of indirection */
- DTD * const dtd = _dtd;
-
- const char **eventPP;
- const char **eventEndPP;
- if (enc == encoding) {
- eventPP = &eventPtr;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- *eventPP = s;
-
- for (;;) {
- const char *next = s; /* XmlContentTok doesn't always set the last arg */
- int tok = XmlContentTok(enc, s, end, &next);
- *eventEndPP = next;
- switch (tok) {
- case XML_TOK_TRAILING_CR:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- *eventEndPP = end;
- if (characterDataHandler) {
- XML_Char c = 0xA;
- characterDataHandler(handlerArg, &c, 1);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, end);
- /* We are at the end of the final buffer, should we check for
- XML_SUSPENDED, XML_FINISHED?
- */
- if (startTagLevel == 0)
- return XML_ERROR_NO_ELEMENTS;
- if (tagLevel != startTagLevel)
- return XML_ERROR_ASYNC_ENTITY;
- *nextPtr = end;
- return XML_ERROR_NONE;
- case XML_TOK_NONE:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- if (startTagLevel > 0) {
- if (tagLevel != startTagLevel)
- return XML_ERROR_ASYNC_ENTITY;
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_NO_ELEMENTS;
- case XML_TOK_INVALID:
- *eventPP = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_ENTITY_REF:
- {
- const XML_Char *name;
- ENTITY *entity;
- XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (ch) {
- if (characterDataHandler)
- characterDataHandler(handlerArg, &ch, 1);
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- }
- name = poolStoreString(&dtd->pool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- entity = (ENTITY *)lookup(&dtd->generalEntities, name, 0);
- poolDiscard(&dtd->pool);
- /* First, determine if a check for an existing declaration is needed;
- if yes, check that the entity exists, and that it is internal,
- otherwise call the skipped entity or default handler.
- */
- if (!dtd->hasParamEntityRefs || dtd->standalone) {
- if (!entity)
- return XML_ERROR_UNDEFINED_ENTITY;
- else if (!entity->is_internal)
- return XML_ERROR_ENTITY_DECLARED_IN_PE;
- }
- else if (!entity) {
- if (skippedEntityHandler)
- skippedEntityHandler(handlerArg, name, 0);
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- }
- if (entity->open)
- return XML_ERROR_RECURSIVE_ENTITY_REF;
- if (entity->notation)
- return XML_ERROR_BINARY_ENTITY_REF;
- if (entity->textPtr) {
- enum XML_Error result;
- if (!defaultExpandInternalEntities) {
- if (skippedEntityHandler)
- skippedEntityHandler(handlerArg, entity->name, 0);
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- }
- result = processInternalEntity(parser, entity, XML_FALSE);
- if (result != XML_ERROR_NONE)
- return result;
- }
- else if (externalEntityRefHandler) {
- const XML_Char *context;
- entity->open = XML_TRUE;
- context = getContext(parser);
- entity->open = XML_FALSE;
- if (!context)
- return XML_ERROR_NO_MEMORY;
- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
- context,
- entity->base,
- entity->systemId,
- entity->publicId))
- return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
- poolDiscard(&tempPool);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- }
- case XML_TOK_START_TAG_NO_ATTS:
- /* fall through */
- case XML_TOK_START_TAG_WITH_ATTS:
- {
- TAG *tag;
- enum XML_Error result;
- XML_Char *toPtr;
- if (freeTagList) {
- tag = freeTagList;
- freeTagList = freeTagList->parent;
- }
- else {
- tag = (TAG *)MALLOC(sizeof(TAG));
- if (!tag)
- return XML_ERROR_NO_MEMORY;
- tag->buf = (char *)MALLOC(INIT_TAG_BUF_SIZE);
- if (!tag->buf) {
- FREE(tag);
- return XML_ERROR_NO_MEMORY;
- }
- tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE;
- }
- tag->bindings = NULL;
- tag->parent = tagStack;
- tagStack = tag;
- tag->name.localPart = NULL;
- tag->name.prefix = NULL;
- tag->rawName = s + enc->minBytesPerChar;
- tag->rawNameLength = XmlNameLength(enc, tag->rawName);
- ++tagLevel;
- {
- const char *rawNameEnd = tag->rawName + tag->rawNameLength;
- const char *fromPtr = tag->rawName;
- toPtr = (XML_Char *)tag->buf;
- for (;;) {
- int bufSize;
- int convLen;
- XmlConvert(enc,
- &fromPtr, rawNameEnd,
- (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1);
- convLen = (int)(toPtr - (XML_Char *)tag->buf);
- if (fromPtr == rawNameEnd) {
- tag->name.strLen = convLen;
- break;
- }
- bufSize = (int)(tag->bufEnd - tag->buf) << 1;
- {
- char *temp = (char *)REALLOC(tag->buf, bufSize);
- if (temp == NULL)
- return XML_ERROR_NO_MEMORY;
- tag->buf = temp;
- tag->bufEnd = temp + bufSize;
- toPtr = (XML_Char *)temp + convLen;
- }
- }
- }
- tag->name.str = (XML_Char *)tag->buf;
- *toPtr = XML_T('\0');
- result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings));
- if (result)
- return result;
- if (startElementHandler)
- startElementHandler(handlerArg, tag->name.str,
- (const XML_Char **)atts);
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- poolClear(&tempPool);
- break;
- }
- case XML_TOK_EMPTY_ELEMENT_NO_ATTS:
- /* fall through */
- case XML_TOK_EMPTY_ELEMENT_WITH_ATTS:
- {
- const char *rawName = s + enc->minBytesPerChar;
- enum XML_Error result;
- BINDING *bindings = NULL;
- XML_Bool noElmHandlers = XML_TRUE;
- TAG_NAME name;
- name.str = poolStoreString(&tempPool, enc, rawName,
- rawName + XmlNameLength(enc, rawName));
- if (!name.str)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- result = storeAtts(parser, enc, s, &name, &bindings);
- if (result)
- return result;
- poolFinish(&tempPool);
- if (startElementHandler) {
- startElementHandler(handlerArg, name.str, (const XML_Char **)atts);
- noElmHandlers = XML_FALSE;
- }
- if (endElementHandler) {
- if (startElementHandler)
- *eventPP = *eventEndPP;
- endElementHandler(handlerArg, name.str);
- noElmHandlers = XML_FALSE;
- }
- if (noElmHandlers && defaultHandler)
- reportDefault(parser, enc, s, next);
- poolClear(&tempPool);
- while (bindings) {
- BINDING *b = bindings;
- if (endNamespaceDeclHandler)
- endNamespaceDeclHandler(handlerArg, b->prefix->name);
- bindings = bindings->nextTagBinding;
- b->nextTagBinding = freeBindingList;
- freeBindingList = b;
- b->prefix->binding = b->prevPrefixBinding;
- }
- }
- if (tagLevel == 0)
- return epilogProcessor(parser, next, end, nextPtr);
- break;
- case XML_TOK_END_TAG:
- if (tagLevel == startTagLevel)
- return XML_ERROR_ASYNC_ENTITY;
- else {
- int len;
- const char *rawName;
- TAG *tag = tagStack;
- tagStack = tag->parent;
- tag->parent = freeTagList;
- freeTagList = tag;
- rawName = s + enc->minBytesPerChar*2;
- len = XmlNameLength(enc, rawName);
- if (len != tag->rawNameLength
- || memcmp(tag->rawName, rawName, len) != 0) {
- *eventPP = rawName;
- return XML_ERROR_TAG_MISMATCH;
- }
- --tagLevel;
- if (endElementHandler) {
- const XML_Char *localPart;
- const XML_Char *prefix;
- XML_Char *uri;
- localPart = tag->name.localPart;
- if (ns && localPart) {
- /* localPart and prefix may have been overwritten in
- tag->name.str, since this points to the binding->uri
- buffer which gets re-used; so we have to add them again
- */
- uri = (XML_Char *)tag->name.str + tag->name.uriLen;
- /* don't need to check for space - already done in storeAtts() */
- while (*localPart) *uri++ = *localPart++;
- prefix = (XML_Char *)tag->name.prefix;
- if (ns_triplets && prefix) {
- *uri++ = namespaceSeparator;
- while (*prefix) *uri++ = *prefix++;
- }
- *uri = XML_T('\0');
- }
- endElementHandler(handlerArg, tag->name.str);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- while (tag->bindings) {
- BINDING *b = tag->bindings;
- if (endNamespaceDeclHandler)
- endNamespaceDeclHandler(handlerArg, b->prefix->name);
- tag->bindings = tag->bindings->nextTagBinding;
- b->nextTagBinding = freeBindingList;
- freeBindingList = b;
- b->prefix->binding = b->prevPrefixBinding;
- }
- if (tagLevel == 0)
- return epilogProcessor(parser, next, end, nextPtr);
- }
- break;
- case XML_TOK_CHAR_REF:
- {
- int n = XmlCharRefNumber(enc, s);
- if (n < 0)
- return XML_ERROR_BAD_CHAR_REF;
- if (characterDataHandler) {
- XML_Char buf[XML_ENCODE_MAX];
- characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf));
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- }
- break;
- case XML_TOK_XML_DECL:
- return XML_ERROR_MISPLACED_XML_PI;
- case XML_TOK_DATA_NEWLINE:
- if (characterDataHandler) {
- XML_Char c = 0xA;
- characterDataHandler(handlerArg, &c, 1);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- case XML_TOK_CDATA_SECT_OPEN:
- {
- enum XML_Error result;
- if (startCdataSectionHandler)
- startCdataSectionHandler(handlerArg);
-#if 0
- /* Suppose you doing a transformation on a document that involves
- changing only the character data. You set up a defaultHandler
- and a characterDataHandler. The defaultHandler simply copies
- characters through. The characterDataHandler does the
- transformation and writes the characters out escaping them as
- necessary. This case will fail to work if we leave out the
- following two lines (because & and < inside CDATA sections will
- be incorrectly escaped).
-
- However, now we have a start/endCdataSectionHandler, so it seems
- easier to let the user deal with this.
- */
- else if (characterDataHandler)
- characterDataHandler(handlerArg, dataBuf, 0);
-#endif
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- result = doCdataSection(parser, enc, &next, end, nextPtr, haveMore);
- if (result != XML_ERROR_NONE)
- return result;
- else if (!next) {
- processor = cdataSectionProcessor;
- return result;
- }
- }
- break;
- case XML_TOK_TRAILING_RSQB:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- if (characterDataHandler) {
- if (MUST_CONVERT(enc, s)) {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd);
- characterDataHandler(handlerArg, dataBuf,
- (int)(dataPtr - (ICHAR *)dataBuf));
- }
- else
- characterDataHandler(handlerArg,
- (XML_Char *)s,
- (int)((XML_Char *)end - (XML_Char *)s));
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, end);
- /* We are at the end of the final buffer, should we check for
- XML_SUSPENDED, XML_FINISHED?
- */
- if (startTagLevel == 0) {
- *eventPP = end;
- return XML_ERROR_NO_ELEMENTS;
- }
- if (tagLevel != startTagLevel) {
- *eventPP = end;
- return XML_ERROR_ASYNC_ENTITY;
- }
- *nextPtr = end;
- return XML_ERROR_NONE;
- case XML_TOK_DATA_CHARS:
- {
- XML_CharacterDataHandler charDataHandler = characterDataHandler;
- if (charDataHandler) {
- if (MUST_CONVERT(enc, s)) {
- for (;;) {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
- *eventEndPP = s;
- charDataHandler(handlerArg, dataBuf,
- (int)(dataPtr - (ICHAR *)dataBuf));
- if (s == next)
- break;
- *eventPP = s;
- }
- }
- else
- charDataHandler(handlerArg,
- (XML_Char *)s,
- (int)((XML_Char *)next - (XML_Char *)s));
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- }
- break;
- case XML_TOK_PI:
- if (!reportProcessingInstruction(parser, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_COMMENT:
- if (!reportComment(parser, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- default:
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- }
- *eventPP = s = next;
- switch (ps_parsing) {
- case XML_SUSPENDED:
- *nextPtr = next;
- return XML_ERROR_NONE;
- case XML_FINISHED:
- return XML_ERROR_ABORTED;
- default: ;
- }
- }
- /* not reached */
-}
-
-/* Precondition: all arguments must be non-NULL;
- Purpose:
- - normalize attributes
- - check attributes for well-formedness
- - generate namespace aware attribute names (URI, prefix)
- - build list of attributes for startElementHandler
- - default attributes
- - process namespace declarations (check and report them)
- - generate namespace aware element name (URI, prefix)
-*/
-static enum XML_Error
-storeAtts(XML_Parser parser, const ENCODING *enc,
- const char *attStr, TAG_NAME *tagNamePtr,
- BINDING **bindingsPtr)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- ELEMENT_TYPE *elementType;
- int nDefaultAtts;
- const XML_Char **appAtts; /* the attribute list for the application */
- int attIndex = 0;
- int prefixLen;
- int i;
- int n;
- XML_Char *uri;
- int nPrefixes = 0;
- BINDING *binding;
- const XML_Char *localPart;
-
- /* lookup the element type name */
- elementType = (ELEMENT_TYPE *)lookup(&dtd->elementTypes, tagNamePtr->str,0);
- if (!elementType) {
- const XML_Char *name = poolCopyString(&dtd->pool, tagNamePtr->str);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- elementType = (ELEMENT_TYPE *)lookup(&dtd->elementTypes, name,
- sizeof(ELEMENT_TYPE));
- if (!elementType)
- return XML_ERROR_NO_MEMORY;
- if (ns && !setElementTypePrefix(parser, elementType))
- return XML_ERROR_NO_MEMORY;
- }
- nDefaultAtts = elementType->nDefaultAtts;
-
- /* get the attributes from the tokenizer */
- n = XmlGetAttributes(enc, attStr, attsSize, atts);
- if (n + nDefaultAtts > attsSize) {
- int oldAttsSize = attsSize;
- ATTRIBUTE *temp;
- attsSize = n + nDefaultAtts + INIT_ATTS_SIZE;
- temp = (ATTRIBUTE *)REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE));
- if (temp == NULL)
- return XML_ERROR_NO_MEMORY;
- atts = temp;
- if (n > oldAttsSize)
- XmlGetAttributes(enc, attStr, n, atts);
- }
-
- appAtts = (const XML_Char **)atts;
- for (i = 0; i < n; i++) {
- /* add the name and value to the attribute list */
- ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name,
- atts[i].name
- + XmlNameLength(enc, atts[i].name));
- if (!attId)
- return XML_ERROR_NO_MEMORY;
- /* Detect duplicate attributes by their QNames. This does not work when
- namespace processing is turned on and different prefixes for the same
- namespace are used. For this case we have a check further down.
- */
- if ((attId->name)[-1]) {
- if (enc == encoding)
- eventPtr = atts[i].name;
- return XML_ERROR_DUPLICATE_ATTRIBUTE;
- }
- (attId->name)[-1] = 1;
- appAtts[attIndex++] = attId->name;
- if (!atts[i].normalized) {
- enum XML_Error result;
- XML_Bool isCdata = XML_TRUE;
-
- /* figure out whether declared as other than CDATA */
- if (attId->maybeTokenized) {
- int j;
- for (j = 0; j < nDefaultAtts; j++) {
- if (attId == elementType->defaultAtts[j].id) {
- isCdata = elementType->defaultAtts[j].isCdata;
- break;
- }
- }
- }
-
- /* normalize the attribute value */
- result = storeAttributeValue(parser, enc, isCdata,
- atts[i].valuePtr, atts[i].valueEnd,
- &tempPool);
- if (result)
- return result;
- appAtts[attIndex] = poolStart(&tempPool);
- poolFinish(&tempPool);
- }
- else {
- /* the value did not need normalizing */
- appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr,
- atts[i].valueEnd);
- if (appAtts[attIndex] == 0)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- }
- /* handle prefixed attribute names */
- if (attId->prefix) {
- if (attId->xmlns) {
- /* deal with namespace declarations here */
- enum XML_Error result = addBinding(parser, attId->prefix, attId,
- appAtts[attIndex], bindingsPtr);
- if (result)
- return result;
- --attIndex;
- }
- else {
- /* deal with other prefixed names later */
- attIndex++;
- nPrefixes++;
- (attId->name)[-1] = 2;
- }
- }
- else
- attIndex++;
- }
-
- /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */
- nSpecifiedAtts = attIndex;
- if (elementType->idAtt && (elementType->idAtt->name)[-1]) {
- for (i = 0; i < attIndex; i += 2)
- if (appAtts[i] == elementType->idAtt->name) {
- idAttIndex = i;
- break;
- }
- }
- else
- idAttIndex = -1;
-
- /* do attribute defaulting */
- for (i = 0; i < nDefaultAtts; i++) {
- const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + i;
- if (!(da->id->name)[-1] && da->value) {
- if (da->id->prefix) {
- if (da->id->xmlns) {
- enum XML_Error result = addBinding(parser, da->id->prefix, da->id,
- da->value, bindingsPtr);
- if (result)
- return result;
- }
- else {
- (da->id->name)[-1] = 2;
- nPrefixes++;
- appAtts[attIndex++] = da->id->name;
- appAtts[attIndex++] = da->value;
- }
- }
- else {
- (da->id->name)[-1] = 1;
- appAtts[attIndex++] = da->id->name;
- appAtts[attIndex++] = da->value;
- }
- }
- }
- appAtts[attIndex] = 0;
-
- /* expand prefixed attribute names, check for duplicates,
- and clear flags that say whether attributes were specified */
- i = 0;
- if (nPrefixes) {
- int j; /* hash table index */
- unsigned long version = nsAttsVersion;
- int nsAttsSize = (int)1 << nsAttsPower;
- /* size of hash table must be at least 2 * (# of prefixed attributes) */
- if ((nPrefixes << 1) >> nsAttsPower) { /* true for nsAttsPower = 0 */
- NS_ATT *temp;
- /* hash table size must also be a power of 2 and >= 8 */
- while (nPrefixes >> nsAttsPower++);
- if (nsAttsPower < 3)
- nsAttsPower = 3;
- nsAttsSize = (int)1 << nsAttsPower;
- temp = (NS_ATT *)REALLOC(nsAtts, nsAttsSize * sizeof(NS_ATT));
- if (!temp)
- return XML_ERROR_NO_MEMORY;
- nsAtts = temp;
- version = 0; /* force re-initialization of nsAtts hash table */
- }
- /* using a version flag saves us from initializing nsAtts every time */
- if (!version) { /* initialize version flags when version wraps around */
- version = INIT_ATTS_VERSION;
- for (j = nsAttsSize; j != 0; )
- nsAtts[--j].version = version;
- }
- nsAttsVersion = --version;
-
- /* expand prefixed names and check for duplicates */
- for (; i < attIndex; i += 2) {
- const XML_Char *s = appAtts[i];
- if (s[-1] == 2) { /* prefixed */
- ATTRIBUTE_ID *id;
- const BINDING *b;
- unsigned long uriHash = 0;
- ((XML_Char *)s)[-1] = 0; /* clear flag */
- id = (ATTRIBUTE_ID *)lookup(&dtd->attributeIds, s, 0);
- b = id->prefix->binding;
- if (!b)
- return XML_ERROR_UNBOUND_PREFIX;
-
- /* as we expand the name we also calculate its hash value */
- for (j = 0; j < b->uriLen; j++) {
- const XML_Char c = b->uri[j];
- if (!poolAppendChar(&tempPool, c))
- return XML_ERROR_NO_MEMORY;
- uriHash = CHAR_HASH(uriHash, c);
- }
- while (*s++ != XML_T(ASCII_COLON))
- ;
- do { /* copies null terminator */
- const XML_Char c = *s;
- if (!poolAppendChar(&tempPool, *s))
- return XML_ERROR_NO_MEMORY;
- uriHash = CHAR_HASH(uriHash, c);
- } while (*s++);
-
- { /* Check hash table for duplicate of expanded name (uriName).
- Derived from code in lookup(HASH_TABLE *table, ...).
- */
- unsigned char step = 0;
- unsigned long mask = nsAttsSize - 1;
- j = uriHash & mask; /* index into hash table */
- while (nsAtts[j].version == version) {
- /* for speed we compare stored hash values first */
- if (uriHash == nsAtts[j].hash) {
- const XML_Char *s1 = poolStart(&tempPool);
- const XML_Char *s2 = nsAtts[j].uriName;
- /* s1 is null terminated, but not s2 */
- for (; *s1 == *s2 && *s1 != 0; s1++, s2++);
- if (*s1 == 0)
- return XML_ERROR_DUPLICATE_ATTRIBUTE;
- }
- if (!step)
- step = PROBE_STEP(uriHash, mask, nsAttsPower);
- j < step ? (j += nsAttsSize - step) : (j -= step);
- }
- }
-
- if (ns_triplets) { /* append namespace separator and prefix */
- tempPool.ptr[-1] = namespaceSeparator;
- s = b->prefix->name;
- do {
- if (!poolAppendChar(&tempPool, *s))
- return XML_ERROR_NO_MEMORY;
- } while (*s++);
- }
-
- /* store expanded name in attribute list */
- s = poolStart(&tempPool);
- poolFinish(&tempPool);
- appAtts[i] = s;
-
- /* fill empty slot with new version, uriName and hash value */
- nsAtts[j].version = version;
- nsAtts[j].hash = uriHash;
- nsAtts[j].uriName = s;
-
- if (!--nPrefixes) {
- i += 2;
- break;
- }
- }
- else /* not prefixed */
- ((XML_Char *)s)[-1] = 0; /* clear flag */
- }
- }
- /* clear flags for the remaining attributes */
- for (; i < attIndex; i += 2)
- ((XML_Char *)(appAtts[i]))[-1] = 0;
- for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding)
- binding->attId->name[-1] = 0;
-
- if (!ns)
- return XML_ERROR_NONE;
-
- /* expand the element type name */
- if (elementType->prefix) {
- binding = elementType->prefix->binding;
- if (!binding)
- return XML_ERROR_UNBOUND_PREFIX;
- localPart = tagNamePtr->str;
- while (*localPart++ != XML_T(ASCII_COLON))
- ;
- }
- else if (dtd->defaultPrefix.binding) {
- binding = dtd->defaultPrefix.binding;
- localPart = tagNamePtr->str;
- }
- else
- return XML_ERROR_NONE;
- prefixLen = 0;
- if (ns_triplets && binding->prefix->name) {
- for (; binding->prefix->name[prefixLen++];)
- ; /* prefixLen includes null terminator */
- }
- tagNamePtr->localPart = localPart;
- tagNamePtr->uriLen = binding->uriLen;
- tagNamePtr->prefix = binding->prefix->name;
- tagNamePtr->prefixLen = prefixLen;
- for (i = 0; localPart[i++];)
- ; /* i includes null terminator */
- n = i + binding->uriLen + prefixLen;
- if (n > binding->uriAlloc) {
- TAG *p;
- uri = (XML_Char *)MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char));
- if (!uri)
- return XML_ERROR_NO_MEMORY;
- binding->uriAlloc = n + EXPAND_SPARE;
- memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char));
- for (p = tagStack; p; p = p->parent)
- if (p->name.str == binding->uri)
- p->name.str = uri;
- FREE(binding->uri);
- binding->uri = uri;
- }
- /* if namespaceSeparator != '\0' then uri includes it already */
- uri = binding->uri + binding->uriLen;
- memcpy(uri, localPart, i * sizeof(XML_Char));
- /* we always have a namespace separator between localPart and prefix */
- if (prefixLen) {
- uri += i - 1;
- *uri = namespaceSeparator; /* replace null terminator */
- memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char));
- }
- tagNamePtr->str = binding->uri;
- return XML_ERROR_NONE;
-}
-
-/* addBinding() overwrites the value of prefix->binding without checking.
- Therefore one must keep track of the old value outside of addBinding().
-*/
-static enum XML_Error
-addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId,
- const XML_Char *uri, BINDING **bindingsPtr)
-{
- static const XML_Char xmlNamespace[] = {
- ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH,
- ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD,
- ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L,
- ASCII_SLASH, ASCII_1, ASCII_9, ASCII_9, ASCII_8, ASCII_SLASH,
- ASCII_n, ASCII_a, ASCII_m, ASCII_e, ASCII_s, ASCII_p, ASCII_a, ASCII_c,
- ASCII_e, '\0'
- };
- static const int xmlLen =
- (int)sizeof(xmlNamespace)/sizeof(XML_Char) - 1;
- static const XML_Char xmlnsNamespace[] = {
- ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH,
- ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD,
- ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_2, ASCII_0, ASCII_0,
- ASCII_0, ASCII_SLASH, ASCII_x, ASCII_m, ASCII_l, ASCII_n, ASCII_s,
- ASCII_SLASH, '\0'
- };
- static const int xmlnsLen =
- (int)sizeof(xmlnsNamespace)/sizeof(XML_Char) - 1;
-
- XML_Bool mustBeXML = XML_FALSE;
- XML_Bool isXML = XML_TRUE;
- XML_Bool isXMLNS = XML_TRUE;
-
- BINDING *b;
- int len;
-
- /* empty URI is only valid for default namespace per XML NS 1.0 (not 1.1) */
- if (*uri == XML_T('\0') && prefix->name)
- return XML_ERROR_UNDECLARING_PREFIX;
-
- if (prefix->name
- && prefix->name[0] == XML_T(ASCII_x)
- && prefix->name[1] == XML_T(ASCII_m)
- && prefix->name[2] == XML_T(ASCII_l)) {
-
- /* Not allowed to bind xmlns */
- if (prefix->name[3] == XML_T(ASCII_n)
- && prefix->name[4] == XML_T(ASCII_s)
- && prefix->name[5] == XML_T('\0'))
- return XML_ERROR_RESERVED_PREFIX_XMLNS;
-
- if (prefix->name[3] == XML_T('\0'))
- mustBeXML = XML_TRUE;
- }
-
- for (len = 0; uri[len]; len++) {
- if (isXML && (len > xmlLen || uri[len] != xmlNamespace[len]))
- isXML = XML_FALSE;
-
- if (!mustBeXML && isXMLNS
- && (len > xmlnsLen || uri[len] != xmlnsNamespace[len]))
- isXMLNS = XML_FALSE;
- }
- isXML = isXML && len == xmlLen;
- isXMLNS = isXMLNS && len == xmlnsLen;
-
- if (mustBeXML != isXML)
- return mustBeXML ? XML_ERROR_RESERVED_PREFIX_XML
- : XML_ERROR_RESERVED_NAMESPACE_URI;
-
- if (isXMLNS)
- return XML_ERROR_RESERVED_NAMESPACE_URI;
-
- if (namespaceSeparator)
- len++;
- if (freeBindingList) {
- b = freeBindingList;
- if (len > b->uriAlloc) {
- XML_Char *temp = (XML_Char *)REALLOC(b->uri,
- sizeof(XML_Char) * (len + EXPAND_SPARE));
- if (temp == NULL)
- return XML_ERROR_NO_MEMORY;
- b->uri = temp;
- b->uriAlloc = len + EXPAND_SPARE;
- }
- freeBindingList = b->nextTagBinding;
- }
- else {
- b = (BINDING *)MALLOC(sizeof(BINDING));
- if (!b)
- return XML_ERROR_NO_MEMORY;
- b->uri = (XML_Char *)MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE));
- if (!b->uri) {
- FREE(b);
- return XML_ERROR_NO_MEMORY;
- }
- b->uriAlloc = len + EXPAND_SPARE;
- }
- b->uriLen = len;
- memcpy(b->uri, uri, len * sizeof(XML_Char));
- if (namespaceSeparator)
- b->uri[len - 1] = namespaceSeparator;
- b->prefix = prefix;
- b->attId = attId;
- b->prevPrefixBinding = prefix->binding;
- /* NULL binding when default namespace undeclared */
- if (*uri == XML_T('\0') && prefix == &_dtd->defaultPrefix)
- prefix->binding = NULL;
- else
- prefix->binding = b;
- b->nextTagBinding = *bindingsPtr;
- *bindingsPtr = b;
- /* if attId == NULL then we are not starting a namespace scope */
- if (attId && startNamespaceDeclHandler)
- startNamespaceDeclHandler(handlerArg, prefix->name,
- prefix->binding ? uri : 0);
- return XML_ERROR_NONE;
-}
-
-/* The idea here is to avoid using stack for each CDATA section when
- the whole file is parsed with one call.
-*/
-static enum XML_Error PTRCALL
-cdataSectionProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- enum XML_Error result = doCdataSection(parser, encoding, &start, end,
- endPtr, (XML_Bool)!ps_finalBuffer);
- if (result != XML_ERROR_NONE)
- return result;
- if (start) {
- if (parentParser) { /* we are parsing an external entity */
- processor = externalEntityContentProcessor;
- return externalEntityContentProcessor(parser, start, end, endPtr);
- }
- else {
- processor = contentProcessor;
- return contentProcessor(parser, start, end, endPtr);
- }
- }
- return result;
-}
-
-/* startPtr gets set to non-null if the section is closed, and to null if
- the section is not yet closed.
-*/
-static enum XML_Error
-doCdataSection(XML_Parser parser,
- const ENCODING *enc,
- const char **startPtr,
- const char *end,
- const char **nextPtr,
- XML_Bool haveMore)
-{
- const char *s = *startPtr;
- const char **eventPP;
- const char **eventEndPP;
- if (enc == encoding) {
- eventPP = &eventPtr;
- *eventPP = s;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- *eventPP = s;
- *startPtr = NULL;
-
- for (;;) {
- const char *next;
- int tok = XmlCdataSectionTok(enc, s, end, &next);
- *eventEndPP = next;
- switch (tok) {
- case XML_TOK_CDATA_SECT_CLOSE:
- if (endCdataSectionHandler)
- endCdataSectionHandler(handlerArg);
-#if 0
- /* see comment under XML_TOK_CDATA_SECT_OPEN */
- else if (characterDataHandler)
- characterDataHandler(handlerArg, dataBuf, 0);
-#endif
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- *startPtr = next;
- *nextPtr = next;
- if (ps_parsing == XML_FINISHED)
- return XML_ERROR_ABORTED;
- else
- return XML_ERROR_NONE;
- case XML_TOK_DATA_NEWLINE:
- if (characterDataHandler) {
- XML_Char c = 0xA;
- characterDataHandler(handlerArg, &c, 1);
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- break;
- case XML_TOK_DATA_CHARS:
- {
- XML_CharacterDataHandler charDataHandler = characterDataHandler;
- if (charDataHandler) {
- if (MUST_CONVERT(enc, s)) {
- for (;;) {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
- *eventEndPP = next;
- charDataHandler(handlerArg, dataBuf,
- (int)(dataPtr - (ICHAR *)dataBuf));
- if (s == next)
- break;
- *eventPP = s;
- }
- }
- else
- charDataHandler(handlerArg,
- (XML_Char *)s,
- (int)((XML_Char *)next - (XML_Char *)s));
- }
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
- }
- break;
- case XML_TOK_INVALID:
- *eventPP = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_PARTIAL:
- case XML_TOK_NONE:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_UNCLOSED_CDATA_SECTION;
- default:
- *eventPP = next;
- return XML_ERROR_UNEXPECTED_STATE;
- }
-
- *eventPP = s = next;
- switch (ps_parsing) {
- case XML_SUSPENDED:
- *nextPtr = next;
- return XML_ERROR_NONE;
- case XML_FINISHED:
- return XML_ERROR_ABORTED;
- default: ;
- }
- }
- /* not reached */
-}
-
-#ifdef XML_DTD
-
-/* The idea here is to avoid using stack for each IGNORE section when
- the whole file is parsed with one call.
-*/
-static enum XML_Error PTRCALL
-ignoreSectionProcessor(XML_Parser parser,
- const char *start,
- const char *end,
- const char **endPtr)
-{
- enum XML_Error result = doIgnoreSection(parser, encoding, &start, end,
- endPtr, (XML_Bool)!ps_finalBuffer);
- if (result != XML_ERROR_NONE)
- return result;
- if (start) {
- processor = prologProcessor;
- return prologProcessor(parser, start, end, endPtr);
- }
- return result;
-}
-
-/* startPtr gets set to non-null is the section is closed, and to null
- if the section is not yet closed.
-*/
-static enum XML_Error
-doIgnoreSection(XML_Parser parser,
- const ENCODING *enc,
- const char **startPtr,
- const char *end,
- const char **nextPtr,
- XML_Bool haveMore)
-{
- const char *next;
- int tok;
- const char *s = *startPtr;
- const char **eventPP;
- const char **eventEndPP;
- if (enc == encoding) {
- eventPP = &eventPtr;
- *eventPP = s;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- *eventPP = s;
- *startPtr = NULL;
- tok = XmlIgnoreSectionTok(enc, s, end, &next);
- *eventEndPP = next;
- switch (tok) {
- case XML_TOK_IGNORE_SECT:
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- *startPtr = next;
- *nextPtr = next;
- if (ps_parsing == XML_FINISHED)
- return XML_ERROR_ABORTED;
- else
- return XML_ERROR_NONE;
- case XML_TOK_INVALID:
- *eventPP = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_PARTIAL:
- case XML_TOK_NONE:
- if (haveMore) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */
- default:
- *eventPP = next;
- return XML_ERROR_UNEXPECTED_STATE;
- }
- /* not reached */
-}
-
-#endif /* XML_DTD */
-
-static enum XML_Error
-initializeEncoding(XML_Parser parser)
-{
- const char *s;
-#ifdef XML_UNICODE
- char encodingBuf[128];
- if (!protocolEncodingName)
- s = NULL;
- else {
- int i;
- for (i = 0; protocolEncodingName[i]; i++) {
- if (i == sizeof(encodingBuf) - 1
- || (protocolEncodingName[i] & ~0x7f) != 0) {
- encodingBuf[0] = '\0';
- break;
- }
- encodingBuf[i] = (char)protocolEncodingName[i];
- }
- encodingBuf[i] = '\0';
- s = encodingBuf;
- }
-#else
- s = protocolEncodingName;
-#endif
- if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s))
- return XML_ERROR_NONE;
- return handleUnknownEncoding(parser, protocolEncodingName);
-}
-
-static enum XML_Error
-processXmlDecl(XML_Parser parser, int isGeneralTextEntity,
- const char *s, const char *next)
-{
- const char *encodingName = NULL;
- const XML_Char *storedEncName = NULL;
- const ENCODING *newEncoding = NULL;
- const char *version = NULL;
- const char *versionend;
- const XML_Char *storedversion = NULL;
- int standalone = -1;
- if (!(ns
- ? XmlParseXmlDeclNS
- : XmlParseXmlDecl)(isGeneralTextEntity,
- encoding,
- s,
- next,
- &eventPtr,
- &version,
- &versionend,
- &encodingName,
- &newEncoding,
- &standalone)) {
- if (isGeneralTextEntity)
- return XML_ERROR_TEXT_DECL;
- else
- return XML_ERROR_XML_DECL;
- }
- if (!isGeneralTextEntity && standalone == 1) {
- _dtd->standalone = XML_TRUE;
-#ifdef XML_DTD
- if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)
- paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
-#endif /* XML_DTD */
- }
- if (xmlDeclHandler) {
- if (encodingName != NULL) {
- storedEncName = poolStoreString(&temp2Pool,
- encoding,
- encodingName,
- encodingName
- + XmlNameLength(encoding, encodingName));
- if (!storedEncName)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&temp2Pool);
- }
- if (version) {
- storedversion = poolStoreString(&temp2Pool,
- encoding,
- version,
- versionend - encoding->minBytesPerChar);
- if (!storedversion)
- return XML_ERROR_NO_MEMORY;
- }
- xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone);
- }
- else if (defaultHandler)
- reportDefault(parser, encoding, s, next);
- if (protocolEncodingName == NULL) {
- if (newEncoding) {
- if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) {
- eventPtr = encodingName;
- return XML_ERROR_INCORRECT_ENCODING;
- }
- encoding = newEncoding;
- }
- else if (encodingName) {
- enum XML_Error result;
- if (!storedEncName) {
- storedEncName = poolStoreString(
- &temp2Pool, encoding, encodingName,
- encodingName + XmlNameLength(encoding, encodingName));
- if (!storedEncName)
- return XML_ERROR_NO_MEMORY;
- }
- result = handleUnknownEncoding(parser, storedEncName);
- poolClear(&temp2Pool);
- if (result == XML_ERROR_UNKNOWN_ENCODING)
- eventPtr = encodingName;
- return result;
- }
- }
-
- if (storedEncName || storedversion)
- poolClear(&temp2Pool);
-
- return XML_ERROR_NONE;
-}
-
-static enum XML_Error
-handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName)
-{
- if (unknownEncodingHandler) {
- XML_Encoding info;
- int i;
- for (i = 0; i < 256; i++)
- info.map[i] = -1;
- info.convert = NULL;
- info.data = NULL;
- info.release = NULL;
- if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName,
- &info)) {
- ENCODING *enc;
- unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding());
- if (!unknownEncodingMem) {
- if (info.release)
- info.release(info.data);
- return XML_ERROR_NO_MEMORY;
- }
- enc = (ns
- ? XmlInitUnknownEncodingNS
- : XmlInitUnknownEncoding)(unknownEncodingMem,
- info.map,
- info.convert,
- info.data);
- if (enc) {
- unknownEncodingData = info.data;
- unknownEncodingRelease = info.release;
- encoding = enc;
- return XML_ERROR_NONE;
- }
- }
- if (info.release != NULL)
- info.release(info.data);
- }
- return XML_ERROR_UNKNOWN_ENCODING;
-}
-
-static enum XML_Error PTRCALL
-prologInitProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- enum XML_Error result = initializeEncoding(parser);
- if (result != XML_ERROR_NONE)
- return result;
- processor = prologProcessor;
- return prologProcessor(parser, s, end, nextPtr);
-}
-
-#ifdef XML_DTD
-
-static enum XML_Error PTRCALL
-externalParEntInitProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- enum XML_Error result = initializeEncoding(parser);
- if (result != XML_ERROR_NONE)
- return result;
-
- /* we know now that XML_Parse(Buffer) has been called,
- so we consider the external parameter entity read */
- _dtd->paramEntityRead = XML_TRUE;
-
- if (prologState.inEntityValue) {
- processor = entityValueInitProcessor;
- return entityValueInitProcessor(parser, s, end, nextPtr);
- }
- else {
- processor = externalParEntProcessor;
- return externalParEntProcessor(parser, s, end, nextPtr);
- }
-}
-
-static enum XML_Error PTRCALL
-entityValueInitProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- int tok;
- const char *start = s;
- const char *next = start;
- eventPtr = start;
-
- for (;;) {
- tok = XmlPrologTok(encoding, start, end, &next);
- eventEndPtr = next;
- if (tok <= 0) {
- if (!ps_finalBuffer && tok != XML_TOK_INVALID) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- switch (tok) {
- case XML_TOK_INVALID:
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_NONE: /* start == end */
- default:
- break;
- }
- /* found end of entity value - can store it now */
- return storeEntityValue(parser, encoding, s, end);
- }
- else if (tok == XML_TOK_XML_DECL) {
- enum XML_Error result;
- result = processXmlDecl(parser, 0, start, next);
- if (result != XML_ERROR_NONE)
- return result;
- switch (ps_parsing) {
- case XML_SUSPENDED:
- *nextPtr = next;
- return XML_ERROR_NONE;
- case XML_FINISHED:
- return XML_ERROR_ABORTED;
- default:
- *nextPtr = next;
- }
- /* stop scanning for text declaration - we found one */
- processor = entityValueProcessor;
- return entityValueProcessor(parser, next, end, nextPtr);
- }
- /* If we are at the end of the buffer, this would cause XmlPrologTok to
- return XML_TOK_NONE on the next call, which would then cause the
- function to exit with *nextPtr set to s - that is what we want for other
- tokens, but not for the BOM - we would rather like to skip it;
- then, when this routine is entered the next time, XmlPrologTok will
- return XML_TOK_INVALID, since the BOM is still in the buffer
- */
- else if (tok == XML_TOK_BOM && next == end && !ps_finalBuffer) {
- *nextPtr = next;
- return XML_ERROR_NONE;
- }
- start = next;
- eventPtr = start;
- }
-}
-
-static enum XML_Error PTRCALL
-externalParEntProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- const char *next = s;
- int tok;
-
- tok = XmlPrologTok(encoding, s, end, &next);
- if (tok <= 0) {
- if (!ps_finalBuffer && tok != XML_TOK_INVALID) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- switch (tok) {
- case XML_TOK_INVALID:
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_NONE: /* start == end */
- default:
- break;
- }
- }
- /* This would cause the next stage, i.e. doProlog to be passed XML_TOK_BOM.
- However, when parsing an external subset, doProlog will not accept a BOM
- as valid, and report a syntax error, so we have to skip the BOM
- */
- else if (tok == XML_TOK_BOM) {
- s = next;
- tok = XmlPrologTok(encoding, s, end, &next);
- }
-
- processor = prologProcessor;
- return doProlog(parser, encoding, s, end, tok, next,
- nextPtr, (XML_Bool)!ps_finalBuffer);
-}
-
-static enum XML_Error PTRCALL
-entityValueProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- const char *start = s;
- const char *next = s;
- const ENCODING *enc = encoding;
- int tok;
-
- for (;;) {
- tok = XmlPrologTok(enc, start, end, &next);
- if (tok <= 0) {
- if (!ps_finalBuffer && tok != XML_TOK_INVALID) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- switch (tok) {
- case XML_TOK_INVALID:
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_NONE: /* start == end */
- default:
- break;
- }
- /* found end of entity value - can store it now */
- return storeEntityValue(parser, enc, s, end);
- }
- start = next;
- }
-}
-
-#endif /* XML_DTD */
-
-static enum XML_Error PTRCALL
-prologProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- const char *next = s;
- int tok = XmlPrologTok(encoding, s, end, &next);
- return doProlog(parser, encoding, s, end, tok, next,
- nextPtr, (XML_Bool)!ps_finalBuffer);
-}
-
-static enum XML_Error
-doProlog(XML_Parser parser,
- const ENCODING *enc,
- const char *s,
- const char *end,
- int tok,
- const char *next,
- const char **nextPtr,
- XML_Bool haveMore)
-{
-#ifdef XML_DTD
- static const XML_Char externalSubsetName[] = { ASCII_HASH , '\0' };
-#endif /* XML_DTD */
- static const XML_Char atypeCDATA[] =
- { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
- static const XML_Char atypeID[] = { ASCII_I, ASCII_D, '\0' };
- static const XML_Char atypeIDREF[] =
- { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' };
- static const XML_Char atypeIDREFS[] =
- { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' };
- static const XML_Char atypeENTITY[] =
- { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' };
- static const XML_Char atypeENTITIES[] = { ASCII_E, ASCII_N,
- ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' };
- static const XML_Char atypeNMTOKEN[] = {
- ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' };
- static const XML_Char atypeNMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T,
- ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' };
- static const XML_Char notationPrefix[] = { ASCII_N, ASCII_O, ASCII_T,
- ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0' };
- static const XML_Char enumValueSep[] = { ASCII_PIPE, '\0' };
- static const XML_Char enumValueStart[] = { ASCII_LPAREN, '\0' };
-
- /* save one level of indirection */
- DTD * const dtd = _dtd;
-
- const char **eventPP;
- const char **eventEndPP;
- enum XML_Content_Quant quant;
-
- if (enc == encoding) {
- eventPP = &eventPtr;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
-
- for (;;) {
- int role;
- XML_Bool handleDefault = XML_TRUE;
- *eventPP = s;
- *eventEndPP = next;
- if (tok <= 0) {
- if (haveMore && tok != XML_TOK_INVALID) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- switch (tok) {
- case XML_TOK_INVALID:
- *eventPP = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- return XML_ERROR_PARTIAL_CHAR;
- case XML_TOK_NONE:
-#ifdef XML_DTD
- /* for internal PE NOT referenced between declarations */
- if (enc != encoding && !openInternalEntities->betweenDecl) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- /* WFC: PE Between Declarations - must check that PE contains
- complete markup, not only for external PEs, but also for
- internal PEs if the reference occurs between declarations.
- */
- if (isParamEntity || enc != encoding) {
- if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc)
- == XML_ROLE_ERROR)
- return XML_ERROR_INCOMPLETE_PE;
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
-#endif /* XML_DTD */
- return XML_ERROR_NO_ELEMENTS;
- default:
- tok = -tok;
- next = end;
- break;
- }
- }
- role = XmlTokenRole(&prologState, tok, s, next, enc);
- switch (role) {
- case XML_ROLE_XML_DECL:
- {
- enum XML_Error result = processXmlDecl(parser, 0, s, next);
- if (result != XML_ERROR_NONE)
- return result;
- enc = encoding;
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_DOCTYPE_NAME:
- if (startDoctypeDeclHandler) {
- doctypeName = poolStoreString(&tempPool, enc, s, next);
- if (!doctypeName)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- doctypePubid = NULL;
- handleDefault = XML_FALSE;
- }
- doctypeSysid = NULL; /* always initialize to NULL */
- break;
- case XML_ROLE_DOCTYPE_INTERNAL_SUBSET:
- if (startDoctypeDeclHandler) {
- startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid,
- doctypePubid, 1);
- doctypeName = NULL;
- poolClear(&tempPool);
- handleDefault = XML_FALSE;
- }
- break;
-#ifdef XML_DTD
- case XML_ROLE_TEXT_DECL:
- {
- enum XML_Error result = processXmlDecl(parser, 1, s, next);
- if (result != XML_ERROR_NONE)
- return result;
- enc = encoding;
- handleDefault = XML_FALSE;
- }
- break;
-#endif /* XML_DTD */
- case XML_ROLE_DOCTYPE_PUBLIC_ID:
-#ifdef XML_DTD
- useForeignDTD = XML_FALSE;
- declEntity = (ENTITY *)lookup(&dtd->paramEntities,
- externalSubsetName,
- sizeof(ENTITY));
- if (!declEntity)
- return XML_ERROR_NO_MEMORY;
-#endif /* XML_DTD */
- dtd->hasParamEntityRefs = XML_TRUE;
- if (startDoctypeDeclHandler) {
- if (!XmlIsPublicId(enc, s, next, eventPP))
- return XML_ERROR_PUBLICID;
- doctypePubid = poolStoreString(&tempPool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!doctypePubid)
- return XML_ERROR_NO_MEMORY;
- normalizePublicId((XML_Char *)doctypePubid);
- poolFinish(&tempPool);
- handleDefault = XML_FALSE;
- goto alreadyChecked;
- }
- /* fall through */
- case XML_ROLE_ENTITY_PUBLIC_ID:
- if (!XmlIsPublicId(enc, s, next, eventPP))
- return XML_ERROR_PUBLICID;
- alreadyChecked:
- if (dtd->keepProcessing && declEntity) {
- XML_Char *tem = poolStoreString(&dtd->pool,
- enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!tem)
- return XML_ERROR_NO_MEMORY;
- normalizePublicId(tem);
- declEntity->publicId = tem;
- poolFinish(&dtd->pool);
- if (entityDeclHandler)
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_DOCTYPE_CLOSE:
- if (doctypeName) {
- startDoctypeDeclHandler(handlerArg, doctypeName,
- doctypeSysid, doctypePubid, 0);
- poolClear(&tempPool);
- handleDefault = XML_FALSE;
- }
- /* doctypeSysid will be non-NULL in the case of a previous
- XML_ROLE_DOCTYPE_SYSTEM_ID, even if startDoctypeDeclHandler
- was not set, indicating an external subset
- */
-#ifdef XML_DTD
- if (doctypeSysid || useForeignDTD) {
- XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs;
- dtd->hasParamEntityRefs = XML_TRUE;
- if (paramEntityParsing && externalEntityRefHandler) {
- ENTITY *entity = (ENTITY *)lookup(&dtd->paramEntities,
- externalSubsetName,
- sizeof(ENTITY));
- if (!entity)
- return XML_ERROR_NO_MEMORY;
- if (useForeignDTD)
- entity->base = curBase;
- dtd->paramEntityRead = XML_FALSE;
- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
- 0,
- entity->base,
- entity->systemId,
- entity->publicId))
- return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
- if (dtd->paramEntityRead) {
- if (!dtd->standalone &&
- notStandaloneHandler &&
- !notStandaloneHandler(handlerArg))
- return XML_ERROR_NOT_STANDALONE;
- }
- /* if we didn't read the foreign DTD then this means that there
- is no external subset and we must reset dtd->hasParamEntityRefs
- */
- else if (!doctypeSysid)
- dtd->hasParamEntityRefs = hadParamEntityRefs;
- /* end of DTD - no need to update dtd->keepProcessing */
- }
- useForeignDTD = XML_FALSE;
- }
-#endif /* XML_DTD */
- if (endDoctypeDeclHandler) {
- endDoctypeDeclHandler(handlerArg);
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_INSTANCE_START:
-#ifdef XML_DTD
- /* if there is no DOCTYPE declaration then now is the
- last chance to read the foreign DTD
- */
- if (useForeignDTD) {
- XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs;
- dtd->hasParamEntityRefs = XML_TRUE;
- if (paramEntityParsing && externalEntityRefHandler) {
- ENTITY *entity = (ENTITY *)lookup(&dtd->paramEntities,
- externalSubsetName,
- sizeof(ENTITY));
- if (!entity)
- return XML_ERROR_NO_MEMORY;
- entity->base = curBase;
- dtd->paramEntityRead = XML_FALSE;
- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
- 0,
- entity->base,
- entity->systemId,
- entity->publicId))
- return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
- if (dtd->paramEntityRead) {
- if (!dtd->standalone &&
- notStandaloneHandler &&
- !notStandaloneHandler(handlerArg))
- return XML_ERROR_NOT_STANDALONE;
- }
- /* if we didn't read the foreign DTD then this means that there
- is no external subset and we must reset dtd->hasParamEntityRefs
- */
- else
- dtd->hasParamEntityRefs = hadParamEntityRefs;
- /* end of DTD - no need to update dtd->keepProcessing */
- }
- }
-#endif /* XML_DTD */
- processor = contentProcessor;
- return contentProcessor(parser, s, end, nextPtr);
- case XML_ROLE_ATTLIST_ELEMENT_NAME:
- declElementType = getElementType(parser, enc, s, next);
- if (!declElementType)
- return XML_ERROR_NO_MEMORY;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_NAME:
- declAttributeId = getAttributeId(parser, enc, s, next);
- if (!declAttributeId)
- return XML_ERROR_NO_MEMORY;
- declAttributeIsCdata = XML_FALSE;
- declAttributeType = NULL;
- declAttributeIsId = XML_FALSE;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_TYPE_CDATA:
- declAttributeIsCdata = XML_TRUE;
- declAttributeType = atypeCDATA;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_TYPE_ID:
- declAttributeIsId = XML_TRUE;
- declAttributeType = atypeID;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_TYPE_IDREF:
- declAttributeType = atypeIDREF;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_TYPE_IDREFS:
- declAttributeType = atypeIDREFS;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_TYPE_ENTITY:
- declAttributeType = atypeENTITY;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES:
- declAttributeType = atypeENTITIES;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN:
- declAttributeType = atypeNMTOKEN;
- goto checkAttListDeclHandler;
- case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS:
- declAttributeType = atypeNMTOKENS;
- checkAttListDeclHandler:
- if (dtd->keepProcessing && attlistDeclHandler)
- handleDefault = XML_FALSE;
- break;
- case XML_ROLE_ATTRIBUTE_ENUM_VALUE:
- case XML_ROLE_ATTRIBUTE_NOTATION_VALUE:
- if (dtd->keepProcessing && attlistDeclHandler) {
- const XML_Char *prefix;
- if (declAttributeType) {
- prefix = enumValueSep;
- }
- else {
- prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE
- ? notationPrefix
- : enumValueStart);
- }
- if (!poolAppendString(&tempPool, prefix))
- return XML_ERROR_NO_MEMORY;
- if (!poolAppend(&tempPool, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- declAttributeType = tempPool.start;
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE:
- case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE:
- if (dtd->keepProcessing) {
- if (!defineAttribute(declElementType, declAttributeId,
- declAttributeIsCdata, declAttributeIsId,
- 0, parser))
- return XML_ERROR_NO_MEMORY;
- if (attlistDeclHandler && declAttributeType) {
- if (*declAttributeType == XML_T(ASCII_LPAREN)
- || (*declAttributeType == XML_T(ASCII_N)
- && declAttributeType[1] == XML_T(ASCII_O))) {
- /* Enumerated or Notation type */
- if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN))
- || !poolAppendChar(&tempPool, XML_T('\0')))
- return XML_ERROR_NO_MEMORY;
- declAttributeType = tempPool.start;
- poolFinish(&tempPool);
- }
- *eventEndPP = s;
- attlistDeclHandler(handlerArg, declElementType->name,
- declAttributeId->name, declAttributeType,
- 0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE);
- poolClear(&tempPool);
- handleDefault = XML_FALSE;
- }
- }
- break;
- case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE:
- case XML_ROLE_FIXED_ATTRIBUTE_VALUE:
- if (dtd->keepProcessing) {
- const XML_Char *attVal;
- enum XML_Error result =
- storeAttributeValue(parser, enc, declAttributeIsCdata,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar,
- &dtd->pool);
- if (result)
- return result;
- attVal = poolStart(&dtd->pool);
- poolFinish(&dtd->pool);
- /* ID attributes aren't allowed to have a default */
- if (!defineAttribute(declElementType, declAttributeId,
- declAttributeIsCdata, XML_FALSE, attVal, parser))
- return XML_ERROR_NO_MEMORY;
- if (attlistDeclHandler && declAttributeType) {
- if (*declAttributeType == XML_T(ASCII_LPAREN)
- || (*declAttributeType == XML_T(ASCII_N)
- && declAttributeType[1] == XML_T(ASCII_O))) {
- /* Enumerated or Notation type */
- if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN))
- || !poolAppendChar(&tempPool, XML_T('\0')))
- return XML_ERROR_NO_MEMORY;
- declAttributeType = tempPool.start;
- poolFinish(&tempPool);
- }
- *eventEndPP = s;
- attlistDeclHandler(handlerArg, declElementType->name,
- declAttributeId->name, declAttributeType,
- attVal,
- role == XML_ROLE_FIXED_ATTRIBUTE_VALUE);
- poolClear(&tempPool);
- handleDefault = XML_FALSE;
- }
- }
- break;
- case XML_ROLE_ENTITY_VALUE:
- if (dtd->keepProcessing) {
- enum XML_Error result = storeEntityValue(parser, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (declEntity) {
- declEntity->textPtr = poolStart(&dtd->entityValuePool);
- declEntity->textLen = (int)(poolLength(&dtd->entityValuePool));
- poolFinish(&dtd->entityValuePool);
- if (entityDeclHandler) {
- *eventEndPP = s;
- entityDeclHandler(handlerArg,
- declEntity->name,
- declEntity->is_param,
- declEntity->textPtr,
- declEntity->textLen,
- curBase, 0, 0, 0);
- handleDefault = XML_FALSE;
- }
- }
- else
- poolDiscard(&dtd->entityValuePool);
- if (result != XML_ERROR_NONE)
- return result;
- }
- break;
- case XML_ROLE_DOCTYPE_SYSTEM_ID:
-#ifdef XML_DTD
- useForeignDTD = XML_FALSE;
-#endif /* XML_DTD */
- dtd->hasParamEntityRefs = XML_TRUE;
- if (startDoctypeDeclHandler) {
- doctypeSysid = poolStoreString(&tempPool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (doctypeSysid == NULL)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- handleDefault = XML_FALSE;
- }
-#ifdef XML_DTD
- else
- /* use externalSubsetName to make doctypeSysid non-NULL
- for the case where no startDoctypeDeclHandler is set */
- doctypeSysid = externalSubsetName;
-#endif /* XML_DTD */
- if (!dtd->standalone
-#ifdef XML_DTD
- && !paramEntityParsing
-#endif /* XML_DTD */
- && notStandaloneHandler
- && !notStandaloneHandler(handlerArg))
- return XML_ERROR_NOT_STANDALONE;
-#ifndef XML_DTD
- break;
-#else /* XML_DTD */
- if (!declEntity) {
- declEntity = (ENTITY *)lookup(&dtd->paramEntities,
- externalSubsetName,
- sizeof(ENTITY));
- if (!declEntity)
- return XML_ERROR_NO_MEMORY;
- declEntity->publicId = NULL;
- }
- /* fall through */
-#endif /* XML_DTD */
- case XML_ROLE_ENTITY_SYSTEM_ID:
- if (dtd->keepProcessing && declEntity) {
- declEntity->systemId = poolStoreString(&dtd->pool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!declEntity->systemId)
- return XML_ERROR_NO_MEMORY;
- declEntity->base = curBase;
- poolFinish(&dtd->pool);
- if (entityDeclHandler)
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_ENTITY_COMPLETE:
- if (dtd->keepProcessing && declEntity && entityDeclHandler) {
- *eventEndPP = s;
- entityDeclHandler(handlerArg,
- declEntity->name,
- declEntity->is_param,
- 0,0,
- declEntity->base,
- declEntity->systemId,
- declEntity->publicId,
- 0);
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_ENTITY_NOTATION_NAME:
- if (dtd->keepProcessing && declEntity) {
- declEntity->notation = poolStoreString(&dtd->pool, enc, s, next);
- if (!declEntity->notation)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&dtd->pool);
- if (unparsedEntityDeclHandler) {
- *eventEndPP = s;
- unparsedEntityDeclHandler(handlerArg,
- declEntity->name,
- declEntity->base,
- declEntity->systemId,
- declEntity->publicId,
- declEntity->notation);
- handleDefault = XML_FALSE;
- }
- else if (entityDeclHandler) {
- *eventEndPP = s;
- entityDeclHandler(handlerArg,
- declEntity->name,
- 0,0,0,
- declEntity->base,
- declEntity->systemId,
- declEntity->publicId,
- declEntity->notation);
- handleDefault = XML_FALSE;
- }
- }
- break;
- case XML_ROLE_GENERAL_ENTITY_NAME:
- {
- if (XmlPredefinedEntityName(enc, s, next)) {
- declEntity = NULL;
- break;
- }
- if (dtd->keepProcessing) {
- const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- declEntity = (ENTITY *)lookup(&dtd->generalEntities, name,
- sizeof(ENTITY));
- if (!declEntity)
- return XML_ERROR_NO_MEMORY;
- if (declEntity->name != name) {
- poolDiscard(&dtd->pool);
- declEntity = NULL;
- }
- else {
- poolFinish(&dtd->pool);
- declEntity->publicId = NULL;
- declEntity->is_param = XML_FALSE;
- /* if we have a parent parser or are reading an internal parameter
- entity, then the entity declaration is not considered "internal"
- */
- declEntity->is_internal = !(parentParser || openInternalEntities);
- if (entityDeclHandler)
- handleDefault = XML_FALSE;
- }
- }
- else {
- poolDiscard(&dtd->pool);
- declEntity = NULL;
- }
- }
- break;
- case XML_ROLE_PARAM_ENTITY_NAME:
-#ifdef XML_DTD
- if (dtd->keepProcessing) {
- const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- declEntity = (ENTITY *)lookup(&dtd->paramEntities,
- name, sizeof(ENTITY));
- if (!declEntity)
- return XML_ERROR_NO_MEMORY;
- if (declEntity->name != name) {
- poolDiscard(&dtd->pool);
- declEntity = NULL;
- }
- else {
- poolFinish(&dtd->pool);
- declEntity->publicId = NULL;
- declEntity->is_param = XML_TRUE;
- /* if we have a parent parser or are reading an internal parameter
- entity, then the entity declaration is not considered "internal"
- */
- declEntity->is_internal = !(parentParser || openInternalEntities);
- if (entityDeclHandler)
- handleDefault = XML_FALSE;
- }
- }
- else {
- poolDiscard(&dtd->pool);
- declEntity = NULL;
- }
-#else /* not XML_DTD */
- declEntity = NULL;
-#endif /* XML_DTD */
- break;
- case XML_ROLE_NOTATION_NAME:
- declNotationPublicId = NULL;
- declNotationName = NULL;
- if (notationDeclHandler) {
- declNotationName = poolStoreString(&tempPool, enc, s, next);
- if (!declNotationName)
- return XML_ERROR_NO_MEMORY;
- poolFinish(&tempPool);
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_NOTATION_PUBLIC_ID:
- if (!XmlIsPublicId(enc, s, next, eventPP))
- return XML_ERROR_PUBLICID;
- if (declNotationName) { /* means notationDeclHandler != NULL */
- XML_Char *tem = poolStoreString(&tempPool,
- enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!tem)
- return XML_ERROR_NO_MEMORY;
- normalizePublicId(tem);
- declNotationPublicId = tem;
- poolFinish(&tempPool);
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_NOTATION_SYSTEM_ID:
- if (declNotationName && notationDeclHandler) {
- const XML_Char *systemId
- = poolStoreString(&tempPool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!systemId)
- return XML_ERROR_NO_MEMORY;
- *eventEndPP = s;
- notationDeclHandler(handlerArg,
- declNotationName,
- curBase,
- systemId,
- declNotationPublicId);
- handleDefault = XML_FALSE;
- }
- poolClear(&tempPool);
- break;
- case XML_ROLE_NOTATION_NO_SYSTEM_ID:
- if (declNotationPublicId && notationDeclHandler) {
- *eventEndPP = s;
- notationDeclHandler(handlerArg,
- declNotationName,
- curBase,
- 0,
- declNotationPublicId);
- handleDefault = XML_FALSE;
- }
- poolClear(&tempPool);
- break;
- case XML_ROLE_ERROR:
- switch (tok) {
- case XML_TOK_PARAM_ENTITY_REF:
- /* PE references in internal subset are
- not allowed within declarations. */
- return XML_ERROR_PARAM_ENTITY_REF;
- case XML_TOK_XML_DECL:
- return XML_ERROR_MISPLACED_XML_PI;
- default:
- return XML_ERROR_SYNTAX;
- }
-#ifdef XML_DTD
- case XML_ROLE_IGNORE_SECT:
- {
- enum XML_Error result;
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
- handleDefault = XML_FALSE;
- result = doIgnoreSection(parser, enc, &next, end, nextPtr, haveMore);
- if (result != XML_ERROR_NONE)
- return result;
- else if (!next) {
- processor = ignoreSectionProcessor;
- return result;
- }
- }
- break;
-#endif /* XML_DTD */
- case XML_ROLE_GROUP_OPEN:
- if (prologState.level >= groupSize) {
- if (groupSize) {
- char *temp = (char *)REALLOC(groupConnector, groupSize *= 2);
- if (temp == NULL)
- return XML_ERROR_NO_MEMORY;
- groupConnector = temp;
- if (dtd->scaffIndex) {
- int *temp = (int *)REALLOC(dtd->scaffIndex,
- groupSize * sizeof(int));
- if (temp == NULL)
- return XML_ERROR_NO_MEMORY;
- dtd->scaffIndex = temp;
- }
- }
- else {
- groupConnector = (char *)MALLOC(groupSize = 32);
- if (!groupConnector)
- return XML_ERROR_NO_MEMORY;
- }
- }
- groupConnector[prologState.level] = 0;
- if (dtd->in_eldecl) {
- int myindex = nextScaffoldPart(parser);
- if (myindex < 0)
- return XML_ERROR_NO_MEMORY;
- dtd->scaffIndex[dtd->scaffLevel] = myindex;
- dtd->scaffLevel++;
- dtd->scaffold[myindex].type = XML_CTYPE_SEQ;
- if (elementDeclHandler)
- handleDefault = XML_FALSE;
- }
- break;
- case XML_ROLE_GROUP_SEQUENCE:
- if (groupConnector[prologState.level] == ASCII_PIPE)
- return XML_ERROR_SYNTAX;
- groupConnector[prologState.level] = ASCII_COMMA;
- if (dtd->in_eldecl && elementDeclHandler)
- handleDefault = XML_FALSE;
- break;
- case XML_ROLE_GROUP_CHOICE:
- if (groupConnector[prologState.level] == ASCII_COMMA)
- return XML_ERROR_SYNTAX;
- if (dtd->in_eldecl
- && !groupConnector[prologState.level]
- && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
- != XML_CTYPE_MIXED)
- ) {
- dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
- = XML_CTYPE_CHOICE;
- if (elementDeclHandler)
- handleDefault = XML_FALSE;
- }
- groupConnector[prologState.level] = ASCII_PIPE;
- break;
- case XML_ROLE_PARAM_ENTITY_REF:
-#ifdef XML_DTD
- case XML_ROLE_INNER_PARAM_ENTITY_REF:
- dtd->hasParamEntityRefs = XML_TRUE;
- if (!paramEntityParsing)
- dtd->keepProcessing = dtd->standalone;
- else {
- const XML_Char *name;
- ENTITY *entity;
- name = poolStoreString(&dtd->pool, enc,
- s + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- entity = (ENTITY *)lookup(&dtd->paramEntities, name, 0);
- poolDiscard(&dtd->pool);
- /* first, determine if a check for an existing declaration is needed;
- if yes, check that the entity exists, and that it is internal,
- otherwise call the skipped entity handler
- */
- if (prologState.documentEntity &&
- (dtd->standalone
- ? !openInternalEntities
- : !dtd->hasParamEntityRefs)) {
- if (!entity)
- return XML_ERROR_UNDEFINED_ENTITY;
- else if (!entity->is_internal)
- return XML_ERROR_ENTITY_DECLARED_IN_PE;
- }
- else if (!entity) {
- dtd->keepProcessing = dtd->standalone;
- /* cannot report skipped entities in declarations */
- if ((role == XML_ROLE_PARAM_ENTITY_REF) && skippedEntityHandler) {
- skippedEntityHandler(handlerArg, name, 1);
- handleDefault = XML_FALSE;
- }
- break;
- }
- if (entity->open)
- return XML_ERROR_RECURSIVE_ENTITY_REF;
- if (entity->textPtr) {
- enum XML_Error result;
- XML_Bool betweenDecl =
- (role == XML_ROLE_PARAM_ENTITY_REF ? XML_TRUE : XML_FALSE);
- result = processInternalEntity(parser, entity, betweenDecl);
- if (result != XML_ERROR_NONE)
- return result;
- handleDefault = XML_FALSE;
- break;
- }
- if (externalEntityRefHandler) {
- dtd->paramEntityRead = XML_FALSE;
- entity->open = XML_TRUE;
- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
- 0,
- entity->base,
- entity->systemId,
- entity->publicId)) {
- entity->open = XML_FALSE;
- return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
- }
- entity->open = XML_FALSE;
- handleDefault = XML_FALSE;
- if (!dtd->paramEntityRead) {
- dtd->keepProcessing = dtd->standalone;
- break;
- }
- }
- else {
- dtd->keepProcessing = dtd->standalone;
- break;
- }
- }
-#endif /* XML_DTD */
- if (!dtd->standalone &&
- notStandaloneHandler &&
- !notStandaloneHandler(handlerArg))
- return XML_ERROR_NOT_STANDALONE;
- break;
-
- /* Element declaration stuff */
-
- case XML_ROLE_ELEMENT_NAME:
- if (elementDeclHandler) {
- declElementType = getElementType(parser, enc, s, next);
- if (!declElementType)
- return XML_ERROR_NO_MEMORY;
- dtd->scaffLevel = 0;
- dtd->scaffCount = 0;
- dtd->in_eldecl = XML_TRUE;
- handleDefault = XML_FALSE;
- }
- break;
-
- case XML_ROLE_CONTENT_ANY:
- case XML_ROLE_CONTENT_EMPTY:
- if (dtd->in_eldecl) {
- if (elementDeclHandler) {
- XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content));
- if (!content)
- return XML_ERROR_NO_MEMORY;
- content->quant = XML_CQUANT_NONE;
- content->name = NULL;
- content->numchildren = 0;
- content->children = NULL;
- content->type = ((role == XML_ROLE_CONTENT_ANY) ?
- XML_CTYPE_ANY :
- XML_CTYPE_EMPTY);
- *eventEndPP = s;
- elementDeclHandler(handlerArg, declElementType->name, content);
- handleDefault = XML_FALSE;
- }
- dtd->in_eldecl = XML_FALSE;
- }
- break;
-
- case XML_ROLE_CONTENT_PCDATA:
- if (dtd->in_eldecl) {
- dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
- = XML_CTYPE_MIXED;
- if (elementDeclHandler)
- handleDefault = XML_FALSE;
- }
- break;
-
- case XML_ROLE_CONTENT_ELEMENT:
- quant = XML_CQUANT_NONE;
- goto elementContent;
- case XML_ROLE_CONTENT_ELEMENT_OPT:
- quant = XML_CQUANT_OPT;
- goto elementContent;
- case XML_ROLE_CONTENT_ELEMENT_REP:
- quant = XML_CQUANT_REP;
- goto elementContent;
- case XML_ROLE_CONTENT_ELEMENT_PLUS:
- quant = XML_CQUANT_PLUS;
- elementContent:
- if (dtd->in_eldecl) {
- ELEMENT_TYPE *el;
- const XML_Char *name;
- int nameLen;
- const char *nxt = (quant == XML_CQUANT_NONE
- ? next
- : next - enc->minBytesPerChar);
- int myindex = nextScaffoldPart(parser);
- if (myindex < 0)
- return XML_ERROR_NO_MEMORY;
- dtd->scaffold[myindex].type = XML_CTYPE_NAME;
- dtd->scaffold[myindex].quant = quant;
- el = getElementType(parser, enc, s, nxt);
- if (!el)
- return XML_ERROR_NO_MEMORY;
- name = el->name;
- dtd->scaffold[myindex].name = name;
- nameLen = 0;
- for (; name[nameLen++]; );
- dtd->contentStringLen += nameLen;
- if (elementDeclHandler)
- handleDefault = XML_FALSE;
- }
- break;
-
- case XML_ROLE_GROUP_CLOSE:
- quant = XML_CQUANT_NONE;
- goto closeGroup;
- case XML_ROLE_GROUP_CLOSE_OPT:
- quant = XML_CQUANT_OPT;
- goto closeGroup;
- case XML_ROLE_GROUP_CLOSE_REP:
- quant = XML_CQUANT_REP;
- goto closeGroup;
- case XML_ROLE_GROUP_CLOSE_PLUS:
- quant = XML_CQUANT_PLUS;
- closeGroup:
- if (dtd->in_eldecl) {
- if (elementDeclHandler)
- handleDefault = XML_FALSE;
- dtd->scaffLevel--;
- dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant;
- if (dtd->scaffLevel == 0) {
- if (!handleDefault) {
- XML_Content *model = build_model(parser);
- if (!model)
- return XML_ERROR_NO_MEMORY;
- *eventEndPP = s;
- elementDeclHandler(handlerArg, declElementType->name, model);
- }
- dtd->in_eldecl = XML_FALSE;
- dtd->contentStringLen = 0;
- }
- }
- break;
- /* End element declaration stuff */
-
- case XML_ROLE_PI:
- if (!reportProcessingInstruction(parser, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- handleDefault = XML_FALSE;
- break;
- case XML_ROLE_COMMENT:
- if (!reportComment(parser, enc, s, next))
- return XML_ERROR_NO_MEMORY;
- handleDefault = XML_FALSE;
- break;
- case XML_ROLE_NONE:
- switch (tok) {
- case XML_TOK_BOM:
- handleDefault = XML_FALSE;
- break;
- }
- break;
- case XML_ROLE_DOCTYPE_NONE:
- if (startDoctypeDeclHandler)
- handleDefault = XML_FALSE;
- break;
- case XML_ROLE_ENTITY_NONE:
- if (dtd->keepProcessing && entityDeclHandler)
- handleDefault = XML_FALSE;
- break;
- case XML_ROLE_NOTATION_NONE:
- if (notationDeclHandler)
- handleDefault = XML_FALSE;
- break;
- case XML_ROLE_ATTLIST_NONE:
- if (dtd->keepProcessing && attlistDeclHandler)
- handleDefault = XML_FALSE;
- break;
- case XML_ROLE_ELEMENT_NONE:
- if (elementDeclHandler)
- handleDefault = XML_FALSE;
- break;
- } /* end of big switch */
-
- if (handleDefault && defaultHandler)
- reportDefault(parser, enc, s, next);
-
- switch (ps_parsing) {
- case XML_SUSPENDED:
- *nextPtr = next;
- return XML_ERROR_NONE;
- case XML_FINISHED:
- return XML_ERROR_ABORTED;
- default:
- s = next;
- tok = XmlPrologTok(enc, s, end, &next);
- }
- }
- /* not reached */
-}
-
-static enum XML_Error PTRCALL
-epilogProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- processor = epilogProcessor;
- eventPtr = s;
- for (;;) {
- const char *next = NULL;
- int tok = XmlPrologTok(encoding, s, end, &next);
- eventEndPtr = next;
- switch (tok) {
- /* report partial linebreak - it might be the last token */
- case -XML_TOK_PROLOG_S:
- if (defaultHandler) {
- reportDefault(parser, encoding, s, next);
- if (ps_parsing == XML_FINISHED)
- return XML_ERROR_ABORTED;
- }
- *nextPtr = next;
- return XML_ERROR_NONE;
- case XML_TOK_NONE:
- *nextPtr = s;
- return XML_ERROR_NONE;
- case XML_TOK_PROLOG_S:
- if (defaultHandler)
- reportDefault(parser, encoding, s, next);
- break;
- case XML_TOK_PI:
- if (!reportProcessingInstruction(parser, encoding, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_COMMENT:
- if (!reportComment(parser, encoding, s, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_INVALID:
- eventPtr = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- if (!ps_finalBuffer) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_UNCLOSED_TOKEN;
- case XML_TOK_PARTIAL_CHAR:
- if (!ps_finalBuffer) {
- *nextPtr = s;
- return XML_ERROR_NONE;
- }
- return XML_ERROR_PARTIAL_CHAR;
- default:
- return XML_ERROR_JUNK_AFTER_DOC_ELEMENT;
- }
- eventPtr = s = next;
- switch (ps_parsing) {
- case XML_SUSPENDED:
- *nextPtr = next;
- return XML_ERROR_NONE;
- case XML_FINISHED:
- return XML_ERROR_ABORTED;
- default: ;
- }
- }
-}
-
-static enum XML_Error
-processInternalEntity(XML_Parser parser, ENTITY *entity,
- XML_Bool betweenDecl)
-{
- const char *textStart, *textEnd;
- const char *next;
- enum XML_Error result;
- OPEN_INTERNAL_ENTITY *openEntity;
-
- if (freeInternalEntities) {
- openEntity = freeInternalEntities;
- freeInternalEntities = openEntity->next;
- }
- else {
- openEntity = (OPEN_INTERNAL_ENTITY *)MALLOC(sizeof(OPEN_INTERNAL_ENTITY));
- if (!openEntity)
- return XML_ERROR_NO_MEMORY;
- }
- entity->open = XML_TRUE;
- entity->processed = 0;
- openEntity->next = openInternalEntities;
- openInternalEntities = openEntity;
- openEntity->entity = entity;
- openEntity->startTagLevel = tagLevel;
- openEntity->betweenDecl = betweenDecl;
- openEntity->internalEventPtr = NULL;
- openEntity->internalEventEndPtr = NULL;
- textStart = (char *)entity->textPtr;
- textEnd = (char *)(entity->textPtr + entity->textLen);
-
-#ifdef XML_DTD
- if (entity->is_param) {
- int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next);
- result = doProlog(parser, internalEncoding, textStart, textEnd, tok,
- next, &next, XML_FALSE);
- }
- else
-#endif /* XML_DTD */
- result = doContent(parser, tagLevel, internalEncoding, textStart,
- textEnd, &next, XML_FALSE);
-
- if (result == XML_ERROR_NONE) {
- if (textEnd != next && ps_parsing == XML_SUSPENDED) {
- entity->processed = (int)(next - textStart);
- processor = internalEntityProcessor;
- }
- else {
- entity->open = XML_FALSE;
- openInternalEntities = openEntity->next;
- /* put openEntity back in list of free instances */
- openEntity->next = freeInternalEntities;
- freeInternalEntities = openEntity;
- }
- }
- return result;
-}
-
-static enum XML_Error PTRCALL
-internalEntityProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- ENTITY *entity;
- const char *textStart, *textEnd;
- const char *next;
- enum XML_Error result;
- OPEN_INTERNAL_ENTITY *openEntity = openInternalEntities;
- if (!openEntity)
- return XML_ERROR_UNEXPECTED_STATE;
-
- entity = openEntity->entity;
- textStart = ((char *)entity->textPtr) + entity->processed;
- textEnd = (char *)(entity->textPtr + entity->textLen);
-
-#ifdef XML_DTD
- if (entity->is_param) {
- int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next);
- result = doProlog(parser, internalEncoding, textStart, textEnd, tok,
- next, &next, XML_FALSE);
- }
- else
-#endif /* XML_DTD */
- result = doContent(parser, openEntity->startTagLevel, internalEncoding,
- textStart, textEnd, &next, XML_FALSE);
-
- if (result != XML_ERROR_NONE)
- return result;
- else if (textEnd != next && ps_parsing == XML_SUSPENDED) {
- entity->processed = (int)(next - (char *)entity->textPtr);
- return result;
- }
- else {
- entity->open = XML_FALSE;
- openInternalEntities = openEntity->next;
- /* put openEntity back in list of free instances */
- openEntity->next = freeInternalEntities;
- freeInternalEntities = openEntity;
- }
-
-#ifdef XML_DTD
- if (entity->is_param) {
- int tok;
- processor = prologProcessor;
- tok = XmlPrologTok(encoding, s, end, &next);
- return doProlog(parser, encoding, s, end, tok, next, nextPtr,
- (XML_Bool)!ps_finalBuffer);
- }
- else
-#endif /* XML_DTD */
- {
- processor = contentProcessor;
- /* see externalEntityContentProcessor vs contentProcessor */
- return doContent(parser, parentParser ? 1 : 0, encoding, s, end,
- nextPtr, (XML_Bool)!ps_finalBuffer);
- }
-}
-
-static enum XML_Error PTRCALL
-errorProcessor(XML_Parser parser,
- const char *s,
- const char *end,
- const char **nextPtr)
-{
- return errorCode;
-}
-
-static enum XML_Error
-storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata,
- const char *ptr, const char *end,
- STRING_POOL *pool)
-{
- enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr,
- end, pool);
- if (result)
- return result;
- if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20)
- poolChop(pool);
- if (!poolAppendChar(pool, XML_T('\0')))
- return XML_ERROR_NO_MEMORY;
- return XML_ERROR_NONE;
-}
-
-static enum XML_Error
-appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata,
- const char *ptr, const char *end,
- STRING_POOL *pool)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- for (;;) {
- const char *next;
- int tok = XmlAttributeValueTok(enc, ptr, end, &next);
- switch (tok) {
- case XML_TOK_NONE:
- return XML_ERROR_NONE;
- case XML_TOK_INVALID:
- if (enc == encoding)
- eventPtr = next;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_PARTIAL:
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_INVALID_TOKEN;
- case XML_TOK_CHAR_REF:
- {
- XML_Char buf[XML_ENCODE_MAX];
- int i;
- int n = XmlCharRefNumber(enc, ptr);
- if (n < 0) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_BAD_CHAR_REF;
- }
- if (!isCdata
- && n == 0x20 /* space */
- && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
- break;
- n = XmlEncode(n, (ICHAR *)buf);
- if (!n) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_BAD_CHAR_REF;
- }
- for (i = 0; i < n; i++) {
- if (!poolAppendChar(pool, buf[i]))
- return XML_ERROR_NO_MEMORY;
- }
- }
- break;
- case XML_TOK_DATA_CHARS:
- if (!poolAppend(pool, enc, ptr, next))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_TRAILING_CR:
- next = ptr + enc->minBytesPerChar;
- /* fall through */
- case XML_TOK_ATTRIBUTE_VALUE_S:
- case XML_TOK_DATA_NEWLINE:
- if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
- break;
- if (!poolAppendChar(pool, 0x20))
- return XML_ERROR_NO_MEMORY;
- break;
- case XML_TOK_ENTITY_REF:
- {
- const XML_Char *name;
- ENTITY *entity;
- char checkEntityDecl;
- XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc,
- ptr + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (ch) {
- if (!poolAppendChar(pool, ch))
- return XML_ERROR_NO_MEMORY;
- break;
- }
- name = poolStoreString(&temp2Pool, enc,
- ptr + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!name)
- return XML_ERROR_NO_MEMORY;
- entity = (ENTITY *)lookup(&dtd->generalEntities, name, 0);
- poolDiscard(&temp2Pool);
- /* First, determine if a check for an existing declaration is needed;
- if yes, check that the entity exists, and that it is internal.
- */
- if (pool == &dtd->pool) /* are we called from prolog? */
- checkEntityDecl =
-#ifdef XML_DTD
- prologState.documentEntity &&
-#endif /* XML_DTD */
- (dtd->standalone
- ? !openInternalEntities
- : !dtd->hasParamEntityRefs);
- else /* if (pool == &tempPool): we are called from content */
- checkEntityDecl = !dtd->hasParamEntityRefs || dtd->standalone;
- if (checkEntityDecl) {
- if (!entity)
- return XML_ERROR_UNDEFINED_ENTITY;
- else if (!entity->is_internal)
- return XML_ERROR_ENTITY_DECLARED_IN_PE;
- }
- else if (!entity) {
- /* Cannot report skipped entity here - see comments on
- skippedEntityHandler.
- if (skippedEntityHandler)
- skippedEntityHandler(handlerArg, name, 0);
- */
- /* Cannot call the default handler because this would be
- out of sync with the call to the startElementHandler.
- if ((pool == &tempPool) && defaultHandler)
- reportDefault(parser, enc, ptr, next);
- */
- break;
- }
- if (entity->open) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_RECURSIVE_ENTITY_REF;
- }
- if (entity->notation) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_BINARY_ENTITY_REF;
- }
- if (!entity->textPtr) {
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF;
- }
- else {
- enum XML_Error result;
- const XML_Char *textEnd = entity->textPtr + entity->textLen;
- entity->open = XML_TRUE;
- result = appendAttributeValue(parser, internalEncoding, isCdata,
- (char *)entity->textPtr,
- (char *)textEnd, pool);
- entity->open = XML_FALSE;
- if (result)
- return result;
- }
- }
- break;
- default:
- if (enc == encoding)
- eventPtr = ptr;
- return XML_ERROR_UNEXPECTED_STATE;
- }
- ptr = next;
- }
- /* not reached */
-}
-
-static enum XML_Error
-storeEntityValue(XML_Parser parser,
- const ENCODING *enc,
- const char *entityTextPtr,
- const char *entityTextEnd)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- STRING_POOL *pool = &(dtd->entityValuePool);
- enum XML_Error result = XML_ERROR_NONE;
-#ifdef XML_DTD
- int oldInEntityValue = prologState.inEntityValue;
- prologState.inEntityValue = 1;
-#endif /* XML_DTD */
- /* never return Null for the value argument in EntityDeclHandler,
- since this would indicate an external entity; therefore we
- have to make sure that entityValuePool.start is not null */
- if (!pool->blocks) {
- if (!poolGrow(pool))
- return XML_ERROR_NO_MEMORY;
- }
-
- for (;;) {
- const char *next;
- int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next);
- switch (tok) {
- case XML_TOK_PARAM_ENTITY_REF:
-#ifdef XML_DTD
- if (isParamEntity || enc != encoding) {
- const XML_Char *name;
- ENTITY *entity;
- name = poolStoreString(&tempPool, enc,
- entityTextPtr + enc->minBytesPerChar,
- next - enc->minBytesPerChar);
- if (!name) {
- result = XML_ERROR_NO_MEMORY;
- goto endEntityValue;
- }
- entity = (ENTITY *)lookup(&dtd->paramEntities, name, 0);
- poolDiscard(&tempPool);
- if (!entity) {
- /* not a well-formedness error - see XML 1.0: WFC Entity Declared */
- /* cannot report skipped entity here - see comments on
- skippedEntityHandler
- if (skippedEntityHandler)
- skippedEntityHandler(handlerArg, name, 0);
- */
- dtd->keepProcessing = dtd->standalone;
- goto endEntityValue;
- }
- if (entity->open) {
- if (enc == encoding)
- eventPtr = entityTextPtr;
- result = XML_ERROR_RECURSIVE_ENTITY_REF;
- goto endEntityValue;
- }
- if (entity->systemId) {
- if (externalEntityRefHandler) {
- dtd->paramEntityRead = XML_FALSE;
- entity->open = XML_TRUE;
- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
- 0,
- entity->base,
- entity->systemId,
- entity->publicId)) {
- entity->open = XML_FALSE;
- result = XML_ERROR_EXTERNAL_ENTITY_HANDLING;
- goto endEntityValue;
- }
- entity->open = XML_FALSE;
- if (!dtd->paramEntityRead)
- dtd->keepProcessing = dtd->standalone;
- }
- else
- dtd->keepProcessing = dtd->standalone;
- }
- else {
- entity->open = XML_TRUE;
- result = storeEntityValue(parser,
- internalEncoding,
- (char *)entity->textPtr,
- (char *)(entity->textPtr
- + entity->textLen));
- entity->open = XML_FALSE;
- if (result)
- goto endEntityValue;
- }
- break;
- }
-#endif /* XML_DTD */
- /* In the internal subset, PE references are not legal
- within markup declarations, e.g entity values in this case. */
- eventPtr = entityTextPtr;
- result = XML_ERROR_PARAM_ENTITY_REF;
- goto endEntityValue;
- case XML_TOK_NONE:
- result = XML_ERROR_NONE;
- goto endEntityValue;
- case XML_TOK_ENTITY_REF:
- case XML_TOK_DATA_CHARS:
- if (!poolAppend(pool, enc, entityTextPtr, next)) {
- result = XML_ERROR_NO_MEMORY;
- goto endEntityValue;
- }
- break;
- case XML_TOK_TRAILING_CR:
- next = entityTextPtr + enc->minBytesPerChar;
- /* fall through */
- case XML_TOK_DATA_NEWLINE:
- if (pool->end == pool->ptr && !poolGrow(pool)) {
- result = XML_ERROR_NO_MEMORY;
- goto endEntityValue;
- }
- *(pool->ptr)++ = 0xA;
- break;
- case XML_TOK_CHAR_REF:
- {
- XML_Char buf[XML_ENCODE_MAX];
- int i;
- int n = XmlCharRefNumber(enc, entityTextPtr);
- if (n < 0) {
- if (enc == encoding)
- eventPtr = entityTextPtr;
- result = XML_ERROR_BAD_CHAR_REF;
- goto endEntityValue;
- }
- n = XmlEncode(n, (ICHAR *)buf);
- if (!n) {
- if (enc == encoding)
- eventPtr = entityTextPtr;
- result = XML_ERROR_BAD_CHAR_REF;
- goto endEntityValue;
- }
- for (i = 0; i < n; i++) {
- if (pool->end == pool->ptr && !poolGrow(pool)) {
- result = XML_ERROR_NO_MEMORY;
- goto endEntityValue;
- }
- *(pool->ptr)++ = buf[i];
- }
- }
- break;
- case XML_TOK_PARTIAL:
- if (enc == encoding)
- eventPtr = entityTextPtr;
- result = XML_ERROR_INVALID_TOKEN;
- goto endEntityValue;
- case XML_TOK_INVALID:
- if (enc == encoding)
- eventPtr = next;
- result = XML_ERROR_INVALID_TOKEN;
- goto endEntityValue;
- default:
- if (enc == encoding)
- eventPtr = entityTextPtr;
- result = XML_ERROR_UNEXPECTED_STATE;
- goto endEntityValue;
- }
- entityTextPtr = next;
- }
-endEntityValue:
-#ifdef XML_DTD
- prologState.inEntityValue = oldInEntityValue;
-#endif /* XML_DTD */
- return result;
-}
-
-static void FASTCALL
-normalizeLines(XML_Char *s)
-{
- XML_Char *p;
- for (;; s++) {
- if (*s == XML_T('\0'))
- return;
- if (*s == 0xD)
- break;
- }
- p = s;
- do {
- if (*s == 0xD) {
- *p++ = 0xA;
- if (*++s == 0xA)
- s++;
- }
- else
- *p++ = *s++;
- } while (*s);
- *p = XML_T('\0');
-}
-
-static int
-reportProcessingInstruction(XML_Parser parser, const ENCODING *enc,
- const char *start, const char *end)
-{
- const XML_Char *target;
- XML_Char *data;
- const char *tem;
- if (!processingInstructionHandler) {
- if (defaultHandler)
- reportDefault(parser, enc, start, end);
- return 1;
- }
- start += enc->minBytesPerChar * 2;
- tem = start + XmlNameLength(enc, start);
- target = poolStoreString(&tempPool, enc, start, tem);
- if (!target)
- return 0;
- poolFinish(&tempPool);
- data = poolStoreString(&tempPool, enc,
- XmlSkipS(enc, tem),
- end - enc->minBytesPerChar*2);
- if (!data)
- return 0;
- normalizeLines(data);
- processingInstructionHandler(handlerArg, target, data);
- poolClear(&tempPool);
- return 1;
-}
-
-static int
-reportComment(XML_Parser parser, const ENCODING *enc,
- const char *start, const char *end)
-{
- XML_Char *data;
- if (!commentHandler) {
- if (defaultHandler)
- reportDefault(parser, enc, start, end);
- return 1;
- }
- data = poolStoreString(&tempPool,
- enc,
- start + enc->minBytesPerChar * 4,
- end - enc->minBytesPerChar * 3);
- if (!data)
- return 0;
- normalizeLines(data);
- commentHandler(handlerArg, data);
- poolClear(&tempPool);
- return 1;
-}
-
-static void
-reportDefault(XML_Parser parser, const ENCODING *enc,
- const char *s, const char *end)
-{
- if (MUST_CONVERT(enc, s)) {
- const char **eventPP;
- const char **eventEndPP;
- if (enc == encoding) {
- eventPP = &eventPtr;
- eventEndPP = &eventEndPtr;
- }
- else {
- eventPP = &(openInternalEntities->internalEventPtr);
- eventEndPP = &(openInternalEntities->internalEventEndPtr);
- }
- do {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd);
- *eventEndPP = s;
- defaultHandler(handlerArg, dataBuf, (int)(dataPtr - (ICHAR *)dataBuf));
- *eventPP = s;
- } while (s != end);
- }
- else
- defaultHandler(handlerArg, (XML_Char *)s, (int)((XML_Char *)end - (XML_Char *)s));
-}
-
-
-static int
-defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata,
- XML_Bool isId, const XML_Char *value, XML_Parser parser)
-{
- DEFAULT_ATTRIBUTE *att;
- if (value || isId) {
- /* The handling of default attributes gets messed up if we have
- a default which duplicates a non-default. */
- int i;
- for (i = 0; i < type->nDefaultAtts; i++)
- if (attId == type->defaultAtts[i].id)
- return 1;
- if (isId && !type->idAtt && !attId->xmlns)
- type->idAtt = attId;
- }
- if (type->nDefaultAtts == type->allocDefaultAtts) {
- if (type->allocDefaultAtts == 0) {
- type->allocDefaultAtts = 8;
- type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(type->allocDefaultAtts
- * sizeof(DEFAULT_ATTRIBUTE));
- if (!type->defaultAtts)
- return 0;
- }
- else {
- DEFAULT_ATTRIBUTE *temp;
- int count = type->allocDefaultAtts * 2;
- temp = (DEFAULT_ATTRIBUTE *)
- REALLOC(type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE)));
- if (temp == NULL)
- return 0;
- type->allocDefaultAtts = count;
- type->defaultAtts = temp;
- }
- }
- att = type->defaultAtts + type->nDefaultAtts;
- att->id = attId;
- att->value = value;
- att->isCdata = isCdata;
- if (!isCdata)
- attId->maybeTokenized = XML_TRUE;
- type->nDefaultAtts += 1;
- return 1;
-}
-
-static int
-setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- const XML_Char *name;
- for (name = elementType->name; *name; name++) {
- if (*name == XML_T(ASCII_COLON)) {
- PREFIX *prefix;
- const XML_Char *s;
- for (s = elementType->name; s != name; s++) {
- if (!poolAppendChar(&dtd->pool, *s))
- return 0;
- }
- if (!poolAppendChar(&dtd->pool, XML_T('\0')))
- return 0;
- prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&dtd->pool),
- sizeof(PREFIX));
- if (!prefix)
- return 0;
- if (prefix->name == poolStart(&dtd->pool))
- poolFinish(&dtd->pool);
- else
- poolDiscard(&dtd->pool);
- elementType->prefix = prefix;
-
- }
- }
- return 1;
-}
-
-static ATTRIBUTE_ID *
-getAttributeId(XML_Parser parser, const ENCODING *enc,
- const char *start, const char *end)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- ATTRIBUTE_ID *id;
- const XML_Char *name;
- if (!poolAppendChar(&dtd->pool, XML_T('\0')))
- return NULL;
- name = poolStoreString(&dtd->pool, enc, start, end);
- if (!name)
- return NULL;
- /* skip quotation mark - its storage will be re-used (like in name[-1]) */
- ++name;
- id = (ATTRIBUTE_ID *)lookup(&dtd->attributeIds, name, sizeof(ATTRIBUTE_ID));
- if (!id)
- return NULL;
- if (id->name != name)
- poolDiscard(&dtd->pool);
- else {
- poolFinish(&dtd->pool);
- if (!ns)
- ;
- else if (name[0] == XML_T(ASCII_x)
- && name[1] == XML_T(ASCII_m)
- && name[2] == XML_T(ASCII_l)
- && name[3] == XML_T(ASCII_n)
- && name[4] == XML_T(ASCII_s)
- && (name[5] == XML_T('\0') || name[5] == XML_T(ASCII_COLON))) {
- if (name[5] == XML_T('\0'))
- id->prefix = &dtd->defaultPrefix;
- else
- id->prefix = (PREFIX *)lookup(&dtd->prefixes, name + 6, sizeof(PREFIX));
- id->xmlns = XML_TRUE;
- }
- else {
- int i;
- for (i = 0; name[i]; i++) {
- /* attributes without prefix are *not* in the default namespace */
- if (name[i] == XML_T(ASCII_COLON)) {
- int j;
- for (j = 0; j < i; j++) {
- if (!poolAppendChar(&dtd->pool, name[j]))
- return NULL;
- }
- if (!poolAppendChar(&dtd->pool, XML_T('\0')))
- return NULL;
- id->prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&dtd->pool),
- sizeof(PREFIX));
- if (id->prefix->name == poolStart(&dtd->pool))
- poolFinish(&dtd->pool);
- else
- poolDiscard(&dtd->pool);
- break;
- }
- }
- }
- }
- return id;
-}
-
-#define CONTEXT_SEP XML_T(ASCII_FF)
-
-static const XML_Char *
-getContext(XML_Parser parser)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- HASH_TABLE_ITER iter;
- XML_Bool needSep = XML_FALSE;
-
- if (dtd->defaultPrefix.binding) {
- int i;
- int len;
- if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS)))
- return NULL;
- len = dtd->defaultPrefix.binding->uriLen;
- if (namespaceSeparator)
- len--;
- for (i = 0; i < len; i++)
- if (!poolAppendChar(&tempPool, dtd->defaultPrefix.binding->uri[i]))
- return NULL;
- needSep = XML_TRUE;
- }
-
- hashTableIterInit(&iter, &(dtd->prefixes));
- for (;;) {
- int i;
- int len;
- const XML_Char *s;
- PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter);
- if (!prefix)
- break;
- if (!prefix->binding)
- continue;
- if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP))
- return NULL;
- for (s = prefix->name; *s; s++)
- if (!poolAppendChar(&tempPool, *s))
- return NULL;
- if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS)))
- return NULL;
- len = prefix->binding->uriLen;
- if (namespaceSeparator)
- len--;
- for (i = 0; i < len; i++)
- if (!poolAppendChar(&tempPool, prefix->binding->uri[i]))
- return NULL;
- needSep = XML_TRUE;
- }
-
-
- hashTableIterInit(&iter, &(dtd->generalEntities));
- for (;;) {
- const XML_Char *s;
- ENTITY *e = (ENTITY *)hashTableIterNext(&iter);
- if (!e)
- break;
- if (!e->open)
- continue;
- if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP))
- return NULL;
- for (s = e->name; *s; s++)
- if (!poolAppendChar(&tempPool, *s))
- return 0;
- needSep = XML_TRUE;
- }
-
- if (!poolAppendChar(&tempPool, XML_T('\0')))
- return NULL;
- return tempPool.start;
-}
-
-static XML_Bool
-setContext(XML_Parser parser, const XML_Char *context)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- const XML_Char *s = context;
-
- while (*context != XML_T('\0')) {
- if (*s == CONTEXT_SEP || *s == XML_T('\0')) {
- ENTITY *e;
- if (!poolAppendChar(&tempPool, XML_T('\0')))
- return XML_FALSE;
- e = (ENTITY *)lookup(&dtd->generalEntities, poolStart(&tempPool), 0);
- if (e)
- e->open = XML_TRUE;
- if (*s != XML_T('\0'))
- s++;
- context = s;
- poolDiscard(&tempPool);
- }
- else if (*s == XML_T(ASCII_EQUALS)) {
- PREFIX *prefix;
- if (poolLength(&tempPool) == 0)
- prefix = &dtd->defaultPrefix;
- else {
- if (!poolAppendChar(&tempPool, XML_T('\0')))
- return XML_FALSE;
- prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&tempPool),
- sizeof(PREFIX));
- if (!prefix)
- return XML_FALSE;
- if (prefix->name == poolStart(&tempPool)) {
- prefix->name = poolCopyString(&dtd->pool, prefix->name);
- if (!prefix->name)
- return XML_FALSE;
- }
- poolDiscard(&tempPool);
- }
- for (context = s + 1;
- *context != CONTEXT_SEP && *context != XML_T('\0');
- context++)
- if (!poolAppendChar(&tempPool, *context))
- return XML_FALSE;
- if (!poolAppendChar(&tempPool, XML_T('\0')))
- return XML_FALSE;
- if (addBinding(parser, prefix, NULL, poolStart(&tempPool),
- &inheritedBindings) != XML_ERROR_NONE)
- return XML_FALSE;
- poolDiscard(&tempPool);
- if (*context != XML_T('\0'))
- ++context;
- s = context;
- }
- else {
- if (!poolAppendChar(&tempPool, *s))
- return XML_FALSE;
- s++;
- }
- }
- return XML_TRUE;
-}
-
-static void FASTCALL
-normalizePublicId(XML_Char *publicId)
-{
- XML_Char *p = publicId;
- XML_Char *s;
- for (s = publicId; *s; s++) {
- switch (*s) {
- case 0x20:
- case 0xD:
- case 0xA:
- if (p != publicId && p[-1] != 0x20)
- *p++ = 0x20;
- break;
- default:
- *p++ = *s;
- }
- }
- if (p != publicId && p[-1] == 0x20)
- --p;
- *p = XML_T('\0');
-}
-
-static DTD *
-dtdCreate(const XML_Memory_Handling_Suite *ms)
-{
- DTD *p = (DTD *)ms->malloc_fcn(sizeof(DTD));
- if (p == NULL)
- return p;
- poolInit(&(p->pool), ms);
- poolInit(&(p->entityValuePool), ms);
- hashTableInit(&(p->generalEntities), ms);
- hashTableInit(&(p->elementTypes), ms);
- hashTableInit(&(p->attributeIds), ms);
- hashTableInit(&(p->prefixes), ms);
-#ifdef XML_DTD
- p->paramEntityRead = XML_FALSE;
- hashTableInit(&(p->paramEntities), ms);
-#endif /* XML_DTD */
- p->defaultPrefix.name = NULL;
- p->defaultPrefix.binding = NULL;
-
- p->in_eldecl = XML_FALSE;
- p->scaffIndex = NULL;
- p->scaffold = NULL;
- p->scaffLevel = 0;
- p->scaffSize = 0;
- p->scaffCount = 0;
- p->contentStringLen = 0;
-
- p->keepProcessing = XML_TRUE;
- p->hasParamEntityRefs = XML_FALSE;
- p->standalone = XML_FALSE;
- return p;
-}
-
-static void
-dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms)
-{
- HASH_TABLE_ITER iter;
- hashTableIterInit(&iter, &(p->elementTypes));
- for (;;) {
- ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter);
- if (!e)
- break;
- if (e->allocDefaultAtts != 0)
- ms->free_fcn(e->defaultAtts);
- }
- hashTableClear(&(p->generalEntities));
-#ifdef XML_DTD
- p->paramEntityRead = XML_FALSE;
- hashTableClear(&(p->paramEntities));
-#endif /* XML_DTD */
- hashTableClear(&(p->elementTypes));
- hashTableClear(&(p->attributeIds));
- hashTableClear(&(p->prefixes));
- poolClear(&(p->pool));
- poolClear(&(p->entityValuePool));
- p->defaultPrefix.name = NULL;
- p->defaultPrefix.binding = NULL;
-
- p->in_eldecl = XML_FALSE;
-
- ms->free_fcn(p->scaffIndex);
- p->scaffIndex = NULL;
- ms->free_fcn(p->scaffold);
- p->scaffold = NULL;
-
- p->scaffLevel = 0;
- p->scaffSize = 0;
- p->scaffCount = 0;
- p->contentStringLen = 0;
-
- p->keepProcessing = XML_TRUE;
- p->hasParamEntityRefs = XML_FALSE;
- p->standalone = XML_FALSE;
-}
-
-static void
-dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms)
-{
- HASH_TABLE_ITER iter;
- hashTableIterInit(&iter, &(p->elementTypes));
- for (;;) {
- ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter);
- if (!e)
- break;
- if (e->allocDefaultAtts != 0)
- ms->free_fcn(e->defaultAtts);
- }
- hashTableDestroy(&(p->generalEntities));
-#ifdef XML_DTD
- hashTableDestroy(&(p->paramEntities));
-#endif /* XML_DTD */
- hashTableDestroy(&(p->elementTypes));
- hashTableDestroy(&(p->attributeIds));
- hashTableDestroy(&(p->prefixes));
- poolDestroy(&(p->pool));
- poolDestroy(&(p->entityValuePool));
- if (isDocEntity) {
- ms->free_fcn(p->scaffIndex);
- ms->free_fcn(p->scaffold);
- }
- ms->free_fcn(p);
-}
-
-/* Do a deep copy of the DTD. Return 0 for out of memory, non-zero otherwise.
- The new DTD has already been initialized.
-*/
-static int
-dtdCopy(DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms)
-{
- HASH_TABLE_ITER iter;
-
- /* Copy the prefix table. */
-
- hashTableIterInit(&iter, &(oldDtd->prefixes));
- for (;;) {
- const XML_Char *name;
- const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter);
- if (!oldP)
- break;
- name = poolCopyString(&(newDtd->pool), oldP->name);
- if (!name)
- return 0;
- if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX)))
- return 0;
- }
-
- hashTableIterInit(&iter, &(oldDtd->attributeIds));
-
- /* Copy the attribute id table. */
-
- for (;;) {
- ATTRIBUTE_ID *newA;
- const XML_Char *name;
- const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter);
-
- if (!oldA)
- break;
- /* Remember to allocate the scratch byte before the name. */
- if (!poolAppendChar(&(newDtd->pool), XML_T('\0')))
- return 0;
- name = poolCopyString(&(newDtd->pool), oldA->name);
- if (!name)
- return 0;
- ++name;
- newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name,
- sizeof(ATTRIBUTE_ID));
- if (!newA)
- return 0;
- newA->maybeTokenized = oldA->maybeTokenized;
- if (oldA->prefix) {
- newA->xmlns = oldA->xmlns;
- if (oldA->prefix == &oldDtd->defaultPrefix)
- newA->prefix = &newDtd->defaultPrefix;
- else
- newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes),
- oldA->prefix->name, 0);
- }
- }
-
- /* Copy the element type table. */
-
- hashTableIterInit(&iter, &(oldDtd->elementTypes));
-
- for (;;) {
- int i;
- ELEMENT_TYPE *newE;
- const XML_Char *name;
- const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter);
- if (!oldE)
- break;
- name = poolCopyString(&(newDtd->pool), oldE->name);
- if (!name)
- return 0;
- newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name,
- sizeof(ELEMENT_TYPE));
- if (!newE)
- return 0;
- if (oldE->nDefaultAtts) {
- newE->defaultAtts = (DEFAULT_ATTRIBUTE *)
- ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE));
- if (!newE->defaultAtts) {
- ms->free_fcn(newE);
- return 0;
- }
- }
- if (oldE->idAtt)
- newE->idAtt = (ATTRIBUTE_ID *)
- lookup(&(newDtd->attributeIds), oldE->idAtt->name, 0);
- newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts;
- if (oldE->prefix)
- newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes),
- oldE->prefix->name, 0);
- for (i = 0; i < newE->nDefaultAtts; i++) {
- newE->defaultAtts[i].id = (ATTRIBUTE_ID *)
- lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0);
- newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata;
- if (oldE->defaultAtts[i].value) {
- newE->defaultAtts[i].value
- = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value);
- if (!newE->defaultAtts[i].value)
- return 0;
- }
- else
- newE->defaultAtts[i].value = NULL;
- }
- }
-
- /* Copy the entity tables. */
- if (!copyEntityTable(&(newDtd->generalEntities),
- &(newDtd->pool),
- &(oldDtd->generalEntities)))
- return 0;
-
-#ifdef XML_DTD
- if (!copyEntityTable(&(newDtd->paramEntities),
- &(newDtd->pool),
- &(oldDtd->paramEntities)))
- return 0;
- newDtd->paramEntityRead = oldDtd->paramEntityRead;
-#endif /* XML_DTD */
-
- newDtd->keepProcessing = oldDtd->keepProcessing;
- newDtd->hasParamEntityRefs = oldDtd->hasParamEntityRefs;
- newDtd->standalone = oldDtd->standalone;
-
- /* Don't want deep copying for scaffolding */
- newDtd->in_eldecl = oldDtd->in_eldecl;
- newDtd->scaffold = oldDtd->scaffold;
- newDtd->contentStringLen = oldDtd->contentStringLen;
- newDtd->scaffSize = oldDtd->scaffSize;
- newDtd->scaffLevel = oldDtd->scaffLevel;
- newDtd->scaffIndex = oldDtd->scaffIndex;
-
- return 1;
-} /* End dtdCopy */
-
-static int
-copyEntityTable(HASH_TABLE *newTable,
- STRING_POOL *newPool,
- const HASH_TABLE *oldTable)
-{
- HASH_TABLE_ITER iter;
- const XML_Char *cachedOldBase = NULL;
- const XML_Char *cachedNewBase = NULL;
-
- hashTableIterInit(&iter, oldTable);
-
- for (;;) {
- ENTITY *newE;
- const XML_Char *name;
- const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter);
- if (!oldE)
- break;
- name = poolCopyString(newPool, oldE->name);
- if (!name)
- return 0;
- newE = (ENTITY *)lookup(newTable, name, sizeof(ENTITY));
- if (!newE)
- return 0;
- if (oldE->systemId) {
- const XML_Char *tem = poolCopyString(newPool, oldE->systemId);
- if (!tem)
- return 0;
- newE->systemId = tem;
- if (oldE->base) {
- if (oldE->base == cachedOldBase)
- newE->base = cachedNewBase;
- else {
- cachedOldBase = oldE->base;
- tem = poolCopyString(newPool, cachedOldBase);
- if (!tem)
- return 0;
- cachedNewBase = newE->base = tem;
- }
- }
- if (oldE->publicId) {
- tem = poolCopyString(newPool, oldE->publicId);
- if (!tem)
- return 0;
- newE->publicId = tem;
- }
- }
- else {
- const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr,
- oldE->textLen);
- if (!tem)
- return 0;
- newE->textPtr = tem;
- newE->textLen = oldE->textLen;
- }
- if (oldE->notation) {
- const XML_Char *tem = poolCopyString(newPool, oldE->notation);
- if (!tem)
- return 0;
- newE->notation = tem;
- }
- newE->is_param = oldE->is_param;
- newE->is_internal = oldE->is_internal;
- }
- return 1;
-}
-
-#define INIT_POWER 6
-
-static XML_Bool FASTCALL
-keyeq(KEY s1, KEY s2)
-{
- for (; *s1 == *s2; s1++, s2++)
- if (*s1 == 0)
- return XML_TRUE;
- return XML_FALSE;
-}
-
-static unsigned long FASTCALL
-hash(KEY s)
-{
- unsigned long h = 0;
- while (*s)
- h = CHAR_HASH(h, *s++);
- return h;
-}
-
-static NAMED *
-lookup(HASH_TABLE *table, KEY name, size_t createSize)
-{
- size_t i;
- if (table->size == 0) {
- size_t tsize;
- if (!createSize)
- return NULL;
- table->power = INIT_POWER;
- /* table->size is a power of 2 */
- table->size = (size_t)1 << INIT_POWER;
- tsize = table->size * sizeof(NAMED *);
- table->v = (NAMED **)table->mem->malloc_fcn(tsize);
- if (!table->v) {
- table->size = 0;
- return NULL;
- }
- memset(table->v, 0, tsize);
- i = hash(name) & ((unsigned long)table->size - 1);
- }
- else {
- unsigned long h = hash(name);
- unsigned long mask = (unsigned long)table->size - 1;
- unsigned char step = 0;
- i = h & mask;
- while (table->v[i]) {
- if (keyeq(name, table->v[i]->name))
- return table->v[i];
- if (!step)
- step = PROBE_STEP(h, mask, table->power);
- i < step ? (i += table->size - step) : (i -= step);
- }
- if (!createSize)
- return NULL;
-
- /* check for overflow (table is half full) */
- if (table->used >> (table->power - 1)) {
- unsigned char newPower = table->power + 1;
- size_t newSize = (size_t)1 << newPower;
- unsigned long newMask = (unsigned long)newSize - 1;
- size_t tsize = newSize * sizeof(NAMED *);
- NAMED **newV = (NAMED **)table->mem->malloc_fcn(tsize);
- if (!newV)
- return NULL;
- memset(newV, 0, tsize);
- for (i = 0; i < table->size; i++)
- if (table->v[i]) {
- unsigned long newHash = hash(table->v[i]->name);
- size_t j = newHash & newMask;
- step = 0;
- while (newV[j]) {
- if (!step)
- step = PROBE_STEP(newHash, newMask, newPower);
- j < step ? (j += newSize - step) : (j -= step);
- }
- newV[j] = table->v[i];
- }
- table->mem->free_fcn(table->v);
- table->v = newV;
- table->power = newPower;
- table->size = newSize;
- i = h & newMask;
- step = 0;
- while (table->v[i]) {
- if (!step)
- step = PROBE_STEP(h, newMask, newPower);
- i < step ? (i += newSize - step) : (i -= step);
- }
- }
- }
- table->v[i] = (NAMED *)table->mem->malloc_fcn(createSize);
- if (!table->v[i])
- return NULL;
- memset(table->v[i], 0, createSize);
- table->v[i]->name = name;
- (table->used)++;
- return table->v[i];
-}
-
-static void FASTCALL
-hashTableClear(HASH_TABLE *table)
-{
- size_t i;
- for (i = 0; i < table->size; i++) {
- table->mem->free_fcn(table->v[i]);
- table->v[i] = NULL;
- }
- table->used = 0;
-}
-
-static void FASTCALL
-hashTableDestroy(HASH_TABLE *table)
-{
- size_t i;
- for (i = 0; i < table->size; i++)
- table->mem->free_fcn(table->v[i]);
- table->mem->free_fcn(table->v);
-}
-
-static void FASTCALL
-hashTableInit(HASH_TABLE *p, const XML_Memory_Handling_Suite *ms)
-{
- p->power = 0;
- p->size = 0;
- p->used = 0;
- p->v = NULL;
- p->mem = ms;
-}
-
-static void FASTCALL
-hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table)
-{
- iter->p = table->v;
- iter->end = iter->p + table->size;
-}
-
-static NAMED * FASTCALL
-hashTableIterNext(HASH_TABLE_ITER *iter)
-{
- while (iter->p != iter->end) {
- NAMED *tem = *(iter->p)++;
- if (tem)
- return tem;
- }
- return NULL;
-}
-
-static void FASTCALL
-poolInit(STRING_POOL *pool, const XML_Memory_Handling_Suite *ms)
-{
- pool->blocks = NULL;
- pool->freeBlocks = NULL;
- pool->start = NULL;
- pool->ptr = NULL;
- pool->end = NULL;
- pool->mem = ms;
-}
-
-static void FASTCALL
-poolClear(STRING_POOL *pool)
-{
- if (!pool->freeBlocks)
- pool->freeBlocks = pool->blocks;
- else {
- BLOCK *p = pool->blocks;
- while (p) {
- BLOCK *tem = p->next;
- p->next = pool->freeBlocks;
- pool->freeBlocks = p;
- p = tem;
- }
- }
- pool->blocks = NULL;
- pool->start = NULL;
- pool->ptr = NULL;
- pool->end = NULL;
-}
-
-static void FASTCALL
-poolDestroy(STRING_POOL *pool)
-{
- BLOCK *p = pool->blocks;
- while (p) {
- BLOCK *tem = p->next;
- pool->mem->free_fcn(p);
- p = tem;
- }
- p = pool->freeBlocks;
- while (p) {
- BLOCK *tem = p->next;
- pool->mem->free_fcn(p);
- p = tem;
- }
-}
-
-static XML_Char *
-poolAppend(STRING_POOL *pool, const ENCODING *enc,
- const char *ptr, const char *end)
-{
- if (!pool->ptr && !poolGrow(pool))
- return NULL;
- for (;;) {
- XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end);
- if (ptr == end)
- break;
- if (!poolGrow(pool))
- return NULL;
- }
- return pool->start;
-}
-
-static const XML_Char * FASTCALL
-poolCopyString(STRING_POOL *pool, const XML_Char *s)
-{
- do {
- if (!poolAppendChar(pool, *s))
- return NULL;
- } while (*s++);
- s = pool->start;
- poolFinish(pool);
- return s;
-}
-
-static const XML_Char *
-poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n)
-{
- if (!pool->ptr && !poolGrow(pool))
- return NULL;
- for (; n > 0; --n, s++) {
- if (!poolAppendChar(pool, *s))
- return NULL;
- }
- s = pool->start;
- poolFinish(pool);
- return s;
-}
-
-static const XML_Char * FASTCALL
-poolAppendString(STRING_POOL *pool, const XML_Char *s)
-{
- while (*s) {
- if (!poolAppendChar(pool, *s))
- return NULL;
- s++;
- }
- return pool->start;
-}
-
-static XML_Char *
-poolStoreString(STRING_POOL *pool, const ENCODING *enc,
- const char *ptr, const char *end)
-{
- if (!poolAppend(pool, enc, ptr, end))
- return NULL;
- if (pool->ptr == pool->end && !poolGrow(pool))
- return NULL;
- *(pool->ptr)++ = 0;
- return pool->start;
-}
-
-static XML_Bool FASTCALL
-poolGrow(STRING_POOL *pool)
-{
- if (pool->freeBlocks) {
- if (pool->start == 0) {
- pool->blocks = pool->freeBlocks;
- pool->freeBlocks = pool->freeBlocks->next;
- pool->blocks->next = NULL;
- pool->start = pool->blocks->s;
- pool->end = pool->start + pool->blocks->size;
- pool->ptr = pool->start;
- return XML_TRUE;
- }
- if (pool->end - pool->start < pool->freeBlocks->size) {
- BLOCK *tem = pool->freeBlocks->next;
- pool->freeBlocks->next = pool->blocks;
- pool->blocks = pool->freeBlocks;
- pool->freeBlocks = tem;
- memcpy(pool->blocks->s, pool->start,
- (pool->end - pool->start) * sizeof(XML_Char));
- pool->ptr = pool->blocks->s + (pool->ptr - pool->start);
- pool->start = pool->blocks->s;
- pool->end = pool->start + pool->blocks->size;
- return XML_TRUE;
- }
- }
- if (pool->blocks && pool->start == pool->blocks->s) {
- int blockSize = (int)(pool->end - pool->start)*2;
- pool->blocks = (BLOCK *)
- pool->mem->realloc_fcn(pool->blocks,
- (offsetof(BLOCK, s)
- + blockSize * sizeof(XML_Char)));
- if (pool->blocks == NULL)
- return XML_FALSE;
- pool->blocks->size = blockSize;
- pool->ptr = pool->blocks->s + (pool->ptr - pool->start);
- pool->start = pool->blocks->s;
- pool->end = pool->start + blockSize;
- }
- else {
- BLOCK *tem;
- int blockSize = (int)(pool->end - pool->start);
- if (blockSize < INIT_BLOCK_SIZE)
- blockSize = INIT_BLOCK_SIZE;
- else
- blockSize *= 2;
- tem = (BLOCK *)pool->mem->malloc_fcn(offsetof(BLOCK, s)
- + blockSize * sizeof(XML_Char));
- if (!tem)
- return XML_FALSE;
- tem->size = blockSize;
- tem->next = pool->blocks;
- pool->blocks = tem;
- if (pool->ptr != pool->start)
- memcpy(tem->s, pool->start,
- (pool->ptr - pool->start) * sizeof(XML_Char));
- pool->ptr = tem->s + (pool->ptr - pool->start);
- pool->start = tem->s;
- pool->end = tem->s + blockSize;
- }
- return XML_TRUE;
-}
-
-static int FASTCALL
-nextScaffoldPart(XML_Parser parser)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- CONTENT_SCAFFOLD * me;
- int next;
-
- if (!dtd->scaffIndex) {
- dtd->scaffIndex = (int *)MALLOC(groupSize * sizeof(int));
- if (!dtd->scaffIndex)
- return -1;
- dtd->scaffIndex[0] = 0;
- }
-
- if (dtd->scaffCount >= dtd->scaffSize) {
- CONTENT_SCAFFOLD *temp;
- if (dtd->scaffold) {
- temp = (CONTENT_SCAFFOLD *)
- REALLOC(dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD));
- if (temp == NULL)
- return -1;
- dtd->scaffSize *= 2;
- }
- else {
- temp = (CONTENT_SCAFFOLD *)MALLOC(INIT_SCAFFOLD_ELEMENTS
- * sizeof(CONTENT_SCAFFOLD));
- if (temp == NULL)
- return -1;
- dtd->scaffSize = INIT_SCAFFOLD_ELEMENTS;
- }
- dtd->scaffold = temp;
- }
- next = dtd->scaffCount++;
- me = &dtd->scaffold[next];
- if (dtd->scaffLevel) {
- CONTENT_SCAFFOLD *parent = &dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel-1]];
- if (parent->lastchild) {
- dtd->scaffold[parent->lastchild].nextsib = next;
- }
- if (!parent->childcnt)
- parent->firstchild = next;
- parent->lastchild = next;
- parent->childcnt++;
- }
- me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0;
- return next;
-}
-
-static void
-build_node(XML_Parser parser,
- int src_node,
- XML_Content *dest,
- XML_Content **contpos,
- XML_Char **strpos)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- dest->type = dtd->scaffold[src_node].type;
- dest->quant = dtd->scaffold[src_node].quant;
- if (dest->type == XML_CTYPE_NAME) {
- const XML_Char *src;
- dest->name = *strpos;
- src = dtd->scaffold[src_node].name;
- for (;;) {
- *(*strpos)++ = *src;
- if (!*src)
- break;
- src++;
- }
- dest->numchildren = 0;
- dest->children = NULL;
- }
- else {
- unsigned int i;
- int cn;
- dest->numchildren = dtd->scaffold[src_node].childcnt;
- dest->children = *contpos;
- *contpos += dest->numchildren;
- for (i = 0, cn = dtd->scaffold[src_node].firstchild;
- i < dest->numchildren;
- i++, cn = dtd->scaffold[cn].nextsib) {
- build_node(parser, cn, &(dest->children[i]), contpos, strpos);
- }
- dest->name = NULL;
- }
-}
-
-static XML_Content *
-build_model (XML_Parser parser)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- XML_Content *ret;
- XML_Content *cpos;
- XML_Char * str;
- int allocsize = (dtd->scaffCount * sizeof(XML_Content)
- + (dtd->contentStringLen * sizeof(XML_Char)));
-
- ret = (XML_Content *)MALLOC(allocsize);
- if (!ret)
- return NULL;
-
- str = (XML_Char *) (&ret[dtd->scaffCount]);
- cpos = &ret[1];
-
- build_node(parser, 0, ret, &cpos, &str);
- return ret;
-}
-
-static ELEMENT_TYPE *
-getElementType(XML_Parser parser,
- const ENCODING *enc,
- const char *ptr,
- const char *end)
-{
- DTD * const dtd = _dtd; /* save one level of indirection */
- const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end);
- ELEMENT_TYPE *ret;
-
- if (!name)
- return NULL;
- ret = (ELEMENT_TYPE *) lookup(&dtd->elementTypes, name, sizeof(ELEMENT_TYPE));
- if (!ret)
- return NULL;
- if (ret->name != name)
- poolDiscard(&dtd->pool);
- else {
- poolFinish(&dtd->pool);
- if (!setElementTypePrefix(parser, ret))
- return NULL;
- }
- return ret;
-}
diff --git a/3rdParty/Expat/src/xmlrole.c b/3rdParty/Expat/src/xmlrole.c
deleted file mode 100755
index 9c5e25b..0000000
--- a/3rdParty/Expat/src/xmlrole.c
+++ /dev/null
@@ -1,1336 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-#include <stddef.h>
-
-#ifdef COMPILED_FROM_DSP
-#include "winconfig.h"
-#elif defined(MACOS_CLASSIC)
-#include "macconfig.h"
-#elif defined(__amigaos4__)
-#include "amigaconfig.h"
-#elif defined(__WATCOMC__)
-#include "watcomconfig.h"
-#else
-#ifdef HAVE_EXPAT_CONFIG_H
-#include <expat_config.h>
-#endif
-#endif /* ndef COMPILED_FROM_DSP */
-
-#include "expat_external.h"
-#include "internal.h"
-#include "xmlrole.h"
-#include "ascii.h"
-
-/* Doesn't check:
-
- that ,| are not mixed in a model group
- content of literals
-
-*/
-
-static const char KW_ANY[] = {
- ASCII_A, ASCII_N, ASCII_Y, '\0' };
-static const char KW_ATTLIST[] = {
- ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' };
-static const char KW_CDATA[] = {
- ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
-static const char KW_DOCTYPE[] = {
- ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' };
-static const char KW_ELEMENT[] = {
- ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' };
-static const char KW_EMPTY[] = {
- ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' };
-static const char KW_ENTITIES[] = {
- ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S,
- '\0' };
-static const char KW_ENTITY[] = {
- ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' };
-static const char KW_FIXED[] = {
- ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' };
-static const char KW_ID[] = {
- ASCII_I, ASCII_D, '\0' };
-static const char KW_IDREF[] = {
- ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' };
-static const char KW_IDREFS[] = {
- ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' };
-#ifdef XML_DTD
-static const char KW_IGNORE[] = {
- ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' };
-#endif
-static const char KW_IMPLIED[] = {
- ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' };
-#ifdef XML_DTD
-static const char KW_INCLUDE[] = {
- ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' };
-#endif
-static const char KW_NDATA[] = {
- ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
-static const char KW_NMTOKEN[] = {
- ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' };
-static const char KW_NMTOKENS[] = {
- ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S,
- '\0' };
-static const char KW_NOTATION[] =
- { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N,
- '\0' };
-static const char KW_PCDATA[] = {
- ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
-static const char KW_PUBLIC[] = {
- ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' };
-static const char KW_REQUIRED[] = {
- ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D,
- '\0' };
-static const char KW_SYSTEM[] = {
- ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' };
-
-#ifndef MIN_BYTES_PER_CHAR
-#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar)
-#endif
-
-#ifdef XML_DTD
-#define setTopLevel(state) \
- ((state)->handler = ((state)->documentEntity \
- ? internalSubset \
- : externalSubset1))
-#else /* not XML_DTD */
-#define setTopLevel(state) ((state)->handler = internalSubset)
-#endif /* not XML_DTD */
-
-typedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc);
-
-static PROLOG_HANDLER
- prolog0, prolog1, prolog2,
- doctype0, doctype1, doctype2, doctype3, doctype4, doctype5,
- internalSubset,
- entity0, entity1, entity2, entity3, entity4, entity5, entity6,
- entity7, entity8, entity9, entity10,
- notation0, notation1, notation2, notation3, notation4,
- attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6,
- attlist7, attlist8, attlist9,
- element0, element1, element2, element3, element4, element5, element6,
- element7,
-#ifdef XML_DTD
- externalSubset0, externalSubset1,
- condSect0, condSect1, condSect2,
-#endif /* XML_DTD */
- declClose,
- error;
-
-static int FASTCALL common(PROLOG_STATE *state, int tok);
-
-static int PTRCALL
-prolog0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- state->handler = prolog1;
- return XML_ROLE_NONE;
- case XML_TOK_XML_DECL:
- state->handler = prolog1;
- return XML_ROLE_XML_DECL;
- case XML_TOK_PI:
- state->handler = prolog1;
- return XML_ROLE_PI;
- case XML_TOK_COMMENT:
- state->handler = prolog1;
- return XML_ROLE_COMMENT;
- case XML_TOK_BOM:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_OPEN:
- if (!XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_DOCTYPE))
- break;
- state->handler = doctype0;
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_INSTANCE_START:
- state->handler = error;
- return XML_ROLE_INSTANCE_START;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-prolog1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_PI:
- return XML_ROLE_PI;
- case XML_TOK_COMMENT:
- return XML_ROLE_COMMENT;
- case XML_TOK_BOM:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_OPEN:
- if (!XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_DOCTYPE))
- break;
- state->handler = doctype0;
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_INSTANCE_START:
- state->handler = error;
- return XML_ROLE_INSTANCE_START;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-prolog2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_PI:
- return XML_ROLE_PI;
- case XML_TOK_COMMENT:
- return XML_ROLE_COMMENT;
- case XML_TOK_INSTANCE_START:
- state->handler = error;
- return XML_ROLE_INSTANCE_START;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-doctype0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = doctype1;
- return XML_ROLE_DOCTYPE_NAME;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-doctype1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_OPEN_BRACKET:
- state->handler = internalSubset;
- return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
- case XML_TOK_DECL_CLOSE:
- state->handler = prolog2;
- return XML_ROLE_DOCTYPE_CLOSE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
- state->handler = doctype3;
- return XML_ROLE_DOCTYPE_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
- state->handler = doctype2;
- return XML_ROLE_DOCTYPE_NONE;
- }
- break;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-doctype2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_LITERAL:
- state->handler = doctype3;
- return XML_ROLE_DOCTYPE_PUBLIC_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-doctype3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_LITERAL:
- state->handler = doctype4;
- return XML_ROLE_DOCTYPE_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-doctype4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_OPEN_BRACKET:
- state->handler = internalSubset;
- return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
- case XML_TOK_DECL_CLOSE:
- state->handler = prolog2;
- return XML_ROLE_DOCTYPE_CLOSE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-doctype5(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_DECL_CLOSE:
- state->handler = prolog2;
- return XML_ROLE_DOCTYPE_CLOSE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-internalSubset(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_DECL_OPEN:
- if (XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_ENTITY)) {
- state->handler = entity0;
- return XML_ROLE_ENTITY_NONE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_ATTLIST)) {
- state->handler = attlist0;
- return XML_ROLE_ATTLIST_NONE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_ELEMENT)) {
- state->handler = element0;
- return XML_ROLE_ELEMENT_NONE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
- end,
- KW_NOTATION)) {
- state->handler = notation0;
- return XML_ROLE_NOTATION_NONE;
- }
- break;
- case XML_TOK_PI:
- return XML_ROLE_PI;
- case XML_TOK_COMMENT:
- return XML_ROLE_COMMENT;
- case XML_TOK_PARAM_ENTITY_REF:
- return XML_ROLE_PARAM_ENTITY_REF;
- case XML_TOK_CLOSE_BRACKET:
- state->handler = doctype5;
- return XML_ROLE_DOCTYPE_NONE;
- case XML_TOK_NONE:
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-#ifdef XML_DTD
-
-static int PTRCALL
-externalSubset0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- state->handler = externalSubset1;
- if (tok == XML_TOK_XML_DECL)
- return XML_ROLE_TEXT_DECL;
- return externalSubset1(state, tok, ptr, end, enc);
-}
-
-static int PTRCALL
-externalSubset1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_COND_SECT_OPEN:
- state->handler = condSect0;
- return XML_ROLE_NONE;
- case XML_TOK_COND_SECT_CLOSE:
- if (state->includeLevel == 0)
- break;
- state->includeLevel -= 1;
- return XML_ROLE_NONE;
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_CLOSE_BRACKET:
- break;
- case XML_TOK_NONE:
- if (state->includeLevel)
- break;
- return XML_ROLE_NONE;
- default:
- return internalSubset(state, tok, ptr, end, enc);
- }
- return common(state, tok);
-}
-
-#endif /* XML_DTD */
-
-static int PTRCALL
-entity0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_PERCENT:
- state->handler = entity1;
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_NAME:
- state->handler = entity2;
- return XML_ROLE_GENERAL_ENTITY_NAME;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_NAME:
- state->handler = entity7;
- return XML_ROLE_PARAM_ENTITY_NAME;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
- state->handler = entity4;
- return XML_ROLE_ENTITY_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
- state->handler = entity3;
- return XML_ROLE_ENTITY_NONE;
- }
- break;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- state->role_none = XML_ROLE_ENTITY_NONE;
- return XML_ROLE_ENTITY_VALUE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_LITERAL:
- state->handler = entity4;
- return XML_ROLE_ENTITY_PUBLIC_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_LITERAL:
- state->handler = entity5;
- return XML_ROLE_ENTITY_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity5(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return XML_ROLE_ENTITY_COMPLETE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) {
- state->handler = entity6;
- return XML_ROLE_ENTITY_NONE;
- }
- break;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity6(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_NAME:
- state->handler = declClose;
- state->role_none = XML_ROLE_ENTITY_NONE;
- return XML_ROLE_ENTITY_NOTATION_NAME;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity7(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
- state->handler = entity9;
- return XML_ROLE_ENTITY_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
- state->handler = entity8;
- return XML_ROLE_ENTITY_NONE;
- }
- break;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- state->role_none = XML_ROLE_ENTITY_NONE;
- return XML_ROLE_ENTITY_VALUE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity8(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_LITERAL:
- state->handler = entity9;
- return XML_ROLE_ENTITY_PUBLIC_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity9(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_LITERAL:
- state->handler = entity10;
- return XML_ROLE_ENTITY_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-entity10(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ENTITY_NONE;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return XML_ROLE_ENTITY_COMPLETE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-notation0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NOTATION_NONE;
- case XML_TOK_NAME:
- state->handler = notation1;
- return XML_ROLE_NOTATION_NAME;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-notation1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NOTATION_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
- state->handler = notation3;
- return XML_ROLE_NOTATION_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
- state->handler = notation2;
- return XML_ROLE_NOTATION_NONE;
- }
- break;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-notation2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NOTATION_NONE;
- case XML_TOK_LITERAL:
- state->handler = notation4;
- return XML_ROLE_NOTATION_PUBLIC_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-notation3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NOTATION_NONE;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- state->role_none = XML_ROLE_NOTATION_NONE;
- return XML_ROLE_NOTATION_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-notation4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NOTATION_NONE;
- case XML_TOK_LITERAL:
- state->handler = declClose;
- state->role_none = XML_ROLE_NOTATION_NONE;
- return XML_ROLE_NOTATION_SYSTEM_ID;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return XML_ROLE_NOTATION_NO_SYSTEM_ID;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = attlist1;
- return XML_ROLE_ATTLIST_ELEMENT_NAME;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = attlist2;
- return XML_ROLE_ATTRIBUTE_NAME;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_NAME:
- {
- static const char * const types[] = {
- KW_CDATA,
- KW_ID,
- KW_IDREF,
- KW_IDREFS,
- KW_ENTITY,
- KW_ENTITIES,
- KW_NMTOKEN,
- KW_NMTOKENS,
- };
- int i;
- for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++)
- if (XmlNameMatchesAscii(enc, ptr, end, types[i])) {
- state->handler = attlist8;
- return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i;
- }
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) {
- state->handler = attlist5;
- return XML_ROLE_ATTLIST_NONE;
- }
- break;
- case XML_TOK_OPEN_PAREN:
- state->handler = attlist3;
- return XML_ROLE_ATTLIST_NONE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_NMTOKEN:
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = attlist4;
- return XML_ROLE_ATTRIBUTE_ENUM_VALUE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_CLOSE_PAREN:
- state->handler = attlist8;
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_OR:
- state->handler = attlist3;
- return XML_ROLE_ATTLIST_NONE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist5(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_OPEN_PAREN:
- state->handler = attlist6;
- return XML_ROLE_ATTLIST_NONE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist6(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_NAME:
- state->handler = attlist7;
- return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist7(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_CLOSE_PAREN:
- state->handler = attlist8;
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_OR:
- state->handler = attlist6;
- return XML_ROLE_ATTLIST_NONE;
- }
- return common(state, tok);
-}
-
-/* default value */
-static int PTRCALL
-attlist8(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_POUND_NAME:
- if (XmlNameMatchesAscii(enc,
- ptr + MIN_BYTES_PER_CHAR(enc),
- end,
- KW_IMPLIED)) {
- state->handler = attlist1;
- return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + MIN_BYTES_PER_CHAR(enc),
- end,
- KW_REQUIRED)) {
- state->handler = attlist1;
- return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE;
- }
- if (XmlNameMatchesAscii(enc,
- ptr + MIN_BYTES_PER_CHAR(enc),
- end,
- KW_FIXED)) {
- state->handler = attlist9;
- return XML_ROLE_ATTLIST_NONE;
- }
- break;
- case XML_TOK_LITERAL:
- state->handler = attlist1;
- return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-attlist9(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ATTLIST_NONE;
- case XML_TOK_LITERAL:
- state->handler = attlist1;
- return XML_ROLE_FIXED_ATTRIBUTE_VALUE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-element0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ELEMENT_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = element1;
- return XML_ROLE_ELEMENT_NAME;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-element1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ELEMENT_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) {
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- return XML_ROLE_CONTENT_EMPTY;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) {
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- return XML_ROLE_CONTENT_ANY;
- }
- break;
- case XML_TOK_OPEN_PAREN:
- state->handler = element2;
- state->level = 1;
- return XML_ROLE_GROUP_OPEN;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-element2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ELEMENT_NONE;
- case XML_TOK_POUND_NAME:
- if (XmlNameMatchesAscii(enc,
- ptr + MIN_BYTES_PER_CHAR(enc),
- end,
- KW_PCDATA)) {
- state->handler = element3;
- return XML_ROLE_CONTENT_PCDATA;
- }
- break;
- case XML_TOK_OPEN_PAREN:
- state->level = 2;
- state->handler = element6;
- return XML_ROLE_GROUP_OPEN;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT;
- case XML_TOK_NAME_QUESTION:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_OPT;
- case XML_TOK_NAME_ASTERISK:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_REP;
- case XML_TOK_NAME_PLUS:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_PLUS;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-element3(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ELEMENT_NONE;
- case XML_TOK_CLOSE_PAREN:
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- return XML_ROLE_GROUP_CLOSE;
- case XML_TOK_CLOSE_PAREN_ASTERISK:
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- return XML_ROLE_GROUP_CLOSE_REP;
- case XML_TOK_OR:
- state->handler = element4;
- return XML_ROLE_ELEMENT_NONE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-element4(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ELEMENT_NONE;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = element5;
- return XML_ROLE_CONTENT_ELEMENT;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-element5(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ELEMENT_NONE;
- case XML_TOK_CLOSE_PAREN_ASTERISK:
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- return XML_ROLE_GROUP_CLOSE_REP;
- case XML_TOK_OR:
- state->handler = element4;
- return XML_ROLE_ELEMENT_NONE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-element6(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ELEMENT_NONE;
- case XML_TOK_OPEN_PAREN:
- state->level += 1;
- return XML_ROLE_GROUP_OPEN;
- case XML_TOK_NAME:
- case XML_TOK_PREFIXED_NAME:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT;
- case XML_TOK_NAME_QUESTION:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_OPT;
- case XML_TOK_NAME_ASTERISK:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_REP;
- case XML_TOK_NAME_PLUS:
- state->handler = element7;
- return XML_ROLE_CONTENT_ELEMENT_PLUS;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-element7(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_ELEMENT_NONE;
- case XML_TOK_CLOSE_PAREN:
- state->level -= 1;
- if (state->level == 0) {
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- }
- return XML_ROLE_GROUP_CLOSE;
- case XML_TOK_CLOSE_PAREN_ASTERISK:
- state->level -= 1;
- if (state->level == 0) {
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- }
- return XML_ROLE_GROUP_CLOSE_REP;
- case XML_TOK_CLOSE_PAREN_QUESTION:
- state->level -= 1;
- if (state->level == 0) {
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- }
- return XML_ROLE_GROUP_CLOSE_OPT;
- case XML_TOK_CLOSE_PAREN_PLUS:
- state->level -= 1;
- if (state->level == 0) {
- state->handler = declClose;
- state->role_none = XML_ROLE_ELEMENT_NONE;
- }
- return XML_ROLE_GROUP_CLOSE_PLUS;
- case XML_TOK_COMMA:
- state->handler = element6;
- return XML_ROLE_GROUP_SEQUENCE;
- case XML_TOK_OR:
- state->handler = element6;
- return XML_ROLE_GROUP_CHOICE;
- }
- return common(state, tok);
-}
-
-#ifdef XML_DTD
-
-static int PTRCALL
-condSect0(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_NAME:
- if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) {
- state->handler = condSect1;
- return XML_ROLE_NONE;
- }
- if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) {
- state->handler = condSect2;
- return XML_ROLE_NONE;
- }
- break;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-condSect1(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_OPEN_BRACKET:
- state->handler = externalSubset1;
- state->includeLevel += 1;
- return XML_ROLE_NONE;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-condSect2(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return XML_ROLE_NONE;
- case XML_TOK_OPEN_BRACKET:
- state->handler = externalSubset1;
- return XML_ROLE_IGNORE_SECT;
- }
- return common(state, tok);
-}
-
-#endif /* XML_DTD */
-
-static int PTRCALL
-declClose(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- switch (tok) {
- case XML_TOK_PROLOG_S:
- return state->role_none;
- case XML_TOK_DECL_CLOSE:
- setTopLevel(state);
- return state->role_none;
- }
- return common(state, tok);
-}
-
-static int PTRCALL
-error(PROLOG_STATE *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc)
-{
- return XML_ROLE_NONE;
-}
-
-static int FASTCALL
-common(PROLOG_STATE *state, int tok)
-{
-#ifdef XML_DTD
- if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
- return XML_ROLE_INNER_PARAM_ENTITY_REF;
-#endif
- state->handler = error;
- return XML_ROLE_ERROR;
-}
-
-void
-XmlPrologStateInit(PROLOG_STATE *state)
-{
- state->handler = prolog0;
-#ifdef XML_DTD
- state->documentEntity = 1;
- state->includeLevel = 0;
- state->inEntityValue = 0;
-#endif /* XML_DTD */
-}
-
-#ifdef XML_DTD
-
-void
-XmlPrologStateInitExternalEntity(PROLOG_STATE *state)
-{
- state->handler = externalSubset0;
- state->documentEntity = 0;
- state->includeLevel = 0;
-}
-
-#endif /* XML_DTD */
diff --git a/3rdParty/Expat/src/xmlrole.h b/3rdParty/Expat/src/xmlrole.h
deleted file mode 100755
index 4dd9f06..0000000
--- a/3rdParty/Expat/src/xmlrole.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-#ifndef XmlRole_INCLUDED
-#define XmlRole_INCLUDED 1
-
-#ifdef __VMS
-/* 0 1 2 3 0 1 2 3
- 1234567890123456789012345678901 1234567890123456789012345678901 */
-#define XmlPrologStateInitExternalEntity XmlPrologStateInitExternalEnt
-#endif
-
-#include "xmltok.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum {
- XML_ROLE_ERROR = -1,
- XML_ROLE_NONE = 0,
- XML_ROLE_XML_DECL,
- XML_ROLE_INSTANCE_START,
- XML_ROLE_DOCTYPE_NONE,
- XML_ROLE_DOCTYPE_NAME,
- XML_ROLE_DOCTYPE_SYSTEM_ID,
- XML_ROLE_DOCTYPE_PUBLIC_ID,
- XML_ROLE_DOCTYPE_INTERNAL_SUBSET,
- XML_ROLE_DOCTYPE_CLOSE,
- XML_ROLE_GENERAL_ENTITY_NAME,
- XML_ROLE_PARAM_ENTITY_NAME,
- XML_ROLE_ENTITY_NONE,
- XML_ROLE_ENTITY_VALUE,
- XML_ROLE_ENTITY_SYSTEM_ID,
- XML_ROLE_ENTITY_PUBLIC_ID,
- XML_ROLE_ENTITY_COMPLETE,
- XML_ROLE_ENTITY_NOTATION_NAME,
- XML_ROLE_NOTATION_NONE,
- XML_ROLE_NOTATION_NAME,
- XML_ROLE_NOTATION_SYSTEM_ID,
- XML_ROLE_NOTATION_NO_SYSTEM_ID,
- XML_ROLE_NOTATION_PUBLIC_ID,
- XML_ROLE_ATTRIBUTE_NAME,
- XML_ROLE_ATTRIBUTE_TYPE_CDATA,
- XML_ROLE_ATTRIBUTE_TYPE_ID,
- XML_ROLE_ATTRIBUTE_TYPE_IDREF,
- XML_ROLE_ATTRIBUTE_TYPE_IDREFS,
- XML_ROLE_ATTRIBUTE_TYPE_ENTITY,
- XML_ROLE_ATTRIBUTE_TYPE_ENTITIES,
- XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN,
- XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS,
- XML_ROLE_ATTRIBUTE_ENUM_VALUE,
- XML_ROLE_ATTRIBUTE_NOTATION_VALUE,
- XML_ROLE_ATTLIST_NONE,
- XML_ROLE_ATTLIST_ELEMENT_NAME,
- XML_ROLE_IMPLIED_ATTRIBUTE_VALUE,
- XML_ROLE_REQUIRED_ATTRIBUTE_VALUE,
- XML_ROLE_DEFAULT_ATTRIBUTE_VALUE,
- XML_ROLE_FIXED_ATTRIBUTE_VALUE,
- XML_ROLE_ELEMENT_NONE,
- XML_ROLE_ELEMENT_NAME,
- XML_ROLE_CONTENT_ANY,
- XML_ROLE_CONTENT_EMPTY,
- XML_ROLE_CONTENT_PCDATA,
- XML_ROLE_GROUP_OPEN,
- XML_ROLE_GROUP_CLOSE,
- XML_ROLE_GROUP_CLOSE_REP,
- XML_ROLE_GROUP_CLOSE_OPT,
- XML_ROLE_GROUP_CLOSE_PLUS,
- XML_ROLE_GROUP_CHOICE,
- XML_ROLE_GROUP_SEQUENCE,
- XML_ROLE_CONTENT_ELEMENT,
- XML_ROLE_CONTENT_ELEMENT_REP,
- XML_ROLE_CONTENT_ELEMENT_OPT,
- XML_ROLE_CONTENT_ELEMENT_PLUS,
- XML_ROLE_PI,
- XML_ROLE_COMMENT,
-#ifdef XML_DTD
- XML_ROLE_TEXT_DECL,
- XML_ROLE_IGNORE_SECT,
- XML_ROLE_INNER_PARAM_ENTITY_REF,
-#endif /* XML_DTD */
- XML_ROLE_PARAM_ENTITY_REF
-};
-
-typedef struct prolog_state {
- int (PTRCALL *handler) (struct prolog_state *state,
- int tok,
- const char *ptr,
- const char *end,
- const ENCODING *enc);
- unsigned level;
- int role_none;
-#ifdef XML_DTD
- unsigned includeLevel;
- int documentEntity;
- int inEntityValue;
-#endif /* XML_DTD */
-} PROLOG_STATE;
-
-void XmlPrologStateInit(PROLOG_STATE *);
-#ifdef XML_DTD
-void XmlPrologStateInitExternalEntity(PROLOG_STATE *);
-#endif /* XML_DTD */
-
-#define XmlTokenRole(state, tok, ptr, end, enc) \
- (((state)->handler)(state, tok, ptr, end, enc))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not XmlRole_INCLUDED */
diff --git a/3rdParty/Expat/src/xmltok.c b/3rdParty/Expat/src/xmltok.c
deleted file mode 100755
index 068afde..0000000
--- a/3rdParty/Expat/src/xmltok.c
+++ /dev/null
@@ -1,1651 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-#include <stddef.h>
-
-#ifdef COMPILED_FROM_DSP
-#include "winconfig.h"
-#elif defined(MACOS_CLASSIC)
-#include "macconfig.h"
-#elif defined(__amigaos4__)
-#include "amigaconfig.h"
-#elif defined(__WATCOMC__)
-#include "watcomconfig.h"
-#else
-#ifdef HAVE_EXPAT_CONFIG_H
-#include <expat_config.h>
-#endif
-#endif /* ndef COMPILED_FROM_DSP */
-
-#include "expat_external.h"
-#include "internal.h"
-#include "xmltok.h"
-#include "nametab.h"
-
-#ifdef XML_DTD
-#define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok)
-#else
-#define IGNORE_SECTION_TOK_VTABLE /* as nothing */
-#endif
-
-#define VTABLE1 \
- { PREFIX(prologTok), PREFIX(contentTok), \
- PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \
- { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \
- PREFIX(sameName), \
- PREFIX(nameMatchesAscii), \
- PREFIX(nameLength), \
- PREFIX(skipS), \
- PREFIX(getAtts), \
- PREFIX(charRefNumber), \
- PREFIX(predefinedEntityName), \
- PREFIX(updatePosition), \
- PREFIX(isPublicId)
-
-#define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16)
-
-#define UCS2_GET_NAMING(pages, hi, lo) \
- (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F)))
-
-/* A 2 byte UTF-8 representation splits the characters 11 bits between
- the bottom 5 and 6 bits of the bytes. We need 8 bits to index into
- pages, 3 bits to add to that index and 5 bits to generate the mask.
-*/
-#define UTF8_GET_NAMING2(pages, byte) \
- (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \
- + ((((byte)[0]) & 3) << 1) \
- + ((((byte)[1]) >> 5) & 1)] \
- & (1 << (((byte)[1]) & 0x1F)))
-
-/* A 3 byte UTF-8 representation splits the characters 16 bits between
- the bottom 4, 6 and 6 bits of the bytes. We need 8 bits to index
- into pages, 3 bits to add to that index and 5 bits to generate the
- mask.
-*/
-#define UTF8_GET_NAMING3(pages, byte) \
- (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \
- + ((((byte)[1]) >> 2) & 0xF)] \
- << 3) \
- + ((((byte)[1]) & 3) << 1) \
- + ((((byte)[2]) >> 5) & 1)] \
- & (1 << (((byte)[2]) & 0x1F)))
-
-#define UTF8_GET_NAMING(pages, p, n) \
- ((n) == 2 \
- ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \
- : ((n) == 3 \
- ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \
- : 0))
-
-/* Detection of invalid UTF-8 sequences is based on Table 3.1B
- of Unicode 3.2: http://www.unicode.org/unicode/reports/tr28/
- with the additional restriction of not allowing the Unicode
- code points 0xFFFF and 0xFFFE (sequences EF,BF,BF and EF,BF,BE).
- Implementation details:
- (A & 0x80) == 0 means A < 0x80
- and
- (A & 0xC0) == 0xC0 means A > 0xBF
-*/
-
-#define UTF8_INVALID2(p) \
- ((*p) < 0xC2 || ((p)[1] & 0x80) == 0 || ((p)[1] & 0xC0) == 0xC0)
-
-#define UTF8_INVALID3(p) \
- (((p)[2] & 0x80) == 0 \
- || \
- ((*p) == 0xEF && (p)[1] == 0xBF \
- ? \
- (p)[2] > 0xBD \
- : \
- ((p)[2] & 0xC0) == 0xC0) \
- || \
- ((*p) == 0xE0 \
- ? \
- (p)[1] < 0xA0 || ((p)[1] & 0xC0) == 0xC0 \
- : \
- ((p)[1] & 0x80) == 0 \
- || \
- ((*p) == 0xED ? (p)[1] > 0x9F : ((p)[1] & 0xC0) == 0xC0)))
-
-#define UTF8_INVALID4(p) \
- (((p)[3] & 0x80) == 0 || ((p)[3] & 0xC0) == 0xC0 \
- || \
- ((p)[2] & 0x80) == 0 || ((p)[2] & 0xC0) == 0xC0 \
- || \
- ((*p) == 0xF0 \
- ? \
- (p)[1] < 0x90 || ((p)[1] & 0xC0) == 0xC0 \
- : \
- ((p)[1] & 0x80) == 0 \
- || \
- ((*p) == 0xF4 ? (p)[1] > 0x8F : ((p)[1] & 0xC0) == 0xC0)))
-
-static int PTRFASTCALL
-isNever(const ENCODING *enc, const char *p)
-{
- return 0;
-}
-
-static int PTRFASTCALL
-utf8_isName2(const ENCODING *enc, const char *p)
-{
- return UTF8_GET_NAMING2(namePages, (const unsigned char *)p);
-}
-
-static int PTRFASTCALL
-utf8_isName3(const ENCODING *enc, const char *p)
-{
- return UTF8_GET_NAMING3(namePages, (const unsigned char *)p);
-}
-
-#define utf8_isName4 isNever
-
-static int PTRFASTCALL
-utf8_isNmstrt2(const ENCODING *enc, const char *p)
-{
- return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p);
-}
-
-static int PTRFASTCALL
-utf8_isNmstrt3(const ENCODING *enc, const char *p)
-{
- return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p);
-}
-
-#define utf8_isNmstrt4 isNever
-
-static int PTRFASTCALL
-utf8_isInvalid2(const ENCODING *enc, const char *p)
-{
- return UTF8_INVALID2((const unsigned char *)p);
-}
-
-static int PTRFASTCALL
-utf8_isInvalid3(const ENCODING *enc, const char *p)
-{
- return UTF8_INVALID3((const unsigned char *)p);
-}
-
-static int PTRFASTCALL
-utf8_isInvalid4(const ENCODING *enc, const char *p)
-{
- return UTF8_INVALID4((const unsigned char *)p);
-}
-
-struct normal_encoding {
- ENCODING enc;
- unsigned char type[256];
-#ifdef XML_MIN_SIZE
- int (PTRFASTCALL *byteType)(const ENCODING *, const char *);
- int (PTRFASTCALL *isNameMin)(const ENCODING *, const char *);
- int (PTRFASTCALL *isNmstrtMin)(const ENCODING *, const char *);
- int (PTRFASTCALL *byteToAscii)(const ENCODING *, const char *);
- int (PTRCALL *charMatches)(const ENCODING *, const char *, int);
-#endif /* XML_MIN_SIZE */
- int (PTRFASTCALL *isName2)(const ENCODING *, const char *);
- int (PTRFASTCALL *isName3)(const ENCODING *, const char *);
- int (PTRFASTCALL *isName4)(const ENCODING *, const char *);
- int (PTRFASTCALL *isNmstrt2)(const ENCODING *, const char *);
- int (PTRFASTCALL *isNmstrt3)(const ENCODING *, const char *);
- int (PTRFASTCALL *isNmstrt4)(const ENCODING *, const char *);
- int (PTRFASTCALL *isInvalid2)(const ENCODING *, const char *);
- int (PTRFASTCALL *isInvalid3)(const ENCODING *, const char *);
- int (PTRFASTCALL *isInvalid4)(const ENCODING *, const char *);
-};
-
-#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *) (enc))
-
-#ifdef XML_MIN_SIZE
-
-#define STANDARD_VTABLE(E) \
- E ## byteType, \
- E ## isNameMin, \
- E ## isNmstrtMin, \
- E ## byteToAscii, \
- E ## charMatches,
-
-#else
-
-#define STANDARD_VTABLE(E) /* as nothing */
-
-#endif
-
-#define NORMAL_VTABLE(E) \
- E ## isName2, \
- E ## isName3, \
- E ## isName4, \
- E ## isNmstrt2, \
- E ## isNmstrt3, \
- E ## isNmstrt4, \
- E ## isInvalid2, \
- E ## isInvalid3, \
- E ## isInvalid4
-
-static int FASTCALL checkCharRefNumber(int);
-
-#include "xmltok_impl.h"
-#include "ascii.h"
-
-#ifdef XML_MIN_SIZE
-#define sb_isNameMin isNever
-#define sb_isNmstrtMin isNever
-#endif
-
-#ifdef XML_MIN_SIZE
-#define MINBPC(enc) ((enc)->minBytesPerChar)
-#else
-/* minimum bytes per character */
-#define MINBPC(enc) 1
-#endif
-
-#define SB_BYTE_TYPE(enc, p) \
- (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
-
-#ifdef XML_MIN_SIZE
-static int PTRFASTCALL
-sb_byteType(const ENCODING *enc, const char *p)
-{
- return SB_BYTE_TYPE(enc, p);
-}
-#define BYTE_TYPE(enc, p) \
- (AS_NORMAL_ENCODING(enc)->byteType(enc, p))
-#else
-#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
-#endif
-
-#ifdef XML_MIN_SIZE
-#define BYTE_TO_ASCII(enc, p) \
- (AS_NORMAL_ENCODING(enc)->byteToAscii(enc, p))
-static int PTRFASTCALL
-sb_byteToAscii(const ENCODING *enc, const char *p)
-{
- return *p;
-}
-#else
-#define BYTE_TO_ASCII(enc, p) (*(p))
-#endif
-
-#define IS_NAME_CHAR(enc, p, n) \
- (AS_NORMAL_ENCODING(enc)->isName ## n(enc, p))
-#define IS_NMSTRT_CHAR(enc, p, n) \
- (AS_NORMAL_ENCODING(enc)->isNmstrt ## n(enc, p))
-#define IS_INVALID_CHAR(enc, p, n) \
- (AS_NORMAL_ENCODING(enc)->isInvalid ## n(enc, p))
-
-#ifdef XML_MIN_SIZE
-#define IS_NAME_CHAR_MINBPC(enc, p) \
- (AS_NORMAL_ENCODING(enc)->isNameMin(enc, p))
-#define IS_NMSTRT_CHAR_MINBPC(enc, p) \
- (AS_NORMAL_ENCODING(enc)->isNmstrtMin(enc, p))
-#else
-#define IS_NAME_CHAR_MINBPC(enc, p) (0)
-#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
-#endif
-
-#ifdef XML_MIN_SIZE
-#define CHAR_MATCHES(enc, p, c) \
- (AS_NORMAL_ENCODING(enc)->charMatches(enc, p, c))
-static int PTRCALL
-sb_charMatches(const ENCODING *enc, const char *p, int c)
-{
- return *p == c;
-}
-#else
-/* c is an ASCII character */
-#define CHAR_MATCHES(enc, p, c) (*(p) == c)
-#endif
-
-#define PREFIX(ident) normal_ ## ident
-#define XML_TOK_IMPL_C
-#include "xmltok_impl.c"
-#undef XML_TOK_IMPL_C
-
-#undef MINBPC
-#undef BYTE_TYPE
-#undef BYTE_TO_ASCII
-#undef CHAR_MATCHES
-#undef IS_NAME_CHAR
-#undef IS_NAME_CHAR_MINBPC
-#undef IS_NMSTRT_CHAR
-#undef IS_NMSTRT_CHAR_MINBPC
-#undef IS_INVALID_CHAR
-
-enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */
- UTF8_cval1 = 0x00,
- UTF8_cval2 = 0xc0,
- UTF8_cval3 = 0xe0,
- UTF8_cval4 = 0xf0
-};
-
-static void PTRCALL
-utf8_toUtf8(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- char **toP, const char *toLim)
-{
- char *to;
- const char *from;
- if (fromLim - *fromP > toLim - *toP) {
- /* Avoid copying partial characters. */
- for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--)
- if (((unsigned char)fromLim[-1] & 0xc0) != 0x80)
- break;
- }
- for (to = *toP, from = *fromP; from != fromLim; from++, to++)
- *to = *from;
- *fromP = from;
- *toP = to;
-}
-
-static void PTRCALL
-utf8_toUtf16(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- unsigned short **toP, const unsigned short *toLim)
-{
- unsigned short *to = *toP;
- const char *from = *fromP;
- while (from != fromLim && to != toLim) {
- switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) {
- case BT_LEAD2:
- *to++ = (unsigned short)(((from[0] & 0x1f) << 6) | (from[1] & 0x3f));
- from += 2;
- break;
- case BT_LEAD3:
- *to++ = (unsigned short)(((from[0] & 0xf) << 12)
- | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f));
- from += 3;
- break;
- case BT_LEAD4:
- {
- unsigned long n;
- if (to + 1 == toLim)
- goto after;
- n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12)
- | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f);
- n -= 0x10000;
- to[0] = (unsigned short)((n >> 10) | 0xD800);
- to[1] = (unsigned short)((n & 0x3FF) | 0xDC00);
- to += 2;
- from += 4;
- }
- break;
- default:
- *to++ = *from++;
- break;
- }
- }
-after:
- *fromP = from;
- *toP = to;
-}
-
-#ifdef XML_NS
-static const struct normal_encoding utf8_encoding_ns = {
- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
- {
-#include "asciitab.h"
-#include "utf8tab.h"
- },
- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
-};
-#endif
-
-static const struct normal_encoding utf8_encoding = {
- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-#include "utf8tab.h"
- },
- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
-};
-
-#ifdef XML_NS
-
-static const struct normal_encoding internal_utf8_encoding_ns = {
- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
- {
-#include "iasciitab.h"
-#include "utf8tab.h"
- },
- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
-};
-
-#endif
-
-static const struct normal_encoding internal_utf8_encoding = {
- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
- {
-#define BT_COLON BT_NMSTRT
-#include "iasciitab.h"
-#undef BT_COLON
-#include "utf8tab.h"
- },
- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
-};
-
-static void PTRCALL
-latin1_toUtf8(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- char **toP, const char *toLim)
-{
- for (;;) {
- unsigned char c;
- if (*fromP == fromLim)
- break;
- c = (unsigned char)**fromP;
- if (c & 0x80) {
- if (toLim - *toP < 2)
- break;
- *(*toP)++ = (char)((c >> 6) | UTF8_cval2);
- *(*toP)++ = (char)((c & 0x3f) | 0x80);
- (*fromP)++;
- }
- else {
- if (*toP == toLim)
- break;
- *(*toP)++ = *(*fromP)++;
- }
- }
-}
-
-static void PTRCALL
-latin1_toUtf16(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- unsigned short **toP, const unsigned short *toLim)
-{
- while (*fromP != fromLim && *toP != toLim)
- *(*toP)++ = (unsigned char)*(*fromP)++;
-}
-
-#ifdef XML_NS
-
-static const struct normal_encoding latin1_encoding_ns = {
- { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 },
- {
-#include "asciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(sb_)
-};
-
-#endif
-
-static const struct normal_encoding latin1_encoding = {
- { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(sb_)
-};
-
-static void PTRCALL
-ascii_toUtf8(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- char **toP, const char *toLim)
-{
- while (*fromP != fromLim && *toP != toLim)
- *(*toP)++ = *(*fromP)++;
-}
-
-#ifdef XML_NS
-
-static const struct normal_encoding ascii_encoding_ns = {
- { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 },
- {
-#include "asciitab.h"
-/* BT_NONXML == 0 */
- },
- STANDARD_VTABLE(sb_)
-};
-
-#endif
-
-static const struct normal_encoding ascii_encoding = {
- { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-/* BT_NONXML == 0 */
- },
- STANDARD_VTABLE(sb_)
-};
-
-static int PTRFASTCALL
-unicode_byte_type(char hi, char lo)
-{
- switch ((unsigned char)hi) {
- case 0xD8: case 0xD9: case 0xDA: case 0xDB:
- return BT_LEAD4;
- case 0xDC: case 0xDD: case 0xDE: case 0xDF:
- return BT_TRAIL;
- case 0xFF:
- switch ((unsigned char)lo) {
- case 0xFF:
- case 0xFE:
- return BT_NONXML;
- }
- break;
- }
- return BT_NONASCII;
-}
-
-#define DEFINE_UTF16_TO_UTF8(E) \
-static void PTRCALL \
-E ## toUtf8(const ENCODING *enc, \
- const char **fromP, const char *fromLim, \
- char **toP, const char *toLim) \
-{ \
- const char *from; \
- for (from = *fromP; from != fromLim; from += 2) { \
- int plane; \
- unsigned char lo2; \
- unsigned char lo = GET_LO(from); \
- unsigned char hi = GET_HI(from); \
- switch (hi) { \
- case 0: \
- if (lo < 0x80) { \
- if (*toP == toLim) { \
- *fromP = from; \
- return; \
- } \
- *(*toP)++ = lo; \
- break; \
- } \
- /* fall through */ \
- case 0x1: case 0x2: case 0x3: \
- case 0x4: case 0x5: case 0x6: case 0x7: \
- if (toLim - *toP < 2) { \
- *fromP = from; \
- return; \
- } \
- *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \
- *(*toP)++ = ((lo & 0x3f) | 0x80); \
- break; \
- default: \
- if (toLim - *toP < 3) { \
- *fromP = from; \
- return; \
- } \
- /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \
- *(*toP)++ = ((hi >> 4) | UTF8_cval3); \
- *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \
- *(*toP)++ = ((lo & 0x3f) | 0x80); \
- break; \
- case 0xD8: case 0xD9: case 0xDA: case 0xDB: \
- if (toLim - *toP < 4) { \
- *fromP = from; \
- return; \
- } \
- plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \
- *(*toP)++ = ((plane >> 2) | UTF8_cval4); \
- *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \
- from += 2; \
- lo2 = GET_LO(from); \
- *(*toP)++ = (((lo & 0x3) << 4) \
- | ((GET_HI(from) & 0x3) << 2) \
- | (lo2 >> 6) \
- | 0x80); \
- *(*toP)++ = ((lo2 & 0x3f) | 0x80); \
- break; \
- } \
- } \
- *fromP = from; \
-}
-
-#define DEFINE_UTF16_TO_UTF16(E) \
-static void PTRCALL \
-E ## toUtf16(const ENCODING *enc, \
- const char **fromP, const char *fromLim, \
- unsigned short **toP, const unsigned short *toLim) \
-{ \
- /* Avoid copying first half only of surrogate */ \
- if (fromLim - *fromP > ((toLim - *toP) << 1) \
- && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \
- fromLim -= 2; \
- for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \
- *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \
-}
-
-#define SET2(ptr, ch) \
- (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8)))
-#define GET_LO(ptr) ((unsigned char)(ptr)[0])
-#define GET_HI(ptr) ((unsigned char)(ptr)[1])
-
-DEFINE_UTF16_TO_UTF8(little2_)
-DEFINE_UTF16_TO_UTF16(little2_)
-
-#undef SET2
-#undef GET_LO
-#undef GET_HI
-
-#define SET2(ptr, ch) \
- (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF)))
-#define GET_LO(ptr) ((unsigned char)(ptr)[1])
-#define GET_HI(ptr) ((unsigned char)(ptr)[0])
-
-DEFINE_UTF16_TO_UTF8(big2_)
-DEFINE_UTF16_TO_UTF16(big2_)
-
-#undef SET2
-#undef GET_LO
-#undef GET_HI
-
-#define LITTLE2_BYTE_TYPE(enc, p) \
- ((p)[1] == 0 \
- ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \
- : unicode_byte_type((p)[1], (p)[0]))
-#define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1)
-#define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c)
-#define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \
- UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
-#define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \
- UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
-
-#ifdef XML_MIN_SIZE
-
-static int PTRFASTCALL
-little2_byteType(const ENCODING *enc, const char *p)
-{
- return LITTLE2_BYTE_TYPE(enc, p);
-}
-
-static int PTRFASTCALL
-little2_byteToAscii(const ENCODING *enc, const char *p)
-{
- return LITTLE2_BYTE_TO_ASCII(enc, p);
-}
-
-static int PTRCALL
-little2_charMatches(const ENCODING *enc, const char *p, int c)
-{
- return LITTLE2_CHAR_MATCHES(enc, p, c);
-}
-
-static int PTRFASTCALL
-little2_isNameMin(const ENCODING *enc, const char *p)
-{
- return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p);
-}
-
-static int PTRFASTCALL
-little2_isNmstrtMin(const ENCODING *enc, const char *p)
-{
- return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p);
-}
-
-#undef VTABLE
-#define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16
-
-#else /* not XML_MIN_SIZE */
-
-#undef PREFIX
-#define PREFIX(ident) little2_ ## ident
-#define MINBPC(enc) 2
-/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */
-#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
-#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p)
-#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c)
-#define IS_NAME_CHAR(enc, p, n) 0
-#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p)
-#define IS_NMSTRT_CHAR(enc, p, n) (0)
-#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p)
-
-#define XML_TOK_IMPL_C
-#include "xmltok_impl.c"
-#undef XML_TOK_IMPL_C
-
-#undef MINBPC
-#undef BYTE_TYPE
-#undef BYTE_TO_ASCII
-#undef CHAR_MATCHES
-#undef IS_NAME_CHAR
-#undef IS_NAME_CHAR_MINBPC
-#undef IS_NMSTRT_CHAR
-#undef IS_NMSTRT_CHAR_MINBPC
-#undef IS_INVALID_CHAR
-
-#endif /* not XML_MIN_SIZE */
-
-#ifdef XML_NS
-
-static const struct normal_encoding little2_encoding_ns = {
- { VTABLE, 2, 0,
-#if BYTEORDER == 1234
- 1
-#else
- 0
-#endif
- },
- {
-#include "asciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(little2_)
-};
-
-#endif
-
-static const struct normal_encoding little2_encoding = {
- { VTABLE, 2, 0,
-#if BYTEORDER == 1234
- 1
-#else
- 0
-#endif
- },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(little2_)
-};
-
-#if BYTEORDER != 4321
-
-#ifdef XML_NS
-
-static const struct normal_encoding internal_little2_encoding_ns = {
- { VTABLE, 2, 0, 1 },
- {
-#include "iasciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(little2_)
-};
-
-#endif
-
-static const struct normal_encoding internal_little2_encoding = {
- { VTABLE, 2, 0, 1 },
- {
-#define BT_COLON BT_NMSTRT
-#include "iasciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(little2_)
-};
-
-#endif
-
-
-#define BIG2_BYTE_TYPE(enc, p) \
- ((p)[0] == 0 \
- ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \
- : unicode_byte_type((p)[0], (p)[1]))
-#define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1)
-#define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c)
-#define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \
- UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1])
-#define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \
- UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1])
-
-#ifdef XML_MIN_SIZE
-
-static int PTRFASTCALL
-big2_byteType(const ENCODING *enc, const char *p)
-{
- return BIG2_BYTE_TYPE(enc, p);
-}
-
-static int PTRFASTCALL
-big2_byteToAscii(const ENCODING *enc, const char *p)
-{
- return BIG2_BYTE_TO_ASCII(enc, p);
-}
-
-static int PTRCALL
-big2_charMatches(const ENCODING *enc, const char *p, int c)
-{
- return BIG2_CHAR_MATCHES(enc, p, c);
-}
-
-static int PTRFASTCALL
-big2_isNameMin(const ENCODING *enc, const char *p)
-{
- return BIG2_IS_NAME_CHAR_MINBPC(enc, p);
-}
-
-static int PTRFASTCALL
-big2_isNmstrtMin(const ENCODING *enc, const char *p)
-{
- return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p);
-}
-
-#undef VTABLE
-#define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16
-
-#else /* not XML_MIN_SIZE */
-
-#undef PREFIX
-#define PREFIX(ident) big2_ ## ident
-#define MINBPC(enc) 2
-/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */
-#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
-#define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p)
-#define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c)
-#define IS_NAME_CHAR(enc, p, n) 0
-#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p)
-#define IS_NMSTRT_CHAR(enc, p, n) (0)
-#define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p)
-
-#define XML_TOK_IMPL_C
-#include "xmltok_impl.c"
-#undef XML_TOK_IMPL_C
-
-#undef MINBPC
-#undef BYTE_TYPE
-#undef BYTE_TO_ASCII
-#undef CHAR_MATCHES
-#undef IS_NAME_CHAR
-#undef IS_NAME_CHAR_MINBPC
-#undef IS_NMSTRT_CHAR
-#undef IS_NMSTRT_CHAR_MINBPC
-#undef IS_INVALID_CHAR
-
-#endif /* not XML_MIN_SIZE */
-
-#ifdef XML_NS
-
-static const struct normal_encoding big2_encoding_ns = {
- { VTABLE, 2, 0,
-#if BYTEORDER == 4321
- 1
-#else
- 0
-#endif
- },
- {
-#include "asciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(big2_)
-};
-
-#endif
-
-static const struct normal_encoding big2_encoding = {
- { VTABLE, 2, 0,
-#if BYTEORDER == 4321
- 1
-#else
- 0
-#endif
- },
- {
-#define BT_COLON BT_NMSTRT
-#include "asciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(big2_)
-};
-
-#if BYTEORDER != 1234
-
-#ifdef XML_NS
-
-static const struct normal_encoding internal_big2_encoding_ns = {
- { VTABLE, 2, 0, 1 },
- {
-#include "iasciitab.h"
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(big2_)
-};
-
-#endif
-
-static const struct normal_encoding internal_big2_encoding = {
- { VTABLE, 2, 0, 1 },
- {
-#define BT_COLON BT_NMSTRT
-#include "iasciitab.h"
-#undef BT_COLON
-#include "latin1tab.h"
- },
- STANDARD_VTABLE(big2_)
-};
-
-#endif
-
-#undef PREFIX
-
-static int FASTCALL
-streqci(const char *s1, const char *s2)
-{
- for (;;) {
- char c1 = *s1++;
- char c2 = *s2++;
- if (ASCII_a <= c1 && c1 <= ASCII_z)
- c1 += ASCII_A - ASCII_a;
- if (ASCII_a <= c2 && c2 <= ASCII_z)
- c2 += ASCII_A - ASCII_a;
- if (c1 != c2)
- return 0;
- if (!c1)
- break;
- }
- return 1;
-}
-
-static void PTRCALL
-initUpdatePosition(const ENCODING *enc, const char *ptr,
- const char *end, POSITION *pos)
-{
- normal_updatePosition(&utf8_encoding.enc, ptr, end, pos);
-}
-
-static int
-toAscii(const ENCODING *enc, const char *ptr, const char *end)
-{
- char buf[1];
- char *p = buf;
- XmlUtf8Convert(enc, &ptr, end, &p, p + 1);
- if (p == buf)
- return -1;
- else
- return buf[0];
-}
-
-static int FASTCALL
-isSpace(int c)
-{
- switch (c) {
- case 0x20:
- case 0xD:
- case 0xA:
- case 0x9:
- return 1;
- }
- return 0;
-}
-
-/* Return 1 if there's just optional white space or there's an S
- followed by name=val.
-*/
-static int
-parsePseudoAttribute(const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **namePtr,
- const char **nameEndPtr,
- const char **valPtr,
- const char **nextTokPtr)
-{
- int c;
- char open;
- if (ptr == end) {
- *namePtr = NULL;
- return 1;
- }
- if (!isSpace(toAscii(enc, ptr, end))) {
- *nextTokPtr = ptr;
- return 0;
- }
- do {
- ptr += enc->minBytesPerChar;
- } while (isSpace(toAscii(enc, ptr, end)));
- if (ptr == end) {
- *namePtr = NULL;
- return 1;
- }
- *namePtr = ptr;
- for (;;) {
- c = toAscii(enc, ptr, end);
- if (c == -1) {
- *nextTokPtr = ptr;
- return 0;
- }
- if (c == ASCII_EQUALS) {
- *nameEndPtr = ptr;
- break;
- }
- if (isSpace(c)) {
- *nameEndPtr = ptr;
- do {
- ptr += enc->minBytesPerChar;
- } while (isSpace(c = toAscii(enc, ptr, end)));
- if (c != ASCII_EQUALS) {
- *nextTokPtr = ptr;
- return 0;
- }
- break;
- }
- ptr += enc->minBytesPerChar;
- }
- if (ptr == *namePtr) {
- *nextTokPtr = ptr;
- return 0;
- }
- ptr += enc->minBytesPerChar;
- c = toAscii(enc, ptr, end);
- while (isSpace(c)) {
- ptr += enc->minBytesPerChar;
- c = toAscii(enc, ptr, end);
- }
- if (c != ASCII_QUOT && c != ASCII_APOS) {
- *nextTokPtr = ptr;
- return 0;
- }
- open = (char)c;
- ptr += enc->minBytesPerChar;
- *valPtr = ptr;
- for (;; ptr += enc->minBytesPerChar) {
- c = toAscii(enc, ptr, end);
- if (c == open)
- break;
- if (!(ASCII_a <= c && c <= ASCII_z)
- && !(ASCII_A <= c && c <= ASCII_Z)
- && !(ASCII_0 <= c && c <= ASCII_9)
- && c != ASCII_PERIOD
- && c != ASCII_MINUS
- && c != ASCII_UNDERSCORE) {
- *nextTokPtr = ptr;
- return 0;
- }
- }
- *nextTokPtr = ptr + enc->minBytesPerChar;
- return 1;
-}
-
-static const char KW_version[] = {
- ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0'
-};
-
-static const char KW_encoding[] = {
- ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, ASCII_i, ASCII_n, ASCII_g, '\0'
-};
-
-static const char KW_standalone[] = {
- ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, ASCII_l, ASCII_o,
- ASCII_n, ASCII_e, '\0'
-};
-
-static const char KW_yes[] = {
- ASCII_y, ASCII_e, ASCII_s, '\0'
-};
-
-static const char KW_no[] = {
- ASCII_n, ASCII_o, '\0'
-};
-
-static int
-doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *,
- const char *,
- const char *),
- int isGeneralTextEntity,
- const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr,
- const char **versionPtr,
- const char **versionEndPtr,
- const char **encodingName,
- const ENCODING **encoding,
- int *standalone)
-{
- const char *val = NULL;
- const char *name = NULL;
- const char *nameEnd = NULL;
- ptr += 5 * enc->minBytesPerChar;
- end -= 2 * enc->minBytesPerChar;
- if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)
- || !name) {
- *badPtr = ptr;
- return 0;
- }
- if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) {
- if (!isGeneralTextEntity) {
- *badPtr = name;
- return 0;
- }
- }
- else {
- if (versionPtr)
- *versionPtr = val;
- if (versionEndPtr)
- *versionEndPtr = ptr;
- if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) {
- *badPtr = ptr;
- return 0;
- }
- if (!name) {
- if (isGeneralTextEntity) {
- /* a TextDecl must have an EncodingDecl */
- *badPtr = ptr;
- return 0;
- }
- return 1;
- }
- }
- if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) {
- int c = toAscii(enc, val, end);
- if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z)) {
- *badPtr = val;
- return 0;
- }
- if (encodingName)
- *encodingName = val;
- if (encoding)
- *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar);
- if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) {
- *badPtr = ptr;
- return 0;
- }
- if (!name)
- return 1;
- }
- if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone)
- || isGeneralTextEntity) {
- *badPtr = name;
- return 0;
- }
- if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) {
- if (standalone)
- *standalone = 1;
- }
- else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) {
- if (standalone)
- *standalone = 0;
- }
- else {
- *badPtr = val;
- return 0;
- }
- while (isSpace(toAscii(enc, ptr, end)))
- ptr += enc->minBytesPerChar;
- if (ptr != end) {
- *badPtr = ptr;
- return 0;
- }
- return 1;
-}
-
-static int FASTCALL
-checkCharRefNumber(int result)
-{
- switch (result >> 8) {
- case 0xD8: case 0xD9: case 0xDA: case 0xDB:
- case 0xDC: case 0xDD: case 0xDE: case 0xDF:
- return -1;
- case 0:
- if (latin1_encoding.type[result] == BT_NONXML)
- return -1;
- break;
- case 0xFF:
- if (result == 0xFFFE || result == 0xFFFF)
- return -1;
- break;
- }
- return result;
-}
-
-int FASTCALL
-XmlUtf8Encode(int c, char *buf)
-{
- enum {
- /* minN is minimum legal resulting value for N byte sequence */
- min2 = 0x80,
- min3 = 0x800,
- min4 = 0x10000
- };
-
- if (c < 0)
- return 0;
- if (c < min2) {
- buf[0] = (char)(c | UTF8_cval1);
- return 1;
- }
- if (c < min3) {
- buf[0] = (char)((c >> 6) | UTF8_cval2);
- buf[1] = (char)((c & 0x3f) | 0x80);
- return 2;
- }
- if (c < min4) {
- buf[0] = (char)((c >> 12) | UTF8_cval3);
- buf[1] = (char)(((c >> 6) & 0x3f) | 0x80);
- buf[2] = (char)((c & 0x3f) | 0x80);
- return 3;
- }
- if (c < 0x110000) {
- buf[0] = (char)((c >> 18) | UTF8_cval4);
- buf[1] = (char)(((c >> 12) & 0x3f) | 0x80);
- buf[2] = (char)(((c >> 6) & 0x3f) | 0x80);
- buf[3] = (char)((c & 0x3f) | 0x80);
- return 4;
- }
- return 0;
-}
-
-int FASTCALL
-XmlUtf16Encode(int charNum, unsigned short *buf)
-{
- if (charNum < 0)
- return 0;
- if (charNum < 0x10000) {
- buf[0] = (unsigned short)charNum;
- return 1;
- }
- if (charNum < 0x110000) {
- charNum -= 0x10000;
- buf[0] = (unsigned short)((charNum >> 10) + 0xD800);
- buf[1] = (unsigned short)((charNum & 0x3FF) + 0xDC00);
- return 2;
- }
- return 0;
-}
-
-struct unknown_encoding {
- struct normal_encoding normal;
- CONVERTER convert;
- void *userData;
- unsigned short utf16[256];
- char utf8[256][4];
-};
-
-#define AS_UNKNOWN_ENCODING(enc) ((const struct unknown_encoding *) (enc))
-
-int
-XmlSizeOfUnknownEncoding(void)
-{
- return sizeof(struct unknown_encoding);
-}
-
-static int PTRFASTCALL
-unknown_isName(const ENCODING *enc, const char *p)
-{
- const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc);
- int c = uenc->convert(uenc->userData, p);
- if (c & ~0xFFFF)
- return 0;
- return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF);
-}
-
-static int PTRFASTCALL
-unknown_isNmstrt(const ENCODING *enc, const char *p)
-{
- const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc);
- int c = uenc->convert(uenc->userData, p);
- if (c & ~0xFFFF)
- return 0;
- return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF);
-}
-
-static int PTRFASTCALL
-unknown_isInvalid(const ENCODING *enc, const char *p)
-{
- const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc);
- int c = uenc->convert(uenc->userData, p);
- return (c & ~0xFFFF) || checkCharRefNumber(c) < 0;
-}
-
-static void PTRCALL
-unknown_toUtf8(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- char **toP, const char *toLim)
-{
- const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc);
- char buf[XML_UTF8_ENCODE_MAX];
- for (;;) {
- const char *utf8;
- int n;
- if (*fromP == fromLim)
- break;
- utf8 = uenc->utf8[(unsigned char)**fromP];
- n = *utf8++;
- if (n == 0) {
- int c = uenc->convert(uenc->userData, *fromP);
- n = XmlUtf8Encode(c, buf);
- if (n > toLim - *toP)
- break;
- utf8 = buf;
- *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP]
- - (BT_LEAD2 - 2));
- }
- else {
- if (n > toLim - *toP)
- break;
- (*fromP)++;
- }
- do {
- *(*toP)++ = *utf8++;
- } while (--n != 0);
- }
-}
-
-static void PTRCALL
-unknown_toUtf16(const ENCODING *enc,
- const char **fromP, const char *fromLim,
- unsigned short **toP, const unsigned short *toLim)
-{
- const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc);
- while (*fromP != fromLim && *toP != toLim) {
- unsigned short c = uenc->utf16[(unsigned char)**fromP];
- if (c == 0) {
- c = (unsigned short)
- uenc->convert(uenc->userData, *fromP);
- *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP]
- - (BT_LEAD2 - 2));
- }
- else
- (*fromP)++;
- *(*toP)++ = c;
- }
-}
-
-ENCODING *
-XmlInitUnknownEncoding(void *mem,
- int *table,
- CONVERTER convert,
- void *userData)
-{
- int i;
- struct unknown_encoding *e = (struct unknown_encoding *)mem;
- for (i = 0; i < (int)sizeof(struct normal_encoding); i++)
- ((char *)mem)[i] = ((char *)&latin1_encoding)[i];
- for (i = 0; i < 128; i++)
- if (latin1_encoding.type[i] != BT_OTHER
- && latin1_encoding.type[i] != BT_NONXML
- && table[i] != i)
- return 0;
- for (i = 0; i < 256; i++) {
- int c = table[i];
- if (c == -1) {
- e->normal.type[i] = BT_MALFORM;
- /* This shouldn't really get used. */
- e->utf16[i] = 0xFFFF;
- e->utf8[i][0] = 1;
- e->utf8[i][1] = 0;
- }
- else if (c < 0) {
- if (c < -4)
- return 0;
- e->normal.type[i] = (unsigned char)(BT_LEAD2 - (c + 2));
- e->utf8[i][0] = 0;
- e->utf16[i] = 0;
- }
- else if (c < 0x80) {
- if (latin1_encoding.type[c] != BT_OTHER
- && latin1_encoding.type[c] != BT_NONXML
- && c != i)
- return 0;
- e->normal.type[i] = latin1_encoding.type[c];
- e->utf8[i][0] = 1;
- e->utf8[i][1] = (char)c;
- e->utf16[i] = (unsigned short)(c == 0 ? 0xFFFF : c);
- }
- else if (checkCharRefNumber(c) < 0) {
- e->normal.type[i] = BT_NONXML;
- /* This shouldn't really get used. */
- e->utf16[i] = 0xFFFF;
- e->utf8[i][0] = 1;
- e->utf8[i][1] = 0;
- }
- else {
- if (c > 0xFFFF)
- return 0;
- if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff))
- e->normal.type[i] = BT_NMSTRT;
- else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff))
- e->normal.type[i] = BT_NAME;
- else
- e->normal.type[i] = BT_OTHER;
- e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1);
- e->utf16[i] = (unsigned short)c;
- }
- }
- e->userData = userData;
- e->convert = convert;
- if (convert) {
- e->normal.isName2 = unknown_isName;
- e->normal.isName3 = unknown_isName;
- e->normal.isName4 = unknown_isName;
- e->normal.isNmstrt2 = unknown_isNmstrt;
- e->normal.isNmstrt3 = unknown_isNmstrt;
- e->normal.isNmstrt4 = unknown_isNmstrt;
- e->normal.isInvalid2 = unknown_isInvalid;
- e->normal.isInvalid3 = unknown_isInvalid;
- e->normal.isInvalid4 = unknown_isInvalid;
- }
- e->normal.enc.utf8Convert = unknown_toUtf8;
- e->normal.enc.utf16Convert = unknown_toUtf16;
- return &(e->normal.enc);
-}
-
-/* If this enumeration is changed, getEncodingIndex and encodings
-must also be changed. */
-enum {
- UNKNOWN_ENC = -1,
- ISO_8859_1_ENC = 0,
- US_ASCII_ENC,
- UTF_8_ENC,
- UTF_16_ENC,
- UTF_16BE_ENC,
- UTF_16LE_ENC,
- /* must match encodingNames up to here */
- NO_ENC
-};
-
-static const char KW_ISO_8859_1[] = {
- ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, ASCII_5, ASCII_9,
- ASCII_MINUS, ASCII_1, '\0'
-};
-static const char KW_US_ASCII[] = {
- ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, ASCII_C, ASCII_I, ASCII_I,
- '\0'
-};
-static const char KW_UTF_8[] = {
- ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0'
-};
-static const char KW_UTF_16[] = {
- ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0'
-};
-static const char KW_UTF_16BE[] = {
- ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_B, ASCII_E,
- '\0'
-};
-static const char KW_UTF_16LE[] = {
- ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E,
- '\0'
-};
-
-static int FASTCALL
-getEncodingIndex(const char *name)
-{
- static const char * const encodingNames[] = {
- KW_ISO_8859_1,
- KW_US_ASCII,
- KW_UTF_8,
- KW_UTF_16,
- KW_UTF_16BE,
- KW_UTF_16LE,
- };
- int i;
- if (name == NULL)
- return NO_ENC;
- for (i = 0; i < (int)(sizeof(encodingNames)/sizeof(encodingNames[0])); i++)
- if (streqci(name, encodingNames[i]))
- return i;
- return UNKNOWN_ENC;
-}
-
-/* For binary compatibility, we store the index of the encoding
- specified at initialization in the isUtf16 member.
-*/
-
-#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
-#define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i)
-
-/* This is what detects the encoding. encodingTable maps from
- encoding indices to encodings; INIT_ENC_INDEX(enc) is the index of
- the external (protocol) specified encoding; state is
- XML_CONTENT_STATE if we're parsing an external text entity, and
- XML_PROLOG_STATE otherwise.
-*/
-
-
-static int
-initScan(const ENCODING * const *encodingTable,
- const INIT_ENCODING *enc,
- int state,
- const char *ptr,
- const char *end,
- const char **nextTokPtr)
-{
- const ENCODING **encPtr;
-
- if (ptr == end)
- return XML_TOK_NONE;
- encPtr = enc->encPtr;
- if (ptr + 1 == end) {
- /* only a single byte available for auto-detection */
-#ifndef XML_DTD /* FIXME */
- /* a well-formed document entity must have more than one byte */
- if (state != XML_CONTENT_STATE)
- return XML_TOK_PARTIAL;
-#endif
- /* so we're parsing an external text entity... */
- /* if UTF-16 was externally specified, then we need at least 2 bytes */
- switch (INIT_ENC_INDEX(enc)) {
- case UTF_16_ENC:
- case UTF_16LE_ENC:
- case UTF_16BE_ENC:
- return XML_TOK_PARTIAL;
- }
- switch ((unsigned char)*ptr) {
- case 0xFE:
- case 0xFF:
- case 0xEF: /* possibly first byte of UTF-8 BOM */
- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
- && state == XML_CONTENT_STATE)
- break;
- /* fall through */
- case 0x00:
- case 0x3C:
- return XML_TOK_PARTIAL;
- }
- }
- else {
- switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) {
- case 0xFEFF:
- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
- && state == XML_CONTENT_STATE)
- break;
- *nextTokPtr = ptr + 2;
- *encPtr = encodingTable[UTF_16BE_ENC];
- return XML_TOK_BOM;
- /* 00 3C is handled in the default case */
- case 0x3C00:
- if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC
- || INIT_ENC_INDEX(enc) == UTF_16_ENC)
- && state == XML_CONTENT_STATE)
- break;
- *encPtr = encodingTable[UTF_16LE_ENC];
- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
- case 0xFFFE:
- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
- && state == XML_CONTENT_STATE)
- break;
- *nextTokPtr = ptr + 2;
- *encPtr = encodingTable[UTF_16LE_ENC];
- return XML_TOK_BOM;
- case 0xEFBB:
- /* Maybe a UTF-8 BOM (EF BB BF) */
- /* If there's an explicitly specified (external) encoding
- of ISO-8859-1 or some flavour of UTF-16
- and this is an external text entity,
- don't look for the BOM,
- because it might be a legal data.
- */
- if (state == XML_CONTENT_STATE) {
- int e = INIT_ENC_INDEX(enc);
- if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC
- || e == UTF_16LE_ENC || e == UTF_16_ENC)
- break;
- }
- if (ptr + 2 == end)
- return XML_TOK_PARTIAL;
- if ((unsigned char)ptr[2] == 0xBF) {
- *nextTokPtr = ptr + 3;
- *encPtr = encodingTable[UTF_8_ENC];
- return XML_TOK_BOM;
- }
- break;
- default:
- if (ptr[0] == '\0') {
- /* 0 isn't a legal data character. Furthermore a document
- entity can only start with ASCII characters. So the only
- way this can fail to be big-endian UTF-16 if it it's an
- external parsed general entity that's labelled as
- UTF-16LE.
- */
- if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC)
- break;
- *encPtr = encodingTable[UTF_16BE_ENC];
- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
- }
- else if (ptr[1] == '\0') {
- /* We could recover here in the case:
- - parsing an external entity
- - second byte is 0
- - no externally specified encoding
- - no encoding declaration
- by assuming UTF-16LE. But we don't, because this would mean when
- presented just with a single byte, we couldn't reliably determine
- whether we needed further bytes.
- */
- if (state == XML_CONTENT_STATE)
- break;
- *encPtr = encodingTable[UTF_16LE_ENC];
- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
- }
- break;
- }
- }
- *encPtr = encodingTable[INIT_ENC_INDEX(enc)];
- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
-}
-
-
-#define NS(x) x
-#define ns(x) x
-#define XML_TOK_NS_C
-#include "xmltok_ns.c"
-#undef XML_TOK_NS_C
-#undef NS
-#undef ns
-
-#ifdef XML_NS
-
-#define NS(x) x ## NS
-#define ns(x) x ## _ns
-
-#define XML_TOK_NS_C
-#include "xmltok_ns.c"
-#undef XML_TOK_NS_C
-
-#undef NS
-#undef ns
-
-ENCODING *
-XmlInitUnknownEncodingNS(void *mem,
- int *table,
- CONVERTER convert,
- void *userData)
-{
- ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData);
- if (enc)
- ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON;
- return enc;
-}
-
-#endif /* XML_NS */
diff --git a/3rdParty/Expat/src/xmltok.h b/3rdParty/Expat/src/xmltok.h
deleted file mode 100755
index ca867aa..0000000
--- a/3rdParty/Expat/src/xmltok.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-#ifndef XmlTok_INCLUDED
-#define XmlTok_INCLUDED 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The following token may be returned by XmlContentTok */
-#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be
- start of illegal ]]> sequence */
-/* The following tokens may be returned by both XmlPrologTok and
- XmlContentTok.
-*/
-#define XML_TOK_NONE -4 /* The string to be scanned is empty */
-#define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan;
- might be part of CRLF sequence */
-#define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
-#define XML_TOK_PARTIAL -1 /* only part of a token */
-#define XML_TOK_INVALID 0
-
-/* The following tokens are returned by XmlContentTok; some are also
- returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok.
-*/
-#define XML_TOK_START_TAG_WITH_ATTS 1
-#define XML_TOK_START_TAG_NO_ATTS 2
-#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
-#define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4
-#define XML_TOK_END_TAG 5
-#define XML_TOK_DATA_CHARS 6
-#define XML_TOK_DATA_NEWLINE 7
-#define XML_TOK_CDATA_SECT_OPEN 8
-#define XML_TOK_ENTITY_REF 9
-#define XML_TOK_CHAR_REF 10 /* numeric character reference */
-
-/* The following tokens may be returned by both XmlPrologTok and
- XmlContentTok.
-*/
-#define XML_TOK_PI 11 /* processing instruction */
-#define XML_TOK_XML_DECL 12 /* XML decl or text decl */
-#define XML_TOK_COMMENT 13
-#define XML_TOK_BOM 14 /* Byte order mark */
-
-/* The following tokens are returned only by XmlPrologTok */
-#define XML_TOK_PROLOG_S 15
-#define XML_TOK_DECL_OPEN 16 /* <!foo */
-#define XML_TOK_DECL_CLOSE 17 /* > */
-#define XML_TOK_NAME 18
-#define XML_TOK_NMTOKEN 19
-#define XML_TOK_POUND_NAME 20 /* #name */
-#define XML_TOK_OR 21 /* | */
-#define XML_TOK_PERCENT 22
-#define XML_TOK_OPEN_PAREN 23
-#define XML_TOK_CLOSE_PAREN 24
-#define XML_TOK_OPEN_BRACKET 25
-#define XML_TOK_CLOSE_BRACKET 26
-#define XML_TOK_LITERAL 27
-#define XML_TOK_PARAM_ENTITY_REF 28
-#define XML_TOK_INSTANCE_START 29
-
-/* The following occur only in element type declarations */
-#define XML_TOK_NAME_QUESTION 30 /* name? */
-#define XML_TOK_NAME_ASTERISK 31 /* name* */
-#define XML_TOK_NAME_PLUS 32 /* name+ */
-#define XML_TOK_COND_SECT_OPEN 33 /* <![ */
-#define XML_TOK_COND_SECT_CLOSE 34 /* ]]> */
-#define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */
-#define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
-#define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */
-#define XML_TOK_COMMA 38
-
-/* The following token is returned only by XmlAttributeValueTok */
-#define XML_TOK_ATTRIBUTE_VALUE_S 39
-
-/* The following token is returned only by XmlCdataSectionTok */
-#define XML_TOK_CDATA_SECT_CLOSE 40
-
-/* With namespace processing this is returned by XmlPrologTok for a
- name with a colon.
-*/
-#define XML_TOK_PREFIXED_NAME 41
-
-#ifdef XML_DTD
-#define XML_TOK_IGNORE_SECT 42
-#endif /* XML_DTD */
-
-#ifdef XML_DTD
-#define XML_N_STATES 4
-#else /* not XML_DTD */
-#define XML_N_STATES 3
-#endif /* not XML_DTD */
-
-#define XML_PROLOG_STATE 0
-#define XML_CONTENT_STATE 1
-#define XML_CDATA_SECTION_STATE 2
-#ifdef XML_DTD
-#define XML_IGNORE_SECTION_STATE 3
-#endif /* XML_DTD */
-
-#define XML_N_LITERAL_TYPES 2
-#define XML_ATTRIBUTE_VALUE_LITERAL 0
-#define XML_ENTITY_VALUE_LITERAL 1
-
-/* The size of the buffer passed to XmlUtf8Encode must be at least this. */
-#define XML_UTF8_ENCODE_MAX 4
-/* The size of the buffer passed to XmlUtf16Encode must be at least this. */
-#define XML_UTF16_ENCODE_MAX 2
-
-typedef struct position {
- /* first line and first column are 0 not 1 */
- XML_Size lineNumber;
- XML_Size columnNumber;
-} POSITION;
-
-typedef struct {
- const char *name;
- const char *valuePtr;
- const char *valueEnd;
- char normalized;
-} ATTRIBUTE;
-
-struct encoding;
-typedef struct encoding ENCODING;
-
-typedef int (PTRCALL *SCANNER)(const ENCODING *,
- const char *,
- const char *,
- const char **);
-
-struct encoding {
- SCANNER scanners[XML_N_STATES];
- SCANNER literalScanners[XML_N_LITERAL_TYPES];
- int (PTRCALL *sameName)(const ENCODING *,
- const char *,
- const char *);
- int (PTRCALL *nameMatchesAscii)(const ENCODING *,
- const char *,
- const char *,
- const char *);
- int (PTRFASTCALL *nameLength)(const ENCODING *, const char *);
- const char *(PTRFASTCALL *skipS)(const ENCODING *, const char *);
- int (PTRCALL *getAtts)(const ENCODING *enc,
- const char *ptr,
- int attsMax,
- ATTRIBUTE *atts);
- int (PTRFASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr);
- int (PTRCALL *predefinedEntityName)(const ENCODING *,
- const char *,
- const char *);
- void (PTRCALL *updatePosition)(const ENCODING *,
- const char *ptr,
- const char *end,
- POSITION *);
- int (PTRCALL *isPublicId)(const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr);
- void (PTRCALL *utf8Convert)(const ENCODING *enc,
- const char **fromP,
- const char *fromLim,
- char **toP,
- const char *toLim);
- void (PTRCALL *utf16Convert)(const ENCODING *enc,
- const char **fromP,
- const char *fromLim,
- unsigned short **toP,
- const unsigned short *toLim);
- int minBytesPerChar;
- char isUtf8;
- char isUtf16;
-};
-
-/* Scan the string starting at ptr until the end of the next complete
- token, but do not scan past eptr. Return an integer giving the
- type of token.
-
- Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set.
-
- Return XML_TOK_PARTIAL when the string does not contain a complete
- token; nextTokPtr will not be set.
-
- Return XML_TOK_INVALID when the string does not start a valid
- token; nextTokPtr will be set to point to the character which made
- the token invalid.
-
- Otherwise the string starts with a valid token; nextTokPtr will be
- set to point to the character following the end of that token.
-
- Each data character counts as a single token, but adjacent data
- characters may be returned together. Similarly for characters in
- the prolog outside literals, comments and processing instructions.
-*/
-
-
-#define XmlTok(enc, state, ptr, end, nextTokPtr) \
- (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
-
-#define XmlPrologTok(enc, ptr, end, nextTokPtr) \
- XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
-
-#define XmlContentTok(enc, ptr, end, nextTokPtr) \
- XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr)
-
-#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \
- XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr)
-
-#ifdef XML_DTD
-
-#define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \
- XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr)
-
-#endif /* XML_DTD */
-
-/* This is used for performing a 2nd-level tokenization on the content
- of a literal that has already been returned by XmlTok.
-*/
-#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \
- (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
-
-#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \
- XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr)
-
-#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \
- XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr)
-
-#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2))
-
-#define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \
- (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
-
-#define XmlNameLength(enc, ptr) \
- (((enc)->nameLength)(enc, ptr))
-
-#define XmlSkipS(enc, ptr) \
- (((enc)->skipS)(enc, ptr))
-
-#define XmlGetAttributes(enc, ptr, attsMax, atts) \
- (((enc)->getAtts)(enc, ptr, attsMax, atts))
-
-#define XmlCharRefNumber(enc, ptr) \
- (((enc)->charRefNumber)(enc, ptr))
-
-#define XmlPredefinedEntityName(enc, ptr, end) \
- (((enc)->predefinedEntityName)(enc, ptr, end))
-
-#define XmlUpdatePosition(enc, ptr, end, pos) \
- (((enc)->updatePosition)(enc, ptr, end, pos))
-
-#define XmlIsPublicId(enc, ptr, end, badPtr) \
- (((enc)->isPublicId)(enc, ptr, end, badPtr))
-
-#define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \
- (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
-
-#define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \
- (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim))
-
-typedef struct {
- ENCODING initEnc;
- const ENCODING **encPtr;
-} INIT_ENCODING;
-
-int XmlParseXmlDecl(int isGeneralTextEntity,
- const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr,
- const char **versionPtr,
- const char **versionEndPtr,
- const char **encodingNamePtr,
- const ENCODING **namedEncodingPtr,
- int *standalonePtr);
-
-int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name);
-const ENCODING *XmlGetUtf8InternalEncoding(void);
-const ENCODING *XmlGetUtf16InternalEncoding(void);
-int FASTCALL XmlUtf8Encode(int charNumber, char *buf);
-int FASTCALL XmlUtf16Encode(int charNumber, unsigned short *buf);
-int XmlSizeOfUnknownEncoding(void);
-
-
-typedef int (XMLCALL *CONVERTER) (void *userData, const char *p);
-
-ENCODING *
-XmlInitUnknownEncoding(void *mem,
- int *table,
- CONVERTER convert,
- void *userData);
-
-int XmlParseXmlDeclNS(int isGeneralTextEntity,
- const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr,
- const char **versionPtr,
- const char **versionEndPtr,
- const char **encodingNamePtr,
- const ENCODING **namedEncodingPtr,
- int *standalonePtr);
-
-int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name);
-const ENCODING *XmlGetUtf8InternalEncodingNS(void);
-const ENCODING *XmlGetUtf16InternalEncodingNS(void);
-ENCODING *
-XmlInitUnknownEncodingNS(void *mem,
- int *table,
- CONVERTER convert,
- void *userData);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not XmlTok_INCLUDED */
diff --git a/3rdParty/Expat/src/xmltok_impl.c b/3rdParty/Expat/src/xmltok_impl.c
deleted file mode 100755
index 1268819..0000000
--- a/3rdParty/Expat/src/xmltok_impl.c
+++ /dev/null
@@ -1,1783 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-/* This file is included! */
-#ifdef XML_TOK_IMPL_C
-
-#ifndef IS_INVALID_CHAR
-#define IS_INVALID_CHAR(enc, ptr, n) (0)
-#endif
-
-#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \
- case BT_LEAD ## n: \
- if (end - ptr < n) \
- return XML_TOK_PARTIAL_CHAR; \
- if (IS_INVALID_CHAR(enc, ptr, n)) { \
- *(nextTokPtr) = (ptr); \
- return XML_TOK_INVALID; \
- } \
- ptr += n; \
- break;
-
-#define INVALID_CASES(ptr, nextTokPtr) \
- INVALID_LEAD_CASE(2, ptr, nextTokPtr) \
- INVALID_LEAD_CASE(3, ptr, nextTokPtr) \
- INVALID_LEAD_CASE(4, ptr, nextTokPtr) \
- case BT_NONXML: \
- case BT_MALFORM: \
- case BT_TRAIL: \
- *(nextTokPtr) = (ptr); \
- return XML_TOK_INVALID;
-
-#define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \
- case BT_LEAD ## n: \
- if (end - ptr < n) \
- return XML_TOK_PARTIAL_CHAR; \
- if (!IS_NAME_CHAR(enc, ptr, n)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID; \
- } \
- ptr += n; \
- break;
-
-#define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \
- case BT_NONASCII: \
- if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID; \
- } \
- case BT_NMSTRT: \
- case BT_HEX: \
- case BT_DIGIT: \
- case BT_NAME: \
- case BT_MINUS: \
- ptr += MINBPC(enc); \
- break; \
- CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \
- CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \
- CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
-
-#define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \
- case BT_LEAD ## n: \
- if (end - ptr < n) \
- return XML_TOK_PARTIAL_CHAR; \
- if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID; \
- } \
- ptr += n; \
- break;
-
-#define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \
- case BT_NONASCII: \
- if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID; \
- } \
- case BT_NMSTRT: \
- case BT_HEX: \
- ptr += MINBPC(enc); \
- break; \
- CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \
- CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \
- CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
-
-#ifndef PREFIX
-#define PREFIX(ident) ident
-#endif
-
-/* ptr points to character following "<!-" */
-
-static int PTRCALL
-PREFIX(scanComment)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- if (ptr != end) {
- if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- ptr += MINBPC(enc);
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_MINUS:
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_COMMENT;
- }
- break;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "<!" */
-
-static int PTRCALL
-PREFIX(scanDecl)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_MINUS:
- return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_LSQB:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_COND_SECT_OPEN;
- case BT_NMSTRT:
- case BT_HEX:
- ptr += MINBPC(enc);
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_PERCNT:
- if (ptr + MINBPC(enc) == end)
- return XML_TOK_PARTIAL;
- /* don't allow <!ENTITY% foo "whatever"> */
- switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
- case BT_S: case BT_CR: case BT_LF: case BT_PERCNT:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- /* fall through */
- case BT_S: case BT_CR: case BT_LF:
- *nextTokPtr = ptr;
- return XML_TOK_DECL_OPEN;
- case BT_NMSTRT:
- case BT_HEX:
- ptr += MINBPC(enc);
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static int PTRCALL
-PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr,
- const char *end, int *tokPtr)
-{
- int upper = 0;
- *tokPtr = XML_TOK_PI;
- if (end - ptr != MINBPC(enc)*3)
- return 1;
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_x:
- break;
- case ASCII_X:
- upper = 1;
- break;
- default:
- return 1;
- }
- ptr += MINBPC(enc);
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_m:
- break;
- case ASCII_M:
- upper = 1;
- break;
- default:
- return 1;
- }
- ptr += MINBPC(enc);
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_l:
- break;
- case ASCII_L:
- upper = 1;
- break;
- default:
- return 1;
- }
- if (upper)
- return 0;
- *tokPtr = XML_TOK_XML_DECL;
- return 1;
-}
-
-/* ptr points to character following "<?" */
-
-static int PTRCALL
-PREFIX(scanPi)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- int tok;
- const char *target = ptr;
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_S: case BT_CR: case BT_LF:
- if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- ptr += MINBPC(enc);
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_QUEST:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr + MINBPC(enc);
- return tok;
- }
- break;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- return XML_TOK_PARTIAL;
- case BT_QUEST:
- if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr + MINBPC(enc);
- return tok;
- }
- /* fall through */
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static int PTRCALL
-PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A,
- ASCII_T, ASCII_A, ASCII_LSQB };
- int i;
- /* CDATA[ */
- if (end - ptr < 6 * MINBPC(enc))
- return XML_TOK_PARTIAL;
- for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
- if (!CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_CDATA_SECT_OPEN;
-}
-
-static int PTRCALL
-PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_NONE;
- if (MINBPC(enc) > 1) {
- size_t n = end - ptr;
- if (n & (MINBPC(enc) - 1)) {
- n &= ~(MINBPC(enc) - 1);
- if (n == 0)
- return XML_TOK_PARTIAL;
- end = ptr + n;
- }
- }
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_RSQB:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB))
- break;
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- ptr -= MINBPC(enc);
- break;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CDATA_SECT_CLOSE;
- case BT_CR:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_NEWLINE;
- case BT_LF:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DATA_NEWLINE;
- INVALID_CASES(ptr, nextTokPtr)
- default:
- ptr += MINBPC(enc);
- break;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_DATA_CHARS; \
- } \
- ptr += n; \
- break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_NONXML:
- case BT_MALFORM:
- case BT_TRAIL:
- case BT_CR:
- case BT_LF:
- case BT_RSQB:
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
-}
-
-/* ptr points to character following "</" */
-
-static int PTRCALL
-PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_S: case BT_CR: case BT_LF:
- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_S: case BT_CR: case BT_LF:
- break;
- case BT_GT:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_END_TAG;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-#ifdef XML_NS
- case BT_COLON:
- /* no need to check qname syntax here,
- since end-tag must match exactly */
- ptr += MINBPC(enc);
- break;
-#endif
- case BT_GT:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_END_TAG;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "&#X" */
-
-static int PTRCALL
-PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- if (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- case BT_HEX:
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- case BT_HEX:
- break;
- case BT_SEMI:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CHAR_REF;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "&#" */
-
-static int PTRCALL
-PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- if (ptr != end) {
- if (CHAR_MATCHES(enc, ptr, ASCII_x))
- return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- break;
- case BT_SEMI:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CHAR_REF;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "&" */
-
-static int PTRCALL
-PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_NUM:
- return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_SEMI:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_ENTITY_REF;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following first character of attribute name */
-
-static int PTRCALL
-PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
-#ifdef XML_NS
- int hadColon = 0;
-#endif
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
-#ifdef XML_NS
- case BT_COLON:
- if (hadColon) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- hadColon = 1;
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- break;
-#endif
- case BT_S: case BT_CR: case BT_LF:
- for (;;) {
- int t;
-
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- t = BYTE_TYPE(enc, ptr);
- if (t == BT_EQUALS)
- break;
- switch (t) {
- case BT_S:
- case BT_LF:
- case BT_CR:
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- /* fall through */
- case BT_EQUALS:
- {
- int open;
-#ifdef XML_NS
- hadColon = 0;
-#endif
- for (;;) {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- open = BYTE_TYPE(enc, ptr);
- if (open == BT_QUOT || open == BT_APOS)
- break;
- switch (open) {
- case BT_S:
- case BT_LF:
- case BT_CR:
- break;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- ptr += MINBPC(enc);
- /* in attribute value */
- for (;;) {
- int t;
- if (ptr == end)
- return XML_TOK_PARTIAL;
- t = BYTE_TYPE(enc, ptr);
- if (t == open)
- break;
- switch (t) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_AMP:
- {
- int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
- if (tok <= 0) {
- if (tok == XML_TOK_INVALID)
- *nextTokPtr = ptr;
- return tok;
- }
- break;
- }
- case BT_LT:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_S:
- case BT_CR:
- case BT_LF:
- break;
- case BT_SOL:
- goto sol;
- case BT_GT:
- goto gt;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- /* ptr points to closing quote */
- for (;;) {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_S: case BT_CR: case BT_LF:
- continue;
- case BT_GT:
- gt:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_START_TAG_WITH_ATTS;
- case BT_SOL:
- sol:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- break;
- }
- break;
- }
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-/* ptr points to character following "<" */
-
-static int PTRCALL
-PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
-#ifdef XML_NS
- int hadColon;
-#endif
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_EXCL:
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_MINUS:
- return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_LSQB:
- return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc),
- end, nextTokPtr);
- }
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- case BT_QUEST:
- return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_SOL:
- return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
-#ifdef XML_NS
- hadColon = 0;
-#endif
- /* we have a start-tag */
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
-#ifdef XML_NS
- case BT_COLON:
- if (hadColon) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- hadColon = 1;
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- break;
-#endif
- case BT_S: case BT_CR: case BT_LF:
- {
- ptr += MINBPC(enc);
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_GT:
- goto gt;
- case BT_SOL:
- goto sol;
- case BT_S: case BT_CR: case BT_LF:
- ptr += MINBPC(enc);
- continue;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
- }
- return XML_TOK_PARTIAL;
- }
- case BT_GT:
- gt:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_START_TAG_NO_ATTS;
- case BT_SOL:
- sol:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static int PTRCALL
-PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_NONE;
- if (MINBPC(enc) > 1) {
- size_t n = end - ptr;
- if (n & (MINBPC(enc) - 1)) {
- n &= ~(MINBPC(enc) - 1);
- if (n == 0)
- return XML_TOK_PARTIAL;
- end = ptr + n;
- }
- }
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_LT:
- return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_AMP:
- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_CR:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_CR;
- if (BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_NEWLINE;
- case BT_LF:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DATA_NEWLINE;
- case BT_RSQB:
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_RSQB;
- if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB))
- break;
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_RSQB;
- if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- ptr -= MINBPC(enc);
- break;
- }
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- INVALID_CASES(ptr, nextTokPtr)
- default:
- ptr += MINBPC(enc);
- break;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
- *nextTokPtr = ptr; \
- return XML_TOK_DATA_CHARS; \
- } \
- ptr += n; \
- break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_RSQB:
- if (ptr + MINBPC(enc) != end) {
- if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
- ptr += MINBPC(enc);
- break;
- }
- if (ptr + 2*MINBPC(enc) != end) {
- if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) {
- ptr += MINBPC(enc);
- break;
- }
- *nextTokPtr = ptr + 2*MINBPC(enc);
- return XML_TOK_INVALID;
- }
- }
- /* fall through */
- case BT_AMP:
- case BT_LT:
- case BT_NONXML:
- case BT_MALFORM:
- case BT_TRAIL:
- case BT_CR:
- case BT_LF:
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
-}
-
-/* ptr points to character following "%" */
-
-static int PTRCALL
-PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return -XML_TOK_PERCENT;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- case BT_S: case BT_LF: case BT_CR: case BT_PERCNT:
- *nextTokPtr = ptr;
- return XML_TOK_PERCENT;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_SEMI:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_PARAM_ENTITY_REF;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static int PTRCALL
-PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_CR: case BT_LF: case BT_S:
- case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR:
- *nextTokPtr = ptr;
- return XML_TOK_POUND_NAME;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return -XML_TOK_POUND_NAME;
-}
-
-static int PTRCALL
-PREFIX(scanLit)(int open, const ENCODING *enc,
- const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- while (ptr != end) {
- int t = BYTE_TYPE(enc, ptr);
- switch (t) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_QUOT:
- case BT_APOS:
- ptr += MINBPC(enc);
- if (t != open)
- break;
- if (ptr == end)
- return -XML_TOK_LITERAL;
- *nextTokPtr = ptr;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_S: case BT_CR: case BT_LF:
- case BT_GT: case BT_PERCNT: case BT_LSQB:
- return XML_TOK_LITERAL;
- default:
- return XML_TOK_INVALID;
- }
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-static int PTRCALL
-PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- int tok;
- if (ptr == end)
- return XML_TOK_NONE;
- if (MINBPC(enc) > 1) {
- size_t n = end - ptr;
- if (n & (MINBPC(enc) - 1)) {
- n &= ~(MINBPC(enc) - 1);
- if (n == 0)
- return XML_TOK_PARTIAL;
- end = ptr + n;
- }
- }
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_QUOT:
- return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_APOS:
- return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_LT:
- {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_PARTIAL;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_EXCL:
- return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_QUEST:
- return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_NMSTRT:
- case BT_HEX:
- case BT_NONASCII:
- case BT_LEAD2:
- case BT_LEAD3:
- case BT_LEAD4:
- *nextTokPtr = ptr - MINBPC(enc);
- return XML_TOK_INSTANCE_START;
- }
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- case BT_CR:
- if (ptr + MINBPC(enc) == end) {
- *nextTokPtr = end;
- /* indicate that this might be part of a CR/LF pair */
- return -XML_TOK_PROLOG_S;
- }
- /* fall through */
- case BT_S: case BT_LF:
- for (;;) {
- ptr += MINBPC(enc);
- if (ptr == end)
- break;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_S: case BT_LF:
- break;
- case BT_CR:
- /* don't split CR/LF pair */
- if (ptr + MINBPC(enc) != end)
- break;
- /* fall through */
- default:
- *nextTokPtr = ptr;
- return XML_TOK_PROLOG_S;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_PROLOG_S;
- case BT_PERCNT:
- return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- case BT_COMMA:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_COMMA;
- case BT_LSQB:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_OPEN_BRACKET;
- case BT_RSQB:
- ptr += MINBPC(enc);
- if (ptr == end)
- return -XML_TOK_CLOSE_BRACKET;
- if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
- if (ptr + MINBPC(enc) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
- *nextTokPtr = ptr + 2*MINBPC(enc);
- return XML_TOK_COND_SECT_CLOSE;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_CLOSE_BRACKET;
- case BT_LPAR:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_OPEN_PAREN;
- case BT_RPAR:
- ptr += MINBPC(enc);
- if (ptr == end)
- return -XML_TOK_CLOSE_PAREN;
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_AST:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CLOSE_PAREN_ASTERISK;
- case BT_QUEST:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CLOSE_PAREN_QUESTION;
- case BT_PLUS:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_CLOSE_PAREN_PLUS;
- case BT_CR: case BT_LF: case BT_S:
- case BT_GT: case BT_COMMA: case BT_VERBAR:
- case BT_RPAR:
- *nextTokPtr = ptr;
- return XML_TOK_CLOSE_PAREN;
- }
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- case BT_VERBAR:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_OR;
- case BT_GT:
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DECL_CLOSE;
- case BT_NUM:
- return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- if (end - ptr < n) \
- return XML_TOK_PARTIAL_CHAR; \
- if (IS_NMSTRT_CHAR(enc, ptr, n)) { \
- ptr += n; \
- tok = XML_TOK_NAME; \
- break; \
- } \
- if (IS_NAME_CHAR(enc, ptr, n)) { \
- ptr += n; \
- tok = XML_TOK_NMTOKEN; \
- break; \
- } \
- *nextTokPtr = ptr; \
- return XML_TOK_INVALID;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_NMSTRT:
- case BT_HEX:
- tok = XML_TOK_NAME;
- ptr += MINBPC(enc);
- break;
- case BT_DIGIT:
- case BT_NAME:
- case BT_MINUS:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- tok = XML_TOK_NMTOKEN;
- ptr += MINBPC(enc);
- break;
- case BT_NONASCII:
- if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
- ptr += MINBPC(enc);
- tok = XML_TOK_NAME;
- break;
- }
- if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
- ptr += MINBPC(enc);
- tok = XML_TOK_NMTOKEN;
- break;
- }
- /* fall through */
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- case BT_GT: case BT_RPAR: case BT_COMMA:
- case BT_VERBAR: case BT_LSQB: case BT_PERCNT:
- case BT_S: case BT_CR: case BT_LF:
- *nextTokPtr = ptr;
- return tok;
-#ifdef XML_NS
- case BT_COLON:
- ptr += MINBPC(enc);
- switch (tok) {
- case XML_TOK_NAME:
- if (ptr == end)
- return XML_TOK_PARTIAL;
- tok = XML_TOK_PREFIXED_NAME;
- switch (BYTE_TYPE(enc, ptr)) {
- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
- default:
- tok = XML_TOK_NMTOKEN;
- break;
- }
- break;
- case XML_TOK_PREFIXED_NAME:
- tok = XML_TOK_NMTOKEN;
- break;
- }
- break;
-#endif
- case BT_PLUS:
- if (tok == XML_TOK_NMTOKEN) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_NAME_PLUS;
- case BT_AST:
- if (tok == XML_TOK_NMTOKEN) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_NAME_ASTERISK;
- case BT_QUEST:
- if (tok == XML_TOK_NMTOKEN) {
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_NAME_QUESTION;
- default:
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- }
- }
- return -tok;
-}
-
-static int PTRCALL
-PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- const char *start;
- if (ptr == end)
- return XML_TOK_NONE;
- start = ptr;
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: ptr += n; break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_AMP:
- if (ptr == start)
- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_LT:
- /* this is for inside entity references */
- *nextTokPtr = ptr;
- return XML_TOK_INVALID;
- case BT_LF:
- if (ptr == start) {
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DATA_NEWLINE;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_CR:
- if (ptr == start) {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_CR;
- if (BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_NEWLINE;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_S:
- if (ptr == start) {
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_ATTRIBUTE_VALUE_S;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
-}
-
-static int PTRCALL
-PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- const char *start;
- if (ptr == end)
- return XML_TOK_NONE;
- start = ptr;
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: ptr += n; break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_AMP:
- if (ptr == start)
- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_PERCNT:
- if (ptr == start) {
- int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc),
- end, nextTokPtr);
- return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_LF:
- if (ptr == start) {
- *nextTokPtr = ptr + MINBPC(enc);
- return XML_TOK_DATA_NEWLINE;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- case BT_CR:
- if (ptr == start) {
- ptr += MINBPC(enc);
- if (ptr == end)
- return XML_TOK_TRAILING_CR;
- if (BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- *nextTokPtr = ptr;
- return XML_TOK_DATA_NEWLINE;
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- *nextTokPtr = ptr;
- return XML_TOK_DATA_CHARS;
-}
-
-#ifdef XML_DTD
-
-static int PTRCALL
-PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr,
- const char *end, const char **nextTokPtr)
-{
- int level = 0;
- if (MINBPC(enc) > 1) {
- size_t n = end - ptr;
- if (n & (MINBPC(enc) - 1)) {
- n &= ~(MINBPC(enc) - 1);
- end = ptr + n;
- }
- }
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
- INVALID_CASES(ptr, nextTokPtr)
- case BT_LT:
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) {
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) {
- ++level;
- ptr += MINBPC(enc);
- }
- }
- break;
- case BT_RSQB:
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
- if ((ptr += MINBPC(enc)) == end)
- return XML_TOK_PARTIAL;
- if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
- ptr += MINBPC(enc);
- if (level == 0) {
- *nextTokPtr = ptr;
- return XML_TOK_IGNORE_SECT;
- }
- --level;
- }
- }
- break;
- default:
- ptr += MINBPC(enc);
- break;
- }
- }
- return XML_TOK_PARTIAL;
-}
-
-#endif /* XML_DTD */
-
-static int PTRCALL
-PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
- const char **badPtr)
-{
- ptr += MINBPC(enc);
- end -= MINBPC(enc);
- for (; ptr != end; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_DIGIT:
- case BT_HEX:
- case BT_MINUS:
- case BT_APOS:
- case BT_LPAR:
- case BT_RPAR:
- case BT_PLUS:
- case BT_COMMA:
- case BT_SOL:
- case BT_EQUALS:
- case BT_QUEST:
- case BT_CR:
- case BT_LF:
- case BT_SEMI:
- case BT_EXCL:
- case BT_AST:
- case BT_PERCNT:
- case BT_NUM:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- break;
- case BT_S:
- if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) {
- *badPtr = ptr;
- return 0;
- }
- break;
- case BT_NAME:
- case BT_NMSTRT:
- if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f))
- break;
- default:
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case 0x24: /* $ */
- case 0x40: /* @ */
- break;
- default:
- *badPtr = ptr;
- return 0;
- }
- break;
- }
- }
- return 1;
-}
-
-/* This must only be called for a well-formed start-tag or empty
- element tag. Returns the number of attributes. Pointers to the
- first attsMax attributes are stored in atts.
-*/
-
-static int PTRCALL
-PREFIX(getAtts)(const ENCODING *enc, const char *ptr,
- int attsMax, ATTRIBUTE *atts)
-{
- enum { other, inName, inValue } state = inName;
- int nAtts = 0;
- int open = 0; /* defined when state == inValue;
- initialization just to shut up compilers */
-
- for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define START_NAME \
- if (state == other) { \
- if (nAtts < attsMax) { \
- atts[nAtts].name = ptr; \
- atts[nAtts].normalized = 1; \
- } \
- state = inName; \
- }
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_NONASCII:
- case BT_NMSTRT:
- case BT_HEX:
- START_NAME
- break;
-#undef START_NAME
- case BT_QUOT:
- if (state != inValue) {
- if (nAtts < attsMax)
- atts[nAtts].valuePtr = ptr + MINBPC(enc);
- state = inValue;
- open = BT_QUOT;
- }
- else if (open == BT_QUOT) {
- state = other;
- if (nAtts < attsMax)
- atts[nAtts].valueEnd = ptr;
- nAtts++;
- }
- break;
- case BT_APOS:
- if (state != inValue) {
- if (nAtts < attsMax)
- atts[nAtts].valuePtr = ptr + MINBPC(enc);
- state = inValue;
- open = BT_APOS;
- }
- else if (open == BT_APOS) {
- state = other;
- if (nAtts < attsMax)
- atts[nAtts].valueEnd = ptr;
- nAtts++;
- }
- break;
- case BT_AMP:
- if (nAtts < attsMax)
- atts[nAtts].normalized = 0;
- break;
- case BT_S:
- if (state == inName)
- state = other;
- else if (state == inValue
- && nAtts < attsMax
- && atts[nAtts].normalized
- && (ptr == atts[nAtts].valuePtr
- || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
- || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
- || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
- atts[nAtts].normalized = 0;
- break;
- case BT_CR: case BT_LF:
- /* This case ensures that the first attribute name is counted
- Apart from that we could just change state on the quote. */
- if (state == inName)
- state = other;
- else if (state == inValue && nAtts < attsMax)
- atts[nAtts].normalized = 0;
- break;
- case BT_GT:
- case BT_SOL:
- if (state != inValue)
- return nAtts;
- break;
- default:
- break;
- }
- }
- /* not reached */
-}
-
-static int PTRFASTCALL
-PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
-{
- int result = 0;
- /* skip &# */
- ptr += 2*MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
- for (ptr += MINBPC(enc);
- !CHAR_MATCHES(enc, ptr, ASCII_SEMI);
- ptr += MINBPC(enc)) {
- int c = BYTE_TO_ASCII(enc, ptr);
- switch (c) {
- case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4:
- case ASCII_5: case ASCII_6: case ASCII_7: case ASCII_8: case ASCII_9:
- result <<= 4;
- result |= (c - ASCII_0);
- break;
- case ASCII_A: case ASCII_B: case ASCII_C:
- case ASCII_D: case ASCII_E: case ASCII_F:
- result <<= 4;
- result += 10 + (c - ASCII_A);
- break;
- case ASCII_a: case ASCII_b: case ASCII_c:
- case ASCII_d: case ASCII_e: case ASCII_f:
- result <<= 4;
- result += 10 + (c - ASCII_a);
- break;
- }
- if (result >= 0x110000)
- return -1;
- }
- }
- else {
- for (; !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
- int c = BYTE_TO_ASCII(enc, ptr);
- result *= 10;
- result += (c - ASCII_0);
- if (result >= 0x110000)
- return -1;
- }
- }
- return checkCharRefNumber(result);
-}
-
-static int PTRCALL
-PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr,
- const char *end)
-{
- switch ((end - ptr)/MINBPC(enc)) {
- case 2:
- if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_l:
- return ASCII_LT;
- case ASCII_g:
- return ASCII_GT;
- }
- }
- break;
- case 3:
- if (CHAR_MATCHES(enc, ptr, ASCII_a)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_m)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_p))
- return ASCII_AMP;
- }
- }
- break;
- case 4:
- switch (BYTE_TO_ASCII(enc, ptr)) {
- case ASCII_q:
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_u)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_t))
- return ASCII_QUOT;
- }
- }
- break;
- case ASCII_a:
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_p)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
- ptr += MINBPC(enc);
- if (CHAR_MATCHES(enc, ptr, ASCII_s))
- return ASCII_APOS;
- }
- }
- break;
- }
- }
- return 0;
-}
-
-static int PTRCALL
-PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
-{
- for (;;) {
- switch (BYTE_TYPE(enc, ptr1)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- if (*ptr1++ != *ptr2++) \
- return 0;
- LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2)
-#undef LEAD_CASE
- /* fall through */
- if (*ptr1++ != *ptr2++)
- return 0;
- break;
- case BT_NONASCII:
- case BT_NMSTRT:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- case BT_HEX:
- case BT_DIGIT:
- case BT_NAME:
- case BT_MINUS:
- if (*ptr2++ != *ptr1++)
- return 0;
- if (MINBPC(enc) > 1) {
- if (*ptr2++ != *ptr1++)
- return 0;
- if (MINBPC(enc) > 2) {
- if (*ptr2++ != *ptr1++)
- return 0;
- if (MINBPC(enc) > 3) {
- if (*ptr2++ != *ptr1++)
- return 0;
- }
- }
- }
- break;
- default:
- if (MINBPC(enc) == 1 && *ptr1 == *ptr2)
- return 1;
- switch (BYTE_TYPE(enc, ptr2)) {
- case BT_LEAD2:
- case BT_LEAD3:
- case BT_LEAD4:
- case BT_NONASCII:
- case BT_NMSTRT:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- case BT_HEX:
- case BT_DIGIT:
- case BT_NAME:
- case BT_MINUS:
- return 0;
- default:
- return 1;
- }
- }
- }
- /* not reached */
-}
-
-static int PTRCALL
-PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
- const char *end1, const char *ptr2)
-{
- for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
- if (ptr1 == end1)
- return 0;
- if (!CHAR_MATCHES(enc, ptr1, *ptr2))
- return 0;
- }
- return ptr1 == end1;
-}
-
-static int PTRFASTCALL
-PREFIX(nameLength)(const ENCODING *enc, const char *ptr)
-{
- const char *start = ptr;
- for (;;) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: ptr += n; break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_NONASCII:
- case BT_NMSTRT:
-#ifdef XML_NS
- case BT_COLON:
-#endif
- case BT_HEX:
- case BT_DIGIT:
- case BT_NAME:
- case BT_MINUS:
- ptr += MINBPC(enc);
- break;
- default:
- return (int)(ptr - start);
- }
- }
-}
-
-static const char * PTRFASTCALL
-PREFIX(skipS)(const ENCODING *enc, const char *ptr)
-{
- for (;;) {
- switch (BYTE_TYPE(enc, ptr)) {
- case BT_LF:
- case BT_CR:
- case BT_S:
- ptr += MINBPC(enc);
- break;
- default:
- return ptr;
- }
- }
-}
-
-static void PTRCALL
-PREFIX(updatePosition)(const ENCODING *enc,
- const char *ptr,
- const char *end,
- POSITION *pos)
-{
- while (ptr != end) {
- switch (BYTE_TYPE(enc, ptr)) {
-#define LEAD_CASE(n) \
- case BT_LEAD ## n: \
- ptr += n; \
- break;
- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
-#undef LEAD_CASE
- case BT_LF:
- pos->columnNumber = (XML_Size)-1;
- pos->lineNumber++;
- ptr += MINBPC(enc);
- break;
- case BT_CR:
- pos->lineNumber++;
- ptr += MINBPC(enc);
- if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF)
- ptr += MINBPC(enc);
- pos->columnNumber = (XML_Size)-1;
- break;
- default:
- ptr += MINBPC(enc);
- break;
- }
- pos->columnNumber++;
- }
-}
-
-#undef DO_LEAD_CASE
-#undef MULTIBYTE_CASES
-#undef INVALID_CASES
-#undef CHECK_NAME_CASE
-#undef CHECK_NAME_CASES
-#undef CHECK_NMSTRT_CASE
-#undef CHECK_NMSTRT_CASES
-
-#endif /* XML_TOK_IMPL_C */
diff --git a/3rdParty/Expat/src/xmltok_impl.h b/3rdParty/Expat/src/xmltok_impl.h
deleted file mode 100755
index da0ea60..0000000
--- a/3rdParty/Expat/src/xmltok_impl.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
-See the file COPYING for copying permission.
-*/
-
-enum {
- BT_NONXML,
- BT_MALFORM,
- BT_LT,
- BT_AMP,
- BT_RSQB,
- BT_LEAD2,
- BT_LEAD3,
- BT_LEAD4,
- BT_TRAIL,
- BT_CR,
- BT_LF,
- BT_GT,
- BT_QUOT,
- BT_APOS,
- BT_EQUALS,
- BT_QUEST,
- BT_EXCL,
- BT_SOL,
- BT_SEMI,
- BT_NUM,
- BT_LSQB,
- BT_S,
- BT_NMSTRT,
- BT_COLON,
- BT_HEX,
- BT_DIGIT,
- BT_NAME,
- BT_MINUS,
- BT_OTHER, /* known not to be a name or name start character */
- BT_NONASCII, /* might be a name or name start character */
- BT_PERCNT,
- BT_LPAR,
- BT_RPAR,
- BT_AST,
- BT_PLUS,
- BT_COMMA,
- BT_VERBAR
-};
-
-#include <stddef.h>
diff --git a/3rdParty/Expat/src/xmltok_ns.c b/3rdParty/Expat/src/xmltok_ns.c
deleted file mode 100755
index c3b88fd..0000000
--- a/3rdParty/Expat/src/xmltok_ns.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
- See the file COPYING for copying permission.
-*/
-
-/* This file is included! */
-#ifdef XML_TOK_NS_C
-
-const ENCODING *
-NS(XmlGetUtf8InternalEncoding)(void)
-{
- return &ns(internal_utf8_encoding).enc;
-}
-
-const ENCODING *
-NS(XmlGetUtf16InternalEncoding)(void)
-{
-#if BYTEORDER == 1234
- return &ns(internal_little2_encoding).enc;
-#elif BYTEORDER == 4321
- return &ns(internal_big2_encoding).enc;
-#else
- const short n = 1;
- return (*(const char *)&n
- ? &ns(internal_little2_encoding).enc
- : &ns(internal_big2_encoding).enc);
-#endif
-}
-
-static const ENCODING * const NS(encodings)[] = {
- &ns(latin1_encoding).enc,
- &ns(ascii_encoding).enc,
- &ns(utf8_encoding).enc,
- &ns(big2_encoding).enc,
- &ns(big2_encoding).enc,
- &ns(little2_encoding).enc,
- &ns(utf8_encoding).enc /* NO_ENC */
-};
-
-static int PTRCALL
-NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- return initScan(NS(encodings), (const INIT_ENCODING *)enc,
- XML_PROLOG_STATE, ptr, end, nextTokPtr);
-}
-
-static int PTRCALL
-NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
- const char **nextTokPtr)
-{
- return initScan(NS(encodings), (const INIT_ENCODING *)enc,
- XML_CONTENT_STATE, ptr, end, nextTokPtr);
-}
-
-int
-NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr,
- const char *name)
-{
- int i = getEncodingIndex(name);
- if (i == UNKNOWN_ENC)
- return 0;
- SET_INIT_ENC_INDEX(p, i);
- p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
- p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
- p->initEnc.updatePosition = initUpdatePosition;
- p->encPtr = encPtr;
- *encPtr = &(p->initEnc);
- return 1;
-}
-
-static const ENCODING *
-NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
-{
-#define ENCODING_MAX 128
- char buf[ENCODING_MAX];
- char *p = buf;
- int i;
- XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
- if (ptr != end)
- return 0;
- *p = 0;
- if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
- return enc;
- i = getEncodingIndex(buf);
- if (i == UNKNOWN_ENC)
- return 0;
- return NS(encodings)[i];
-}
-
-int
-NS(XmlParseXmlDecl)(int isGeneralTextEntity,
- const ENCODING *enc,
- const char *ptr,
- const char *end,
- const char **badPtr,
- const char **versionPtr,
- const char **versionEndPtr,
- const char **encodingName,
- const ENCODING **encoding,
- int *standalone)
-{
- return doParseXmlDecl(NS(findEncoding),
- isGeneralTextEntity,
- enc,
- ptr,
- end,
- badPtr,
- versionPtr,
- versionEndPtr,
- encodingName,
- encoding,
- standalone);
-}
-
-#endif /* XML_TOK_NS_C */
diff --git a/3rdParty/LCov b/3rdParty/LCov
new file mode 160000
+Subproject b851fd65b7ca12fcdfa824358612cf1138f5b73
diff --git a/3rdParty/LCov/gendesc b/3rdParty/LCov/gendesc
deleted file mode 100755
index e7a8113..0000000
--- a/3rdParty/LCov/gendesc
+++ /dev/null
@@ -1,223 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright (c) International Business Machines Corp., 2002
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or (at
-# your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-#
-# gendesc
-#
-# This script creates a description file as understood by genhtml.
-# Input file format:
-#
-# For each test case:
-# <test name><optional whitespace>
-# <at least one whitespace character (blank/tab)><test description>
-#
-# Actual description may consist of several lines. By default, output is
-# written to stdout. Test names consist of alphanumeric characters
-# including _ and -.
-#
-#
-# History:
-# 2002-09-02: created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>
-#
-
-use strict;
-use File::Basename;
-use Getopt::Long;
-
-
-# Constants
-our $lcov_version = "LCOV version 1.7";
-our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
-our $tool_name = basename($0);
-
-
-# Prototypes
-sub print_usage(*);
-sub gen_desc();
-sub warn_handler($);
-sub die_handler($);
-
-
-# Global variables
-our $help;
-our $version;
-our $output_filename;
-our $input_filename;
-
-
-#
-# Code entry point
-#
-
-$SIG{__WARN__} = \&warn_handler;
-$SIG{__DIE__} = \&die_handler;
-
-# Parse command line options
-if (!GetOptions("output-filename=s" => \$output_filename,
- "version" =>\$version,
- "help|?" => \$help
- ))
-{
- print(STDERR "Use $tool_name --help to get usage information\n");
- exit(1);
-}
-
-$input_filename = $ARGV[0];
-
-# Check for help option
-if ($help)
-{
- print_usage(*STDOUT);
- exit(0);
-}
-
-# Check for version option
-if ($version)
-{
- print("$tool_name: $lcov_version\n");
- exit(0);
-}
-
-
-# Check for input filename
-if (!$input_filename)
-{
- die("No input filename specified\n".
- "Use $tool_name --help to get usage information\n");
-}
-
-# Do something
-gen_desc();
-
-
-#
-# print_usage(handle)
-#
-# Write out command line usage information to given filehandle.
-#
-
-sub print_usage(*)
-{
- local *HANDLE = $_[0];
-
- print(HANDLE <<END_OF_USAGE)
-Usage: $tool_name [OPTIONS] INPUTFILE
-
-Convert a test case description file into a format as understood by genhtml.
-
- -h, --help Print this help, then exit
- -v, --version Print version number, then exit
- -o, --output-filename FILENAME Write description to FILENAME
-
-For more information see: $lcov_url
-END_OF_USAGE
- ;
-}
-
-
-#
-# gen_desc()
-#
-# Read text file INPUT_FILENAME and convert the contained description to a
-# format as understood by genhtml, i.e.
-#
-# TN:<test name>
-# TD:<test description>
-#
-# If defined, write output to OUTPUT_FILENAME, otherwise to stdout.
-#
-# Die on error.
-#
-
-sub gen_desc()
-{
- local *INPUT_HANDLE;
- local *OUTPUT_HANDLE;
- my $empty_line = "ignore";
-
- open(INPUT_HANDLE, $input_filename)
- or die("ERROR: cannot open $input_filename!\n");
-
- # Open output file for writing
- if ($output_filename)
- {
- open(OUTPUT_HANDLE, ">$output_filename")
- or die("ERROR: cannot create $output_filename!\n");
- }
- else
- {
- *OUTPUT_HANDLE = *STDOUT;
- }
-
- # Process all lines in input file
- while (<INPUT_HANDLE>)
- {
- chomp($_);
-
- if (/^\s*(\w[\w-]*)(\s*)$/)
- {
- # Matched test name
- # Name starts with alphanum or _, continues with
- # alphanum, _ or -
- print(OUTPUT_HANDLE "TN: $1\n");
- $empty_line = "ignore";
- }
- elsif (/^(\s+)(\S.*?)\s*$/)
- {
- # Matched test description
- if ($empty_line eq "insert")
- {
- # Write preserved empty line
- print(OUTPUT_HANDLE "TD: \n");
- }
- print(OUTPUT_HANDLE "TD: $2\n");
- $empty_line = "observe";
- }
- elsif (/^\s*$/)
- {
- # Matched empty line to preserve paragraph separation
- # inside description text
- if ($empty_line eq "observe")
- {
- $empty_line = "insert";
- }
- }
- }
-
- # Close output file if defined
- if ($output_filename)
- {
- close(OUTPUT_HANDLE);
- }
-
- close(INPUT_HANDLE);
-}
-
-sub warn_handler($)
-{
- my ($msg) = @_;
-
- warn("$tool_name: $msg");
-}
-
-sub die_handler($)
-{
- my ($msg) = @_;
-
- die("$tool_name: $msg");
-}
diff --git a/3rdParty/LCov/genhtml b/3rdParty/LCov/genhtml
deleted file mode 100755
index 497363b..0000000
--- a/3rdParty/LCov/genhtml
+++ /dev/null
@@ -1,4819 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright (c) International Business Machines Corp., 2002
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or (at
-# your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-#
-# genhtml
-#
-# This script generates HTML output from .info files as created by the
-# geninfo script. Call it with --help and refer to the genhtml man page
-# to get information on usage and available options.
-#
-#
-# History:
-# 2002-08-23 created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>
-# IBM Lab Boeblingen
-# based on code by Manoj Iyer <manjo@mail.utexas.edu> and
-# Megan Bock <mbock@us.ibm.com>
-# IBM Austin
-# 2002-08-27 / Peter Oberparleiter: implemented frame view
-# 2002-08-29 / Peter Oberparleiter: implemented test description filtering
-# so that by default only descriptions for test cases which
-# actually hit some source lines are kept
-# 2002-09-05 / Peter Oberparleiter: implemented --no-sourceview
-# 2002-09-05 / Mike Kobler: One of my source file paths includes a "+" in
-# the directory name. I found that genhtml.pl died when it
-# encountered it. I was able to fix the problem by modifying
-# the string with the escape character before parsing it.
-# 2002-10-26 / Peter Oberparleiter: implemented --num-spaces
-# 2003-04-07 / Peter Oberparleiter: fixed bug which resulted in an error
-# when trying to combine .info files containing data without
-# a test name
-# 2003-04-10 / Peter Oberparleiter: extended fix by Mike to also cover
-# other special characters
-# 2003-04-30 / Peter Oberparleiter: made info write to STDERR, not STDOUT
-# 2003-07-10 / Peter Oberparleiter: added line checksum support
-# 2004-08-09 / Peter Oberparleiter: added configuration file support
-# 2005-03-04 / Cal Pierog: added legend to HTML output, fixed coloring of
-# "good coverage" background
-# 2006-03-18 / Marcus Boerger: added --custom-intro, --custom-outro and
-# overwrite --no-prefix if --prefix is present
-# 2006-03-20 / Peter Oberparleiter: changes to custom_* function (rename
-# to html_prolog/_epilog, minor modifications to implementation),
-# changed prefix/noprefix handling to be consistent with current
-# logic
-# 2006-03-20 / Peter Oberparleiter: added --html-extension option
-# 2008-07-14 / Tom Zoerner: added --function-coverage command line option;
-# added function table to source file page
-# 2008-08-13 / Peter Oberparleiter: modified function coverage
-# implementation (now enabled per default),
-# introduced sorting option (enabled per default)
-#
-
-use strict;
-use File::Basename;
-use Getopt::Long;
-use Digest::MD5 qw(md5_base64);
-
-
-# Global constants
-our $title = "LCOV - code coverage report";
-our $lcov_version = "LCOV version 1.7";
-our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
-our $tool_name = basename($0);
-
-# Specify coverage rate limits (in %) for classifying file entries
-# HI: $hi_limit <= rate <= 100 graph color: green
-# MED: $med_limit <= rate < $hi_limit graph color: orange
-# LO: 0 <= rate < $med_limit graph color: red
-
-# For line coverage
-our $hi_limit = 50;
-our $med_limit = 15;
-
-# For function coverage
-our $fn_hi_limit = 90;
-our $fn_med_limit = 75;
-
-# Width of overview image
-our $overview_width = 80;
-
-# Resolution of overview navigation: this number specifies the maximum
-# difference in lines between the position a user selected from the overview
-# and the position the source code window is scrolled to.
-our $nav_resolution = 4;
-
-# Clicking a line in the overview image should show the source code view at
-# a position a bit further up so that the requested line is not the first
-# line in the window. This number specifies that offset in lines.
-our $nav_offset = 10;
-
-# Clicking on a function name should show the source code at a position a
-# few lines before the first line of code of that function. This number
-# specifies that offset in lines.
-our $func_offset = 2;
-
-our $overview_title = "directory";
-
-# Data related prototypes
-sub print_usage(*);
-sub gen_html();
-sub html_create($$);
-sub process_dir($);
-sub process_file($$$);
-sub info(@);
-sub read_info_file($);
-sub get_info_entry($);
-sub set_info_entry($$$$$$$;$$$$);
-sub get_prefix(@);
-sub shorten_prefix($);
-sub get_dir_list(@);
-sub get_relative_base_path($);
-sub read_testfile($);
-sub get_date_string();
-sub split_filename($);
-sub create_sub_dir($);
-sub subtract_counts($$);
-sub add_counts($$);
-sub apply_baseline($$);
-sub remove_unused_descriptions();
-sub get_found_and_hit($);
-sub get_affecting_tests($$);
-sub combine_info_files($$);
-sub merge_checksums($$$);
-sub combine_info_entries($$$);
-sub apply_prefix($$);
-sub system_no_output($@);
-sub read_config($);
-sub apply_config($);
-sub get_html_prolog($);
-sub get_html_epilog($);
-
-
-# HTML related prototypes
-sub escape_html($);
-sub get_bar_graph_code($$$);
-
-sub write_png_files();
-sub write_htaccess_file();
-sub write_css_file();
-sub write_description_file($$$$$);
-sub write_function_rable(*$$$);
-
-sub write_html(*$);
-sub write_html_prolog(*$$);
-sub write_html_epilog(*$;$);
-
-sub write_header(*$$$$$$$$);
-sub write_header_prolog(*$);
-sub write_header_line(*$@);
-sub write_header_epilog(*$);
-
-sub write_file_table(*$$$$$$);
-sub write_file_table_prolog(*$$$);
-sub write_file_table_entry(*$$$$$$$);
-sub write_file_table_detail_heading(*$$$);
-sub write_file_table_detail_entry(*$$$$$);
-sub write_file_table_epilog(*);
-
-sub write_test_table_prolog(*$);
-sub write_test_table_entry(*$$);
-sub write_test_table_epilog(*);
-
-sub write_source($$$$$$);
-sub write_source_prolog(*);
-sub write_source_line(*$$$$$);
-sub write_source_epilog(*);
-
-sub write_frameset(*$$$);
-sub write_overview_line(*$$$);
-sub write_overview(*$$$$);
-
-# External prototype (defined in genpng)
-sub gen_png($$$@);
-
-
-# Global variables & initialization
-our %info_data; # Hash containing all data from .info file
-our $dir_prefix; # Prefix to remove from all sub directories
-our %test_description; # Hash containing test descriptions if available
-our $date = get_date_string();
-
-our @info_filenames; # List of .info files to use as data source
-our $test_title; # Title for output as written to each page header
-our $output_directory; # Name of directory in which to store output
-our $base_filename; # Optional name of file containing baseline data
-our $desc_filename; # Name of file containing test descriptions
-our $css_filename; # Optional name of external stylesheet file to use
-our $quiet; # If set, suppress information messages
-our $help; # Help option flag
-our $version; # Version option flag
-our $show_details; # If set, generate detailed directory view
-our $no_prefix; # If set, do not remove filename prefix
-our $func_coverage = 1; # If set, generate function coverage statistics
-our $no_func_coverage; # Disable func_coverage
-our $sort = 1; # If set, provide directory listings with sorted entries
-our $no_sort; # Disable sort
-our $frames; # If set, use frames for source code view
-our $keep_descriptions; # If set, do not remove unused test case descriptions
-our $no_sourceview; # If set, do not create a source code view for each file
-our $highlight; # If set, highlight lines covered by converted data only
-our $legend; # If set, include legend in output
-our $tab_size = 8; # Number of spaces to use in place of tab
-our $config; # Configuration file contents
-our $html_prolog_file; # Custom HTML prolog file (up to and including <body>)
-our $html_epilog_file; # Custom HTML epilog file (from </body> onwards)
-our $html_prolog; # Actual HTML prolog
-our $html_epilog; # Actual HTML epilog
-our $html_ext = "html"; # Extension for generated HTML files
-our $html_gzip = 0; # Compress with gzip
-our @fileview_sortlist;
-our @fileview_sortname = ("", "-sort-l", "-sort-f");
-our @funcview_sortlist;
-our @rate_name = ("Lo", "Med", "Hi");
-our @rate_png = ("ruby.png", "amber.png", "emerald.png");
-
-our $cwd = `pwd`; # Current working directory
-chomp($cwd);
-our $tool_dir = dirname($0); # Directory where genhtml tool is installed
-
-
-#
-# Code entry point
-#
-
-$SIG{__WARN__} = \&warn_handler;
-$SIG{__DIE__} = \&die_handler;
-
-# Add current working directory if $tool_dir is not already an absolute path
-if (! ($tool_dir =~ /^\/(.*)$/))
-{
- $tool_dir = "$cwd/$tool_dir";
-}
-
-# Read configuration file if available
-if (-r $ENV{"HOME"}."/.lcovrc")
-{
- $config = read_config($ENV{"HOME"}."/.lcovrc");
-}
-elsif (-r "/etc/lcovrc")
-{
- $config = read_config("/etc/lcovrc");
-}
-
-if ($config)
-{
- # Copy configuration file values to variables
- apply_config({
- "genhtml_css_file" => \$css_filename,
- "genhtml_hi_limit" => \$hi_limit,
- "genhtml_med_limit" => \$med_limit,
- "genhtml_overview_width" => \$overview_width,
- "genhtml_nav_resolution" => \$nav_resolution,
- "genhtml_nav_offset" => \$nav_offset,
- "genhtml_keep_descriptions" => \$keep_descriptions,
- "genhtml_no_prefix" => \$no_prefix,
- "genhtml_no_source" => \$no_sourceview,
- "genhtml_num_spaces" => \$tab_size,
- "genhtml_highlight" => \$highlight,
- "genhtml_legend" => \$legend,
- "genhtml_html_prolog" => \$html_prolog_file,
- "genhtml_html_epilog" => \$html_epilog_file,
- "genhtml_html_extension" => \$html_ext,
- "genhtml_html_gzip" => \$html_gzip,
- "genhtml_function_hi_limit" => \$fn_hi_limit,
- "genhtml_function_med_limit" => \$fn_med_limit,
- "genhtml_function_coverage" => \$func_coverage,
- "genhtml_sort" => \$sort,
- });
-}
-
-# Parse command line options
-if (!GetOptions("output-directory=s" => \$output_directory,
- "title=s" => \$test_title,
- "description-file=s" => \$desc_filename,
- "keep-descriptions" => \$keep_descriptions,
- "css-file=s" => \$css_filename,
- "baseline-file=s" => \$base_filename,
- "prefix=s" => \$dir_prefix,
- "num-spaces=i" => \$tab_size,
- "no-prefix" => \$no_prefix,
- "no-sourceview" => \$no_sourceview,
- "show-details" => \$show_details,
- "frames" => \$frames,
- "highlight" => \$highlight,
- "legend" => \$legend,
- "quiet" => \$quiet,
- "help|h|?" => \$help,
- "version" => \$version,
- "html-prolog=s" => \$html_prolog_file,
- "html-epilog=s" => \$html_epilog_file,
- "html-extension=s" => \$html_ext,
- "html-gzip" => \$html_gzip,
- "function-coverage" => \$func_coverage,
- "no-function-coverage" => \$no_func_coverage,
- "sort" => \$sort,
- "no-sort" => \$no_sort,
- ))
-{
- print(STDERR "Use $tool_name --help to get usage information\n");
- exit(1);
-} else {
- # Merge options
- if ($no_func_coverage) {
- $func_coverage = 0;
- }
-
- # Merge sort options
- if ($no_sort) {
- $sort = 0;
- }
-}
-
-@info_filenames = @ARGV;
-
-# Check for help option
-if ($help)
-{
- print_usage(*STDOUT);
- exit(0);
-}
-
-# Check for version option
-if ($version)
-{
- print("$tool_name: $lcov_version\n");
- exit(0);
-}
-
-# Check for info filename
-if (!@info_filenames)
-{
- die("No filename specified\n".
- "Use $tool_name --help to get usage information\n");
-}
-
-# Generate a title if none is specified
-if (!$test_title)
-{
- if (scalar(@info_filenames) == 1)
- {
- # Only one filename specified, use it as title
- $test_title = basename($info_filenames[0]);
- }
- else
- {
- # More than one filename specified, used default title
- $test_title = "unnamed";
- }
-}
-
-# Make sure css_filename is an absolute path (in case we're changing
-# directories)
-if ($css_filename)
-{
- if (!($css_filename =~ /^\/(.*)$/))
- {
- $css_filename = $cwd."/".$css_filename;
- }
-}
-
-# Make sure tab_size is within valid range
-if ($tab_size < 1)
-{
- print(STDERR "ERROR: invalid number of spaces specified: ".
- "$tab_size!\n");
- exit(1);
-}
-
-# Get HTML prolog and epilog
-$html_prolog = get_html_prolog($html_prolog_file);
-$html_epilog = get_html_epilog($html_epilog_file);
-
-# Issue a warning if --no-sourceview is enabled together with --frames
-if ($no_sourceview && defined($frames))
-{
- warn("WARNING: option --frames disabled because --no-sourceview ".
- "was specified!\n");
- $frames = undef;
-}
-
-# Issue a warning if --no-prefix is enabled together with --prefix
-if ($no_prefix && defined($dir_prefix))
-{
- warn("WARNING: option --prefix disabled because --no-prefix was ".
- "specified!\n");
- $dir_prefix = undef;
-}
-
-if ($sort) {
- @funcview_sortlist = (0, 1);
- if ($func_coverage) {
- @fileview_sortlist = (0, 1, 2);
- } else {
- @fileview_sortlist = (0, 1);
- }
-} else {
- @fileview_sortlist = (0);
- @funcview_sortlist = (0);
-}
-
-if ($frames)
-{
- # Include genpng code needed for overview image generation
- do("$tool_dir/genpng");
-}
-
-# Make sure output_directory exists, create it if necessary
-if ($output_directory)
-{
- stat($output_directory);
-
- if (! -e _)
- {
- system("mkdir", "-p", $output_directory)
- and die("ERROR: cannot create directory $_!\n");
- }
-}
-
-# Do something
-gen_html();
-
-exit(0);
-
-
-
-#
-# print_usage(handle)
-#
-# Print usage information.
-#
-
-sub print_usage(*)
-{
- local *HANDLE = $_[0];
-
- print(HANDLE <<END_OF_USAGE);
-Usage: $tool_name [OPTIONS] INFOFILE(S)
-
-Create HTML output for coverage data found in INFOFILE. Note that INFOFILE
-may also be a list of filenames.
-
-Misc:
- -h, --help Print this help, then exit
- -v, --version Print version number, then exit
- -q, --quiet Do not print progress messages
-
-Operation:
- -o, --output-directory OUTDIR Write HTML output to OUTDIR
- -s, --show-details Generate detailed directory view
- -d, --description-file DESCFILE Read test case descriptions from DESCFILE
- -k, --keep-descriptions Do not remove unused test descriptions
- -b, --baseline-file BASEFILE Use BASEFILE as baseline file
- -p, --prefix PREFIX Remove PREFIX from all directory names
- --no-prefix Do not remove prefix from directory names
- --(no-)function-coverage Enable (disable) function coverage display
-
-HTML output:
- -f, --frames Use HTML frames for source code view
- -t, --title TITLE Display TITLE in header of all pages
- -c, --css-file CSSFILE Use external style sheet file CSSFILE
- --no-source Do not create source code view
- --num-spaces NUM Replace tabs with NUM spaces in source view
- --highlight Highlight lines with converted-only data
- --legend Include color legend in HTML output
- --html-prolog FILE Use FILE as HTML prolog for generated pages
- --html-epilog FILE Use FILE as HTML epilog for generated pages
- --html-extension EXT Use EXT as filename extension for pages
- --html-gzip Use gzip to compress HTML
- --(no-)sort Enable (disable) sorted coverage views
-
-For more information see: $lcov_url
-END_OF_USAGE
- ;
-}
-
-
-#
-# get_rate(found, hit)
-#
-# Return a relative value for the specified found&hit values
-# which is used for sorting the corresponding entries in a
-# file list.
-#
-
-sub get_rate($$)
-{
- my ($found, $hit) = @_;
-
- if ($found == 0) {
- return 10000;
- }
- return int($hit * 1000 / $found) * 10 + 2 - (1 / $found);
-}
-
-
-#
-# gen_html()
-#
-# Generate a set of HTML pages from contents of .info file INFO_FILENAME.
-# Files will be written to the current directory. If provided, test case
-# descriptions will be read from .tests file TEST_FILENAME and included
-# in ouput.
-#
-# Die on error.
-#
-
-sub gen_html()
-{
- local *HTML_HANDLE;
- my %overview;
- my %base_data;
- my $lines_found;
- my $lines_hit;
- my $fn_found;
- my $fn_hit;
- my $overall_found = 0;
- my $overall_hit = 0;
- my $total_fn_found = 0;
- my $total_fn_hit = 0;
- my $dir_name;
- my $link_name;
- my @dir_list;
- my %new_info;
-
- # Read in all specified .info files
- foreach (@info_filenames)
- {
- %new_info = %{read_info_file($_)};
-
- # Combine %new_info with %info_data
- %info_data = %{combine_info_files(\%info_data, \%new_info)};
- }
-
- info("Found %d entries.\n", scalar(keys(%info_data)));
-
- # Read and apply baseline data if specified
- if ($base_filename)
- {
- # Read baseline file
- info("Reading baseline file $base_filename\n");
- %base_data = %{read_info_file($base_filename)};
- info("Found %d entries.\n", scalar(keys(%base_data)));
-
- # Apply baseline
- info("Subtracting baseline data.\n");
- %info_data = %{apply_baseline(\%info_data, \%base_data)};
- }
-
- @dir_list = get_dir_list(keys(%info_data));
-
- if ($no_prefix)
- {
- # User requested that we leave filenames alone
- info("User asked not to remove filename prefix\n");
- }
- elsif (!defined($dir_prefix))
- {
- # Get prefix common to most directories in list
- $dir_prefix = get_prefix(@dir_list);
-
- if ($dir_prefix)
- {
- info("Found common filename prefix \"$dir_prefix\"\n");
- }
- else
- {
- info("No common filename prefix found!\n");
- $no_prefix=1;
- }
- }
- else
- {
- info("Using user-specified filename prefix \"".
- "$dir_prefix\"\n");
- }
-
- # Read in test description file if specified
- if ($desc_filename)
- {
- info("Reading test description file $desc_filename\n");
- %test_description = %{read_testfile($desc_filename)};
-
- # Remove test descriptions which are not referenced
- # from %info_data if user didn't tell us otherwise
- if (!$keep_descriptions)
- {
- remove_unused_descriptions();
- }
- }
-
- # Change to output directory if specified
- if ($output_directory)
- {
- chdir($output_directory)
- or die("ERROR: cannot change to directory ".
- "$output_directory!\n");
- }
-
- info("Writing .css and .png files.\n");
- write_css_file();
- write_png_files();
-
- if ($html_gzip)
- {
- info("Writing .htaccess file.\n");
- write_htaccess_file();
- }
-
- info("Generating output.\n");
-
- # Process each subdirectory and collect overview information
- foreach $dir_name (@dir_list)
- {
- ($lines_found, $lines_hit, $fn_found, $fn_hit)
- = process_dir($dir_name);
-
- # Remove prefix if applicable
- if (!$no_prefix && $dir_prefix)
- {
- # Match directory names beginning with $dir_prefix
- $dir_name = apply_prefix($dir_name, $dir_prefix);
- }
-
- # Generate name for directory overview HTML page
- if ($dir_name =~ /^\/(.*)$/)
- {
- $link_name = substr($dir_name, 1)."/index.$html_ext";
- }
- else
- {
- $link_name = $dir_name."/index.$html_ext";
- }
-
- $overview{$dir_name} = [$lines_found, $lines_hit, $fn_found,
- $fn_hit, $link_name,
- get_rate($lines_found, $lines_hit),
- get_rate($fn_found, $fn_hit)];
- $overall_found += $lines_found;
- $overall_hit += $lines_hit;
- $total_fn_found += $fn_found;
- $total_fn_hit += $fn_hit;
- }
-
- # Generate overview page
- info("Writing directory view page.\n");
-
- # Create sorted pages
- foreach (@fileview_sortlist) {
- write_dir_page($fileview_sortname[$_], ".", "", $test_title,
- undef, $overall_found, $overall_hit,
- $total_fn_found, $total_fn_hit, \%overview,
- {}, {}, 0, $_);
- }
-
- # Check if there are any test case descriptions to write out
- if (%test_description)
- {
- info("Writing test case description file.\n");
- write_description_file( \%test_description,
- $overall_found, $overall_hit,
- $total_fn_found, $total_fn_hit);
- }
-
- chdir($cwd);
-
- info("Overall coverage rate:\n");
-
- if ($overall_found == 0)
- {
- info(" lines......: no data found\n");
- return;
- }
- info(" lines......: %.1f%% (%d of %d lines)\n",
- $overall_hit * 100 / $overall_found, $overall_hit,
- $overall_found,);
-
- if ($func_coverage)
- {
- if ($total_fn_found == 0)
- {
- info(" functions..: no data found\n");
- }
- else
- {
- info(" functions..: %.1f%% (%d of %d functions)\n",
- $total_fn_hit * 100 / $total_fn_found,
- $total_fn_hit, $total_fn_found);
-
- }
- }
-
-}
-
-#
-# html_create(handle, filename)
-#
-
-sub html_create($$)
-{
- my $handle = $_[0];
- my $filename = $_[1];
-
- if ($html_gzip)
- {
- open($handle, "|gzip -c >$filename")
- or die("ERROR: cannot open $filename for writing ".
- "(gzip)!\n");
- }
- else
- {
- open($handle, ">$filename")
- or die("ERROR: cannot open $filename for writing!\n");
- }
-}
-
-sub write_dir_page($$$$$$$$$$$$$$)
-{
- my ($name, $rel_dir, $base_dir, $title, $trunc_dir, $overall_found,
- $overall_hit, $total_fn_found, $total_fn_hit, $overview,
- $testhash, $testfnchash, $view_type, $sort_type) = @_;
-
- # Generate directory overview page including details
- html_create(*HTML_HANDLE, "$rel_dir/index$name.$html_ext");
- if (!defined($trunc_dir)) {
- $trunc_dir = "";
- }
- write_html_prolog(*HTML_HANDLE, $base_dir, "LCOV - $title$trunc_dir");
- write_header(*HTML_HANDLE, $view_type, $trunc_dir, $rel_dir,
- $overall_found, $overall_hit, $total_fn_found,
- $total_fn_hit, $sort_type);
- write_file_table(*HTML_HANDLE, $base_dir, $overview, $testhash,
- $testfnchash, $view_type, $sort_type);
- write_html_epilog(*HTML_HANDLE, $base_dir);
- close(*HTML_HANDLE);
-}
-
-
-#
-# process_dir(dir_name)
-#
-
-sub process_dir($)
-{
- my $abs_dir = $_[0];
- my $trunc_dir;
- my $rel_dir = $abs_dir;
- my $base_dir;
- my $filename;
- my %overview;
- my $lines_found;
- my $lines_hit;
- my $fn_found;
- my $fn_hit;
- my $overall_found=0;
- my $overall_hit=0;
- my $total_fn_found=0;
- my $total_fn_hit=0;
- my $base_name;
- my $extension;
- my $testdata;
- my %testhash;
- my $testfncdata;
- my %testfnchash;
- my @sort_list;
- local *HTML_HANDLE;
-
- # Remove prefix if applicable
- if (!$no_prefix)
- {
- # Match directory name beginning with $dir_prefix
- $rel_dir = apply_prefix($rel_dir, $dir_prefix);
- }
-
- $trunc_dir = $rel_dir;
-
- # Remove leading /
- if ($rel_dir =~ /^\/(.*)$/)
- {
- $rel_dir = substr($rel_dir, 1);
- }
-
- $base_dir = get_relative_base_path($rel_dir);
-
- create_sub_dir($rel_dir);
-
- # Match filenames which specify files in this directory, not including
- # sub-directories
- foreach $filename (grep(/^\Q$abs_dir\E\/[^\/]*$/,keys(%info_data)))
- {
- my $page_link;
- my $func_link;
-
- ($lines_found, $lines_hit, $fn_found, $fn_hit, $testdata,
- $testfncdata) = process_file($trunc_dir, $rel_dir, $filename);
-
- $base_name = basename($filename);
-
- if ($no_sourceview) {
- $page_link = "";
- } elsif ($frames) {
- # Link to frameset page
- $page_link = "$base_name.gcov.frameset.$html_ext";
- } else {
- # Link directory to source code view page
- $page_link = "$base_name.gcov.$html_ext";
- }
- $overview{$base_name} = [$lines_found, $lines_hit, $fn_found,
- $fn_hit, $page_link,
- get_rate($lines_found, $lines_hit),
- get_rate($fn_found, $fn_hit)];
-
- $testhash{$base_name} = $testdata;
- $testfnchash{$base_name} = $testfncdata;
-
- $overall_found += $lines_found;
- $overall_hit += $lines_hit;
-
- $total_fn_found += $fn_found;
- $total_fn_hit += $fn_hit;
- }
-
- # Create sorted pages
- foreach (@fileview_sortlist) {
- # Generate directory overview page (without details)
- write_dir_page($fileview_sortname[$_], $rel_dir, $base_dir,
- $test_title, $trunc_dir, $overall_found,
- $overall_hit, $total_fn_found, $total_fn_hit,
- \%overview, {}, {}, 1, $_);
- if (!$show_details) {
- next;
- }
- # Generate directory overview page including details
- write_dir_page("-detail".$fileview_sortname[$_], $rel_dir,
- $base_dir, $test_title, $trunc_dir,
- $overall_found, $overall_hit, $total_fn_found,
- $total_fn_hit, \%overview, \%testhash,
- \%testfnchash, 1, $_);
- }
-
- # Calculate resulting line counts
- return ($overall_found, $overall_hit, $total_fn_found, $total_fn_hit);
-}
-
-
-#
-# get_converted_lines(testdata)
-#
-# Return hash of line numbers of those lines which were only covered in
-# converted data sets.
-#
-
-sub get_converted_lines($)
-{
- my $testdata = $_[0];
- my $testcount;
- my %converted;
- my %nonconverted;
- my $hash;
- my $testcase;
- my $line;
- my %result;
-
-
- # Get a hash containing line numbers with positive counts both for
- # converted and original data sets
- foreach $testcase (keys(%{$testdata}))
- {
- # Check to see if this is a converted data set
- if ($testcase =~ /,diff$/)
- {
- $hash = \%converted;
- }
- else
- {
- $hash = \%nonconverted;
- }
-
- $testcount = $testdata->{$testcase};
- # Add lines with a positive count to hash
- foreach $line (keys%{$testcount})
- {
- if ($testcount->{$line} > 0)
- {
- $hash->{$line} = 1;
- }
- }
- }
-
- # Combine both hashes to resulting list
- foreach $line (keys(%converted))
- {
- if (!defined($nonconverted{$line}))
- {
- $result{$line} = 1;
- }
- }
-
- return \%result;
-}
-
-
-sub write_function_page($$$$$$$$$$$$$$)
-{
- my ($base_dir, $rel_dir, $trunc_dir, $base_name, $title,
- $lines_found, $lines_hit, $fn_found, $fn_hit,
- $sumcount, $funcdata, $sumfnccount, $testfncdata, $sort_type) = @_;
- my $pagetitle;
- my $filename;
-
- # Generate function table for this file
- if ($sort_type == 0) {
- $filename = "$rel_dir/$base_name.func.$html_ext";
- } else {
- $filename = "$rel_dir/$base_name.func-sort-c.$html_ext";
- }
- html_create(*HTML_HANDLE, $filename);
- $pagetitle = "LCOV - $title - $trunc_dir/$base_name - functions";
- write_html_prolog(*HTML_HANDLE, $base_dir, $pagetitle);
- write_header(*HTML_HANDLE, 4, "$trunc_dir/$base_name",
- "$rel_dir/$base_name", $lines_found, $lines_hit,
- $fn_found, $fn_hit, $sort_type);
- write_function_table(*HTML_HANDLE, "$base_name.gcov.$html_ext",
- $sumcount, $funcdata,
- $sumfnccount, $testfncdata, $base_name,
- $base_dir, $sort_type);
- write_html_epilog(*HTML_HANDLE, $base_dir, 1);
- close(*HTML_HANDLE);
-}
-
-
-#
-# process_file(trunc_dir, rel_dir, filename)
-#
-
-sub process_file($$$)
-{
- info("Processing file ".apply_prefix($_[2], $dir_prefix)."\n");
-
- my $trunc_dir = $_[0];
- my $rel_dir = $_[1];
- my $filename = $_[2];
- my $base_name = basename($filename);
- my $base_dir = get_relative_base_path($rel_dir);
- my $testdata;
- my $testcount;
- my $sumcount;
- my $funcdata;
- my $checkdata;
- my $testfncdata;
- my $sumfnccount;
- my $lines_found;
- my $lines_hit;
- my $fn_found;
- my $fn_hit;
- my $converted;
- my @source;
- my $pagetitle;
- local *HTML_HANDLE;
-
- ($testdata, $sumcount, $funcdata, $checkdata, $testfncdata,
- $sumfnccount, $lines_found, $lines_hit, $fn_found, $fn_hit)
- = get_info_entry($info_data{$filename});
-
- # Return after this point in case user asked us not to generate
- # source code view
- if ($no_sourceview)
- {
- return ($lines_found, $lines_hit,
- $fn_found, $fn_hit, $testdata);
- }
-
- $converted = get_converted_lines($testdata);
- # Generate source code view for this file
- html_create(*HTML_HANDLE, "$rel_dir/$base_name.gcov.$html_ext");
- $pagetitle = "LCOV - $test_title - $trunc_dir/$base_name";
- write_html_prolog(*HTML_HANDLE, $base_dir, $pagetitle);
- write_header(*HTML_HANDLE, 2, "$trunc_dir/$base_name",
- "$rel_dir/$base_name", $lines_found, $lines_hit,
- $fn_found, $fn_hit, 0);
- @source = write_source(*HTML_HANDLE, $filename, $sumcount, $checkdata,
- $converted, $funcdata);
-
- write_html_epilog(*HTML_HANDLE, $base_dir, 1);
- close(*HTML_HANDLE);
-
- if ($func_coverage) {
- # Create function tables
- foreach (@funcview_sortlist) {
- write_function_page($base_dir, $rel_dir, $trunc_dir,
- $base_name, $test_title,
- $lines_found, $lines_hit,
- $fn_found, $fn_hit, $sumcount,
- $funcdata, $sumfnccount,
- $testfncdata, $_);
- }
- }
-
- # Additional files are needed in case of frame output
- if (!$frames)
- {
- return ($lines_found, $lines_hit,
- $fn_found, $fn_hit, $testdata);
- }
-
- # Create overview png file
- gen_png("$rel_dir/$base_name.gcov.png", $overview_width, $tab_size,
- @source);
-
- # Create frameset page
- html_create(*HTML_HANDLE,
- "$rel_dir/$base_name.gcov.frameset.$html_ext");
- write_frameset(*HTML_HANDLE, $base_dir, $base_name, $pagetitle);
- close(*HTML_HANDLE);
-
- # Write overview frame
- html_create(*HTML_HANDLE,
- "$rel_dir/$base_name.gcov.overview.$html_ext");
- write_overview(*HTML_HANDLE, $base_dir, $base_name, $pagetitle,
- scalar(@source));
- close(*HTML_HANDLE);
-
- return ($lines_found, $lines_hit, $fn_found, $fn_hit, $testdata,
- $testfncdata);
-}
-
-
-#
-# read_info_file(info_filename)
-#
-# Read in the contents of the .info file specified by INFO_FILENAME. Data will
-# be returned as a reference to a hash containing the following mappings:
-#
-# %result: for each filename found in file -> \%data
-#
-# %data: "test" -> \%testdata
-# "sum" -> \%sumcount
-# "func" -> \%funcdata
-# "found" -> $lines_found (number of instrumented lines found in file)
-# "hit" -> $lines_hit (number of executed lines in file)
-# "check" -> \%checkdata
-# "testfnc" -> \%testfncdata
-# "sumfnc" -> \%sumfnccount
-#
-# %testdata : name of test affecting this file -> \%testcount
-# %testfncdata: name of test affecting this file -> \%testfnccount
-#
-# %testcount : line number -> execution count for a single test
-# %testfnccount: function name -> execution count for a single test
-# %sumcount : line number -> execution count for all tests
-# %sumfnccount : function name -> execution count for all tests
-# %funcdata : function name -> line number
-# %checkdata : line number -> checksum of source code line
-#
-# Note that .info file sections referring to the same file and test name
-# will automatically be combined by adding all execution counts.
-#
-# Note that if INFO_FILENAME ends with ".gz", it is assumed that the file
-# is compressed using GZIP. If available, GUNZIP will be used to decompress
-# this file.
-#
-# Die on error.
-#
-
-sub read_info_file($)
-{
- my $tracefile = $_[0]; # Name of tracefile
- my %result; # Resulting hash: file -> data
- my $data; # Data handle for current entry
- my $testdata; # " "
- my $testcount; # " "
- my $sumcount; # " "
- my $funcdata; # " "
- my $checkdata; # " "
- my $testfncdata;
- my $testfnccount;
- my $sumfnccount;
- my $line; # Current line read from .info file
- my $testname; # Current test name
- my $filename; # Current filename
- my $hitcount; # Count for lines hit
- my $count; # Execution count of current line
- my $negative; # If set, warn about negative counts
- my $changed_testname; # If set, warn about changed testname
- my $line_checksum; # Checksum of current line
- local *INFO_HANDLE; # Filehandle for .info file
-
- info("Reading data file $tracefile\n");
-
- # Check if file exists and is readable
- stat($_[0]);
- if (!(-r _))
- {
- die("ERROR: cannot read file $_[0]!\n");
- }
-
- # Check if this is really a plain file
- if (!(-f _))
- {
- die("ERROR: not a plain file: $_[0]!\n");
- }
-
- # Check for .gz extension
- if ($_[0] =~ /\.gz$/)
- {
- # Check for availability of GZIP tool
- system_no_output(1, "gunzip" ,"-h")
- and die("ERROR: gunzip command not available!\n");
-
- # Check integrity of compressed file
- system_no_output(1, "gunzip", "-t", $_[0])
- and die("ERROR: integrity check failed for ".
- "compressed file $_[0]!\n");
-
- # Open compressed file
- open(INFO_HANDLE, "gunzip -c $_[0]|")
- or die("ERROR: cannot start gunzip to decompress ".
- "file $_[0]!\n");
- }
- else
- {
- # Open decompressed file
- open(INFO_HANDLE, $_[0])
- or die("ERROR: cannot read file $_[0]!\n");
- }
-
- $testname = "";
- while (<INFO_HANDLE>)
- {
- chomp($_);
- $line = $_;
-
- # Switch statement
- foreach ($line)
- {
- /^TN:([^,]*)/ && do
- {
- # Test name information found
- $testname = defined($1) ? $1 : "";
- if ($testname =~ s/\W/_/g)
- {
- $changed_testname = 1;
- }
- last;
- };
-
- /^[SK]F:(.*)/ && do
- {
- # Filename information found
- # Retrieve data for new entry
- $filename = $1;
-
- $data = $result{$filename};
- ($testdata, $sumcount, $funcdata, $checkdata,
- $testfncdata, $sumfnccount) =
- get_info_entry($data);
-
- if (defined($testname))
- {
- $testcount = $testdata->{$testname};
- $testfnccount = $testfncdata->{$testname};
- }
- else
- {
- $testcount = {};
- $testfnccount = {};
- }
- last;
- };
-
- /^DA:(\d+),(-?\d+)(,[^,\s]+)?/ && do
- {
- # Fix negative counts
- $count = $2 < 0 ? 0 : $2;
- if ($2 < 0)
- {
- $negative = 1;
- }
- # Execution count found, add to structure
- # Add summary counts
- $sumcount->{$1} += $count;
-
- # Add test-specific counts
- if (defined($testname))
- {
- $testcount->{$1} += $count;
- }
-
- # Store line checksum if available
- if (defined($3))
- {
- $line_checksum = substr($3, 1);
-
- # Does it match a previous definition
- if (defined($checkdata->{$1}) &&
- ($checkdata->{$1} ne
- $line_checksum))
- {
- die("ERROR: checksum mismatch ".
- "at $filename:$1\n");
- }
-
- $checkdata->{$1} = $line_checksum;
- }
- last;
- };
-
- /^FN:(\d+),([^,]+)/ && do
- {
- # Function data found, add to structure
- $funcdata->{$2} = $1;
-
- # Also initialize function call data
- if (!defined($sumfnccount->{$2})) {
- $sumfnccount->{$2} = 0;
- }
- if (defined($testname))
- {
- if (!defined($testfnccount->{$2})) {
- $testfnccount->{$2} = 0;
- }
- }
- last;
- };
-
- /^FNDA:(\d+),([^,]+)/ && do
- {
- # Function call count found, add to structure
- # Add summary counts
- $sumfnccount->{$2} += $1;
-
- # Add test-specific counts
- if (defined($testname))
- {
- $testfnccount->{$2} += $1;
- }
- last;
- };
- /^end_of_record/ && do
- {
- # Found end of section marker
- if ($filename)
- {
- # Store current section data
- if (defined($testname))
- {
- $testdata->{$testname} =
- $testcount;
- $testfncdata->{$testname} =
- $testfnccount;
- }
-
- set_info_entry($data, $testdata,
- $sumcount, $funcdata,
- $checkdata, $testfncdata,
- $sumfnccount);
- $result{$filename} = $data;
- last;
- }
- };
-
- # default
- last;
- }
- }
- close(INFO_HANDLE);
-
- # Calculate lines_found and lines_hit for each file
- foreach $filename (keys(%result))
- {
- $data = $result{$filename};
-
- ($testdata, $sumcount, undef, undef, $testfncdata,
- $sumfnccount) = get_info_entry($data);
-
- # Filter out empty files
- if (scalar(keys(%{$sumcount})) == 0)
- {
- delete($result{$filename});
- next;
- }
- # Filter out empty test cases
- foreach $testname (keys(%{$testdata}))
- {
- if (!defined($testdata->{$testname}) ||
- scalar(keys(%{$testdata->{$testname}})) == 0)
- {
- delete($testdata->{$testname});
- delete($testfncdata->{$testname});
- }
- }
-
- $data->{"found"} = scalar(keys(%{$sumcount}));
- $hitcount = 0;
-
- foreach (keys(%{$sumcount}))
- {
- if ($sumcount->{$_} > 0) { $hitcount++; }
- }
-
- $data->{"hit"} = $hitcount;
-
- # Get found/hit values for function call data
- $data->{"f_found"} = scalar(keys(%{$sumfnccount}));
- $hitcount = 0;
-
- foreach (keys(%{$sumfnccount})) {
- if ($sumfnccount->{$_} > 0) {
- $hitcount++;
- }
- }
- $data->{"f_hit"} = $hitcount;
- }
-
- if (scalar(keys(%result)) == 0)
- {
- die("ERROR: no valid records found in tracefile $tracefile\n");
- }
- if ($negative)
- {
- warn("WARNING: negative counts found in tracefile ".
- "$tracefile\n");
- }
- if ($changed_testname)
- {
- warn("WARNING: invalid characters removed from testname in ".
- "tracefile $tracefile\n");
- }
-
- return(\%result);
-}
-
-
-#
-# get_info_entry(hash_ref)
-#
-# Retrieve data from an entry of the structure generated by read_info_file().
-# Return a list of references to hashes:
-# (test data hash ref, sum count hash ref, funcdata hash ref, checkdata hash
-# ref, testfncdata hash ref, sumfnccount hash ref, lines found, lines hit,
-# functions found, functions hit)
-#
-
-sub get_info_entry($)
-{
- my $testdata_ref = $_[0]->{"test"};
- my $sumcount_ref = $_[0]->{"sum"};
- my $funcdata_ref = $_[0]->{"func"};
- my $checkdata_ref = $_[0]->{"check"};
- my $testfncdata = $_[0]->{"testfnc"};
- my $sumfnccount = $_[0]->{"sumfnc"};
- my $lines_found = $_[0]->{"found"};
- my $lines_hit = $_[0]->{"hit"};
- my $fn_found = $_[0]->{"f_found"};
- my $fn_hit = $_[0]->{"f_hit"};
-
- return ($testdata_ref, $sumcount_ref, $funcdata_ref, $checkdata_ref,
- $testfncdata, $sumfnccount, $lines_found, $lines_hit,
- $fn_found, $fn_hit);
-}
-
-
-#
-# set_info_entry(hash_ref, testdata_ref, sumcount_ref, funcdata_ref,
-# checkdata_ref, testfncdata_ref, sumfcncount_ref[,lines_found,
-# lines_hit, f_found, f_hit])
-#
-# Update the hash referenced by HASH_REF with the provided data references.
-#
-
-sub set_info_entry($$$$$$$;$$$$)
-{
- my $data_ref = $_[0];
-
- $data_ref->{"test"} = $_[1];
- $data_ref->{"sum"} = $_[2];
- $data_ref->{"func"} = $_[3];
- $data_ref->{"check"} = $_[4];
- $data_ref->{"testfnc"} = $_[5];
- $data_ref->{"sumfnc"} = $_[6];
-
- if (defined($_[7])) { $data_ref->{"found"} = $_[7]; }
- if (defined($_[8])) { $data_ref->{"hit"} = $_[8]; }
- if (defined($_[9])) { $data_ref->{"f_found"} = $_[9]; }
- if (defined($_[10])) { $data_ref->{"f_hit"} = $_[10]; }
-}
-
-
-#
-# add_counts(data1_ref, data2_ref)
-#
-# DATA1_REF and DATA2_REF are references to hashes containing a mapping
-#
-# line number -> execution count
-#
-# Return a list (RESULT_REF, LINES_FOUND, LINES_HIT) where RESULT_REF
-# is a reference to a hash containing the combined mapping in which
-# execution counts are added.
-#
-
-sub add_counts($$)
-{
- my %data1 = %{$_[0]}; # Hash 1
- my %data2 = %{$_[1]}; # Hash 2
- my %result; # Resulting hash
- my $line; # Current line iteration scalar
- my $data1_count; # Count of line in hash1
- my $data2_count; # Count of line in hash2
- my $found = 0; # Total number of lines found
- my $hit = 0; # Number of lines with a count > 0
-
- foreach $line (keys(%data1))
- {
- $data1_count = $data1{$line};
- $data2_count = $data2{$line};
-
- # Add counts if present in both hashes
- if (defined($data2_count)) { $data1_count += $data2_count; }
-
- # Store sum in %result
- $result{$line} = $data1_count;
-
- $found++;
- if ($data1_count > 0) { $hit++; }
- }
-
- # Add lines unique to data2
- foreach $line (keys(%data2))
- {
- # Skip lines already in data1
- if (defined($data1{$line})) { next; }
-
- # Copy count from data2
- $result{$line} = $data2{$line};
-
- $found++;
- if ($result{$line} > 0) { $hit++; }
- }
-
- return (\%result, $found, $hit);
-}
-
-
-#
-# merge_checksums(ref1, ref2, filename)
-#
-# REF1 and REF2 are references to hashes containing a mapping
-#
-# line number -> checksum
-#
-# Merge checksum lists defined in REF1 and REF2 and return reference to
-# resulting hash. Die if a checksum for a line is defined in both hashes
-# but does not match.
-#
-
-sub merge_checksums($$$)
-{
- my $ref1 = $_[0];
- my $ref2 = $_[1];
- my $filename = $_[2];
- my %result;
- my $line;
-
- foreach $line (keys(%{$ref1}))
- {
- if (defined($ref2->{$line}) &&
- ($ref1->{$line} ne $ref2->{$line}))
- {
- die("ERROR: checksum mismatch at $filename:$line\n");
- }
- $result{$line} = $ref1->{$line};
- }
-
- foreach $line (keys(%{$ref2}))
- {
- $result{$line} = $ref2->{$line};
- }
-
- return \%result;
-}
-
-
-#
-# merge_func_data(funcdata1, funcdata2, filename)
-#
-
-sub merge_func_data($$$)
-{
- my ($funcdata1, $funcdata2, $filename) = @_;
- my %result;
- my $func;
-
- %result = %{$funcdata1};
-
- foreach $func (keys(%{$funcdata2})) {
- my $line1 = $result{$func};
- my $line2 = $funcdata2->{$func};
-
- if (defined($line1) && ($line1 != $line2)) {
- warn("WARNING: function data mismatch at ".
- "$filename:$line2\n");
- next;
- }
- $result{$func} = $line2;
- }
-
- return \%result;
-}
-
-
-#
-# add_fnccount(fnccount1, fnccount2)
-#
-# Add function call count data. Return list (fnccount_added, f_found, f_hit)
-#
-
-sub add_fnccount($$)
-{
- my ($fnccount1, $fnccount2) = @_;
- my %result;
- my $fn_found;
- my $fn_hit;
- my $function;
-
- %result = %{$fnccount1};
- foreach $function (keys(%{$fnccount2})) {
- $result{$function} += $fnccount2->{$function};
- }
- $fn_found = scalar(keys(%result));
- $fn_hit = 0;
- foreach $function (keys(%result)) {
- if ($result{$function} > 0) {
- $fn_hit++;
- }
- }
-
- return (\%result, $fn_found, $fn_hit);
-}
-
-#
-# add_testfncdata(testfncdata1, testfncdata2)
-#
-# Add function call count data for several tests. Return reference to
-# added_testfncdata.
-#
-
-sub add_testfncdata($$)
-{
- my ($testfncdata1, $testfncdata2) = @_;
- my %result;
- my $testname;
-
- foreach $testname (keys(%{$testfncdata1})) {
- if (defined($testfncdata2->{$testname})) {
- my $fnccount;
-
- # Function call count data for this testname exists
- # in both data sets: add
- ($fnccount) = add_fnccount(
- $testfncdata1->{$testname},
- $testfncdata2->{$testname});
- $result{$testname} = $fnccount;
- next;
- }
- # Function call count data for this testname is unique to
- # data set 1: copy
- $result{$testname} = $testfncdata1->{$testname};
- }
-
- # Add count data for testnames unique to data set 2
- foreach $testname (keys(%{$testfncdata2})) {
- if (!defined($result{$testname})) {
- $result{$testname} = $testfncdata2->{$testname};
- }
- }
- return \%result;
-}
-
-#
-# combine_info_entries(entry_ref1, entry_ref2, filename)
-#
-# Combine .info data entry hashes referenced by ENTRY_REF1 and ENTRY_REF2.
-# Return reference to resulting hash.
-#
-
-sub combine_info_entries($$$)
-{
- my $entry1 = $_[0]; # Reference to hash containing first entry
- my $testdata1;
- my $sumcount1;
- my $funcdata1;
- my $checkdata1;
- my $testfncdata1;
- my $sumfnccount1;
-
- my $entry2 = $_[1]; # Reference to hash containing second entry
- my $testdata2;
- my $sumcount2;
- my $funcdata2;
- my $checkdata2;
- my $testfncdata2;
- my $sumfnccount2;
-
- my %result; # Hash containing combined entry
- my %result_testdata;
- my $result_sumcount = {};
- my $result_funcdata;
- my $result_testfncdata;
- my $result_sumfnccount;
- my $lines_found;
- my $lines_hit;
- my $fn_found;
- my $fn_hit;
-
- my $testname;
- my $filename = $_[2];
-
- # Retrieve data
- ($testdata1, $sumcount1, $funcdata1, $checkdata1, $testfncdata1,
- $sumfnccount1) = get_info_entry($entry1);
- ($testdata2, $sumcount2, $funcdata2, $checkdata2, $testfncdata2,
- $sumfnccount2) = get_info_entry($entry2);
-
- # Merge checksums
- $checkdata1 = merge_checksums($checkdata1, $checkdata2, $filename);
-
- # Combine funcdata
- $result_funcdata = merge_func_data($funcdata1, $funcdata2, $filename);
-
- # Combine function call count data
- $result_testfncdata = add_testfncdata($testfncdata1, $testfncdata2);
- ($result_sumfnccount, $fn_found, $fn_hit) =
- add_fnccount($sumfnccount1, $sumfnccount2);
-
- # Combine testdata
- foreach $testname (keys(%{$testdata1}))
- {
- if (defined($testdata2->{$testname}))
- {
- # testname is present in both entries, requires
- # combination
- ($result_testdata{$testname}) =
- add_counts($testdata1->{$testname},
- $testdata2->{$testname});
- }
- else
- {
- # testname only present in entry1, add to result
- $result_testdata{$testname} = $testdata1->{$testname};
- }
-
- # update sum count hash
- ($result_sumcount, $lines_found, $lines_hit) =
- add_counts($result_sumcount,
- $result_testdata{$testname});
- }
-
- foreach $testname (keys(%{$testdata2}))
- {
- # Skip testnames already covered by previous iteration
- if (defined($testdata1->{$testname})) { next; }
-
- # testname only present in entry2, add to result hash
- $result_testdata{$testname} = $testdata2->{$testname};
-
- # update sum count hash
- ($result_sumcount, $lines_found, $lines_hit) =
- add_counts($result_sumcount,
- $result_testdata{$testname});
- }
-
- # Calculate resulting sumcount
-
- # Store result
- set_info_entry(\%result, \%result_testdata, $result_sumcount,
- $result_funcdata, $checkdata1, $result_testfncdata,
- $result_sumfnccount, $lines_found, $lines_hit,
- $fn_found, $fn_hit);
-
- return(\%result);
-}
-
-
-#
-# combine_info_files(info_ref1, info_ref2)
-#
-# Combine .info data in hashes referenced by INFO_REF1 and INFO_REF2. Return
-# reference to resulting hash.
-#
-
-sub combine_info_files($$)
-{
- my %hash1 = %{$_[0]};
- my %hash2 = %{$_[1]};
- my $filename;
-
- foreach $filename (keys(%hash2))
- {
- if ($hash1{$filename})
- {
- # Entry already exists in hash1, combine them
- $hash1{$filename} =
- combine_info_entries($hash1{$filename},
- $hash2{$filename},
- $filename);
- }
- else
- {
- # Entry is unique in both hashes, simply add to
- # resulting hash
- $hash1{$filename} = $hash2{$filename};
- }
- }
-
- return(\%hash1);
-}
-
-
-#
-# get_prefix(filename_list)
-#
-# Search FILENAME_LIST for a directory prefix which is common to as many
-# list entries as possible, so that removing this prefix will minimize the
-# sum of the lengths of all resulting shortened filenames.
-#
-
-sub get_prefix(@)
-{
- my @filename_list = @_; # provided list of filenames
- my %prefix; # mapping: prefix -> sum of lengths
- my $current; # Temporary iteration variable
-
- # Find list of prefixes
- foreach (@filename_list)
- {
- # Need explicit assignment to get a copy of $_ so that
- # shortening the contained prefix does not affect the list
- $current = shorten_prefix($_);
- while ($current = shorten_prefix($current))
- {
- # Skip rest if the remaining prefix has already been
- # added to hash
- if ($prefix{$current}) { last; }
-
- # Initialize with 0
- $prefix{$current}="0";
- }
-
- }
-
- # Calculate sum of lengths for all prefixes
- foreach $current (keys(%prefix))
- {
- foreach (@filename_list)
- {
- # Add original length
- $prefix{$current} += length($_);
-
- # Check whether prefix matches
- if (substr($_, 0, length($current)) eq $current)
- {
- # Subtract prefix length for this filename
- $prefix{$current} -= length($current);
- }
- }
- }
-
- # Find and return prefix with minimal sum
- $current = (keys(%prefix))[0];
-
- foreach (keys(%prefix))
- {
- if ($prefix{$_} < $prefix{$current})
- {
- $current = $_;
- }
- }
-
- return($current);
-}
-
-
-#
-# shorten_prefix(prefix)
-#
-# Return PREFIX shortened by last directory component.
-#
-
-sub shorten_prefix($)
-{
- my @list = split("/", $_[0]);
-
- pop(@list);
- return join("/", @list);
-}
-
-
-
-#
-# get_dir_list(filename_list)
-#
-# Return sorted list of directories for each entry in given FILENAME_LIST.
-#
-
-sub get_dir_list(@)
-{
- my %result;
-
- foreach (@_)
- {
- $result{shorten_prefix($_)} = "";
- }
-
- return(sort(keys(%result)));
-}
-
-
-#
-# get_relative_base_path(subdirectory)
-#
-# Return a relative path string which references the base path when applied
-# in SUBDIRECTORY.
-#
-# Example: get_relative_base_path("fs/mm") -> "../../"
-#
-
-sub get_relative_base_path($)
-{
- my $result = "";
- my $index;
-
- # Make an empty directory path a special case
- if (!$_[0]) { return(""); }
-
- # Count number of /s in path
- $index = ($_[0] =~ s/\//\//g);
-
- # Add a ../ to $result for each / in the directory path + 1
- for (; $index>=0; $index--)
- {
- $result .= "../";
- }
-
- return $result;
-}
-
-
-#
-# read_testfile(test_filename)
-#
-# Read in file TEST_FILENAME which contains test descriptions in the format:
-#
-# TN:<whitespace><test name>
-# TD:<whitespace><test description>
-#
-# for each test case. Return a reference to a hash containing a mapping
-#
-# test name -> test description.
-#
-# Die on error.
-#
-
-sub read_testfile($)
-{
- my %result;
- my $test_name;
- my $changed_testname;
- local *TEST_HANDLE;
-
- open(TEST_HANDLE, "<".$_[0])
- or die("ERROR: cannot open $_[0]!\n");
-
- while (<TEST_HANDLE>)
- {
- chomp($_);
-
- # Match lines beginning with TN:<whitespace(s)>
- if (/^TN:\s+(.*?)\s*$/)
- {
- # Store name for later use
- $test_name = $1;
- if ($test_name =~ s/\W/_/g)
- {
- $changed_testname = 1;
- }
- }
-
- # Match lines beginning with TD:<whitespace(s)>
- if (/^TD:\s+(.*?)\s*$/)
- {
- # Check for empty line
- if ($1)
- {
- # Add description to hash
- $result{$test_name} .= " $1";
- }
- else
- {
- # Add empty line
- $result{$test_name} .= "\n\n";
- }
- }
- }
-
- close(TEST_HANDLE);
-
- if ($changed_testname)
- {
- warn("WARNING: invalid characters removed from testname in ".
- "descriptions file $_[0]\n");
- }
-
- return \%result;
-}
-
-
-#
-# escape_html(STRING)
-#
-# Return a copy of STRING in which all occurrences of HTML special characters
-# are escaped.
-#
-
-sub escape_html($)
-{
- my $string = $_[0];
-
- if (!$string) { return ""; }
-
- $string =~ s/&/&amp;/g; # & -> &amp;
- $string =~ s/</&lt;/g; # < -> &lt;
- $string =~ s/>/&gt;/g; # > -> &gt;
- $string =~ s/\"/&quot;/g; # " -> &quot;
-
- while ($string =~ /^([^\t]*)(\t)/)
- {
- my $replacement = " "x($tab_size - (length($1) % $tab_size));
- $string =~ s/^([^\t]*)(\t)/$1$replacement/;
- }
-
- $string =~ s/\n/<br>/g; # \n -> <br>
-
- return $string;
-}
-
-
-#
-# get_date_string()
-#
-# Return the current date in the form: yyyy-mm-dd
-#
-
-sub get_date_string()
-{
- my $year;
- my $month;
- my $day;
-
- ($year, $month, $day) = (localtime())[5, 4, 3];
-
- return sprintf("%d-%02d-%02d", $year+1900, $month+1, $day);
-}
-
-
-#
-# create_sub_dir(dir_name)
-#
-# Create subdirectory DIR_NAME if it does not already exist, including all its
-# parent directories.
-#
-# Die on error.
-#
-
-sub create_sub_dir($)
-{
- system("mkdir", "-p" ,$_[0])
- and die("ERROR: cannot create directory $_!\n");
-}
-
-
-#
-# write_description_file(descriptions, overall_found, overall_hit,
-# total_fn_found, total_fn_hit)
-#
-# Write HTML file containing all test case descriptions. DESCRIPTIONS is a
-# reference to a hash containing a mapping
-#
-# test case name -> test case description
-#
-# Die on error.
-#
-
-sub write_description_file($$$$$)
-{
- my %description = %{$_[0]};
- my $found = $_[1];
- my $hit = $_[2];
- my $fn_found = $_[3];
- my $fn_hit = $_[4];
- my $test_name;
- local *HTML_HANDLE;
-
- html_create(*HTML_HANDLE,"descriptions.$html_ext");
- write_html_prolog(*HTML_HANDLE, "", "LCOV - test case descriptions");
- write_header(*HTML_HANDLE, 3, "", "", $found, $hit, $fn_found,
- $fn_hit, 0);
-
- write_test_table_prolog(*HTML_HANDLE,
- "Test case descriptions - alphabetical list");
-
- foreach $test_name (sort(keys(%description)))
- {
- write_test_table_entry(*HTML_HANDLE, $test_name,
- escape_html($description{$test_name}));
- }
-
- write_test_table_epilog(*HTML_HANDLE);
- write_html_epilog(*HTML_HANDLE, "");
-
- close(*HTML_HANDLE);
-}
-
-
-
-#
-# write_png_files()
-#
-# Create all necessary .png files for the HTML-output in the current
-# directory. .png-files are used as bar graphs.
-#
-# Die on error.
-#
-
-sub write_png_files()
-{
- my %data;
- local *PNG_HANDLE;
-
- $data{"ruby.png"} =
- [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00,
- 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25,
- 0xdb, 0x56, 0xca, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d,
- 0x45, 0x07, 0xd2, 0x07, 0x11, 0x0f, 0x18, 0x10, 0x5d, 0x57,
- 0x34, 0x6e, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73,
- 0x00, 0x00, 0x0b, 0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2,
- 0xdd, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d,
- 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00,
- 0x00, 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0xff, 0x35, 0x2f,
- 0x00, 0x00, 0x00, 0xd0, 0x33, 0x9a, 0x9d, 0x00, 0x00, 0x00,
- 0x0a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x01, 0xe5, 0x27, 0xde, 0xfc, 0x00,
- 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
- 0x82];
- $data{"amber.png"} =
- [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00,
- 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25,
- 0xdb, 0x56, 0xca, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d,
- 0x45, 0x07, 0xd2, 0x07, 0x11, 0x0f, 0x28, 0x04, 0x98, 0xcb,
- 0xd6, 0xe0, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73,
- 0x00, 0x00, 0x0b, 0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2,
- 0xdd, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d,
- 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00,
- 0x00, 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xe0, 0x50,
- 0x00, 0x00, 0x00, 0xa2, 0x7a, 0xda, 0x7e, 0x00, 0x00, 0x00,
- 0x0a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x01, 0xe5, 0x27, 0xde, 0xfc, 0x00,
- 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
- 0x82];
- $data{"emerald.png"} =
- [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00,
- 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25,
- 0xdb, 0x56, 0xca, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d,
- 0x45, 0x07, 0xd2, 0x07, 0x11, 0x0f, 0x22, 0x2b, 0xc9, 0xf5,
- 0x03, 0x33, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73,
- 0x00, 0x00, 0x0b, 0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2,
- 0xdd, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d,
- 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00,
- 0x00, 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0x1b, 0xea, 0x59,
- 0x0a, 0x0a, 0x0a, 0x0f, 0xba, 0x50, 0x83, 0x00, 0x00, 0x00,
- 0x0a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x01, 0xe5, 0x27, 0xde, 0xfc, 0x00,
- 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
- 0x82];
- $data{"snow.png"} =
- [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00,
- 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25,
- 0xdb, 0x56, 0xca, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d,
- 0x45, 0x07, 0xd2, 0x07, 0x11, 0x0f, 0x1e, 0x1d, 0x75, 0xbc,
- 0xef, 0x55, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73,
- 0x00, 0x00, 0x0b, 0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2,
- 0xdd, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d,
- 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00,
- 0x00, 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x55, 0xc2, 0xd3, 0x7e, 0x00, 0x00, 0x00,
- 0x0a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x01, 0xe5, 0x27, 0xde, 0xfc, 0x00,
- 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
- 0x82];
- $data{"glass.png"} =
- [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00,
- 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25,
- 0xdb, 0x56, 0xca, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d,
- 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00,
- 0x00, 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x55, 0xc2, 0xd3, 0x7e, 0x00, 0x00, 0x00,
- 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66,
- 0x00, 0x00, 0x00, 0x01, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x88,
- 0x05, 0x1d, 0x48, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
- 0x73, 0x00, 0x00, 0x0b, 0x12, 0x00, 0x00, 0x0b, 0x12, 0x01,
- 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49,
- 0x4d, 0x45, 0x07, 0xd2, 0x07, 0x13, 0x0f, 0x08, 0x19, 0xc4,
- 0x40, 0x56, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x49, 0x44, 0x41,
- 0x54, 0x78, 0x9c, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x01, 0x48, 0xaf, 0xa4, 0x71, 0x00, 0x00, 0x00, 0x00, 0x49,
- 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82];
- $data{"updown.png"} =
- [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00,
- 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0a,
- 0x00, 0x00, 0x00, 0x0e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x16,
- 0xa3, 0x8d, 0xab, 0x00, 0x00, 0x00, 0x3c, 0x49, 0x44, 0x41,
- 0x54, 0x28, 0xcf, 0x63, 0x60, 0x40, 0x03, 0xff, 0xa1, 0x00,
- 0x5d, 0x9c, 0x11, 0x5d, 0x11, 0x8a, 0x24, 0x23, 0x23, 0x23,
- 0x86, 0x42, 0x6c, 0xa6, 0x20, 0x2b, 0x66, 0xc4, 0xa7, 0x08,
- 0x59, 0x31, 0x23, 0x21, 0x45, 0x30, 0xc0, 0xc4, 0x30, 0x60,
- 0x80, 0xfa, 0x6e, 0x24, 0x3e, 0x78, 0x48, 0x0a, 0x70, 0x62,
- 0xa2, 0x90, 0x81, 0xd8, 0x44, 0x01, 0x00, 0xe9, 0x5c, 0x2f,
- 0xf5, 0xe2, 0x9d, 0x0f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x49,
- 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82] if ($sort);
- foreach (keys(%data))
- {
- open(PNG_HANDLE, ">".$_)
- or die("ERROR: cannot create $_!\n");
- binmode(PNG_HANDLE);
- print(PNG_HANDLE map(chr,@{$data{$_}}));
- close(PNG_HANDLE);
- }
-}
-
-
-#
-# write_htaccess_file()
-#
-
-sub write_htaccess_file()
-{
- local *HTACCESS_HANDLE;
- my $htaccess_data;
-
- open(*HTACCESS_HANDLE, ">.htaccess")
- or die("ERROR: cannot open .htaccess for writing!\n");
-
- $htaccess_data = (<<"END_OF_HTACCESS")
-AddEncoding x-gzip .html
-END_OF_HTACCESS
- ;
-
- print(HTACCESS_HANDLE $htaccess_data);
- close(*HTACCESS_HANDLE);
-}
-
-
-#
-# write_css_file()
-#
-# Write the cascading style sheet file gcov.css to the current directory.
-# This file defines basic layout attributes of all generated HTML pages.
-#
-
-sub write_css_file()
-{
- local *CSS_HANDLE;
-
- # Check for a specified external style sheet file
- if ($css_filename)
- {
- # Simply copy that file
- system("cp", $css_filename, "gcov.css")
- and die("ERROR: cannot copy file $css_filename!\n");
- return;
- }
-
- open(CSS_HANDLE, ">gcov.css")
- or die ("ERROR: cannot open gcov.css for writing!\n");
-
-
- # *************************************************************
-
- my $css_data = ($_=<<"END_OF_CSS")
- /* All views: initial background and text color */
- body
- {
- color: #000000;
- background-color: #FFFFFF;
- }
-
- /* All views: standard link format*/
- a:link
- {
- color: #284FA8;
- text-decoration: underline;
- }
-
- /* All views: standard link - visited format */
- a:visited
- {
- color: #00CB40;
- text-decoration: underline;
- }
-
- /* All views: standard link - activated format */
- a:active
- {
- color: #FF0040;
- text-decoration: underline;
- }
-
- /* All views: main title format */
- td.title
- {
- text-align: center;
- padding-bottom: 10px;
- font-family: sans-serif;
- font-size: 20pt;
- font-style: italic;
- font-weight: bold;
- }
-
- /* All views: header item format */
- td.headerItem
- {
- text-align: right;
- padding-right: 6px;
- font-family: sans-serif;
- font-weight: bold;
- vertical-align: top;
- white-space: nowrap;
- }
-
- /* All views: header item value format */
- td.headerValue
- {
- text-align: left;
- color: #284FA8;
- font-family: sans-serif;
- font-weight: bold;
- white-space: nowrap;
- }
-
- /* All views: header item coverage table heading */
- td.headerCovTableHead
- {
- text-align: center;
- padding-right: 6px;
- padding-left: 6px;
- padding-bottom: 0px;
- font-family: sans-serif;
- font-size: 80%;
- white-space: nowrap;
- }
-
- /* All views: header item coverage table entry */
- td.headerCovTableEntry
- {
- text-align: right;
- color: #284FA8;
- font-family: sans-serif;
- font-weight: bold;
- white-space: nowrap;
- padding-left: 12px;
- padding-right: 4px;
- background-color: #DAE7FE;
- }
-
- /* All views: header item coverage table entry for high coverage rate */
- td.headerCovTableEntryHi
- {
- text-align: right;
- color: #000000;
- font-family: sans-serif;
- font-weight: bold;
- white-space: nowrap;
- padding-left: 12px;
- padding-right: 4px;
- background-color: #A7FC9D;
- }
-
- /* All views: header item coverage table entry for medium coverage rate */
- td.headerCovTableEntryMed
- {
- text-align: right;
- color: #000000;
- font-family: sans-serif;
- font-weight: bold;
- white-space: nowrap;
- padding-left: 12px;
- padding-right: 4px;
- background-color: #FFEA20;
- }
-
- /* All views: header item coverage table entry for ow coverage rate */
- td.headerCovTableEntryLo
- {
- text-align: right;
- color: #000000;
- font-family: sans-serif;
- font-weight: bold;
- white-space: nowrap;
- padding-left: 12px;
- padding-right: 4px;
- background-color: #FF0000;
- }
-
- /* All views: header legend item for legend entry */
- td.headerItemLeg
- {
- text-align: right;
- padding-right: 6px;
- font-family: sans-serif;
- font-weight: bold;
- vertical-align: bottom;
- white-space: nowrap;
- }
-
- /* All views: header legend value for legend entry */
- td.headerValueLeg
- {
- text-align: left;
- color: #000000;
- font-family: sans-serif;
- font-size: 80%;
- white-space: nowrap;
- padding-top: 4px;
- }
-
- /* All views: color of horizontal ruler */
- td.ruler
- {
- background-color: #6688D4;
- }
-
- /* All views: version string format */
- td.versionInfo
- {
- text-align: center;
- padding-top: 2px;
- font-family: sans-serif;
- font-style: italic;
- }
-
- /* Directory view/File view (all)/Test case descriptions:
- table headline format */
- td.tableHead
- {
- text-align: center;
- color: #FFFFFF;
- background-color: #6688D4;
- font-family: sans-serif;
- font-size: 120%;
- font-weight: bold;
- white-space: nowrap;
- padding-left: 4px;
- padding-right: 4px;
- }
-
- span.tableHeadSort
- {
- padding-right: 4px;
- }
-
- /* Directory view/File view (all): filename entry format */
- td.coverFile
- {
- text-align: left;
- padding-left: 10px;
- padding-right: 20px;
- color: #284FA8;
- background-color: #DAE7FE;
- font-family: monospace;
- }
-
- /* Directory view/File view (all): bar-graph entry format*/
- td.coverBar
- {
- padding-left: 10px;
- padding-right: 10px;
- background-color: #DAE7FE;
- }
-
- /* Directory view/File view (all): bar-graph outline color */
- td.coverBarOutline
- {
- background-color: #000000;
- }
-
- /* Directory view/File view (all): percentage entry for files with
- high coverage rate */
- td.coverPerHi
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #A7FC9D;
- font-weight: bold;
- }
-
- /* Directory view/File view (all): line count entry for files with
- high coverage rate */
- td.coverNumHi
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #A7FC9D;
- white-space: nowrap;
- }
-
- /* Directory view/File view (all): legend entry for high coverage
- rate */
- span.coverLegendHi
- {
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 2px;
- background-color: #A7FC9D;
- }
-
- /* Directory view/File view (all): percentage entry for files with
- medium coverage rate */
- td.coverPerMed
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #FFEA20;
- font-weight: bold;
- }
-
- /* Directory view/File view (all): line count entry for files with
- medium coverage rate */
- td.coverNumMed
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #FFEA20;
- white-space: nowrap;
- }
-
- /* Directory view/File view (all): legend entry for medium coverage
- rate */
- span.coverLegendMed
- {
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 2px;
- background-color: #FFEA20;
- }
-
- /* Directory view/File view (all): percentage entry for files with
- low coverage rate */
- td.coverPerLo
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #FF0000;
- font-weight: bold;
- }
-
- /* Directory view/File view (all): line count entry for files with
- low coverage rate */
- td.coverNumLo
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #FF0000;
- white-space: nowrap;
- }
-
- /* Directory view/File view (all): legend entry for low coverage
- rate */
- span.coverLegendLo
- {
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 2px;
- background-color: #FF0000;
- }
-
- /* File view (all): "show/hide details" link format */
- a.detail:link
- {
- color: #B8D0FF;
- }
-
- /* File view (all): "show/hide details" link - visited format */
- a.detail:visited
- {
- color: #B8D0FF;
- }
-
- /* File view (all): "show/hide details" link - activated format */
- a.detail:active
- {
- color: #FFFFFF;
- }
-
- /* File view (detail): test name table headline format */
- td.testNameHead
- {
- text-align: right;
- padding-right: 10px;
- background-color: #DAE7FE;
- font-family: sans-serif;
- font-weight: bold;
- }
-
- /* File view (detail): test lines table headline format */
- td.testLinesHead
- {
- text-align: center;
- background-color: #DAE7FE;
- font-family: sans-serif;
- font-weight: bold;
- }
-
- /* File view (detail): test name entry */
- td.testName
- {
- text-align: right;
- padding-right: 10px;
- background-color: #DAE7FE;
- }
-
- /* File view (detail): test percentage entry */
- td.testPer
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #DAE7FE;
- }
-
- /* File view (detail): test lines count entry */
- td.testNum
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #DAE7FE;
- }
-
- /* Test case descriptions: test name format*/
- dt
- {
- font-family: sans-serif;
- font-weight: bold;
- }
-
- /* Test case descriptions: description table body */
- td.testDescription
- {
- padding-top: 10px;
- padding-left: 30px;
- padding-bottom: 10px;
- padding-right: 30px;
- background-color: #DAE7FE;
- }
-
- /* Source code view: function entry */
- td.coverFn
- {
- text-align: left;
- padding-left: 10px;
- padding-right: 20px;
- color: #284FA8;
- background-color: #DAE7FE;
- font-family: monospace;
- }
-
- /* Source code view: function entry zero count*/
- td.coverFnLo
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #FF0000;
- font-weight: bold;
- }
-
- /* Source code view: function entry nonzero count*/
- td.coverFnHi
- {
- text-align: right;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #DAE7FE;
- font-weight: bold;
- }
-
- /* Source code view: source code format */
- /* Source code view: source code format */
- pre.source
- {
- font-family: monospace;
- white-space: pre;
- }
-
- /* Source code view: line number format */
- span.lineNum
- {
- background-color: #EFE383;
- }
-
- /* Source code view: format for lines which were executed */
- td.lineCov,
- span.lineCov
- {
- background-color: #CAD7FE;
- }
-
- /* Source code view: format for Cov legend */
- span.coverLegendCov
- {
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 2px;
- background-color: #CAD7FE;
- }
-
- /* Source code view: format for lines which were not executed */
- td.lineNoCov,
- span.lineNoCov
- {
- background-color: #FF6230;
- }
-
- /* Source code view: format for NoCov legend */
- span.coverLegendNoCov
- {
- padding-left: 10px;
- padding-right: 10px;
- padding-bottom: 2px;
- background-color: #FF0000;
- }
-
- /* Source code view (function table): standard link - visited format */
- td.lineNoCov > a:visited,
- td.lineCov > a:visited
- {
- color: black;
- text-decoration: underline;
- }
-
- /* Source code view: format for lines which were executed only in a
- previous version */
- span.lineDiffCov
- {
- background-color: #B5F7AF;
- }
-
- /* Source code view: format for DiffCov legend */
- span.LegendDiffCov
- {
- text-align: center;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #B5F7AF;
- }
-END_OF_CSS
- ;
-
- # *************************************************************
-
-
- # Remove leading tab from all lines
- $css_data =~ s/^\t//gm;
-
- print(CSS_HANDLE $css_data);
-
- close(CSS_HANDLE);
-}
-
-
-#
-# get_bar_graph_code(base_dir, cover_found, cover_hit)
-#
-# Return a string containing HTML code which implements a bar graph display
-# for a coverage rate of cover_hit * 100 / cover_found.
-#
-
-sub get_bar_graph_code($$$)
-{
- my $rate;
- my $alt;
- my $width;
- my $remainder;
- my $png_name;
- my $graph_code;
-
- # Check number of instrumented lines
- if ($_[1] == 0) { return ""; }
-
- $rate = $_[2] * 100 / $_[1];
- $alt = sprintf("%.1f", $rate)."%";
- $width = sprintf("%.0f", $rate);
- $remainder = sprintf("%d", 100-$width);
-
- # Decide which .png file to use
- $png_name = $rate_png[classify_rate($_[1], $_[2], $med_limit,
- $hi_limit)];
-
- if ($width == 0)
- {
- # Zero coverage
- $graph_code = (<<END_OF_HTML)
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="$_[0]snow.png" width=100 height=10 alt="$alt"></td></tr></table>
-END_OF_HTML
- ;
- }
- elsif ($width == 100)
- {
- # Full coverage
- $graph_code = (<<END_OF_HTML)
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="$_[0]$png_name" width=100 height=10 alt="$alt"></td></tr></table>
-END_OF_HTML
- ;
- }
- else
- {
- # Positive coverage
- $graph_code = (<<END_OF_HTML)
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="$_[0]$png_name" width=$width height=10 alt="$alt"><img src="$_[0]snow.png" width=$remainder height=10 alt="$alt"></td></tr></table>
-END_OF_HTML
- ;
- }
-
- # Remove leading tabs from all lines
- $graph_code =~ s/^\t+//gm;
- chomp($graph_code);
-
- return($graph_code);
-}
-
-#
-# sub classify_rate(found, hit, med_limit, high_limit)
-#
-# Return 0 for low rate, 1 for medium rate and 2 for hi rate.
-#
-
-sub classify_rate($$$$)
-{
- my ($found, $hit, $med, $hi) = @_;
- my $rate;
-
- if ($found == 0) {
- return 2;
- }
- $rate = $hit * 100 / $found;
- if ($rate < $med) {
- return 0;
- } elsif ($rate < $hi) {
- return 1;
- }
- return 2;
-}
-
-
-#
-# write_html(filehandle, html_code)
-#
-# Write out HTML_CODE to FILEHANDLE while removing a leading tabulator mark
-# in each line of HTML_CODE.
-#
-
-sub write_html(*$)
-{
- local *HTML_HANDLE = $_[0];
- my $html_code = $_[1];
-
- # Remove leading tab from all lines
- $html_code =~ s/^\t//gm;
-
- print(HTML_HANDLE $html_code)
- or die("ERROR: cannot write HTML data ($!)\n");
-}
-
-
-#
-# write_html_prolog(filehandle, base_dir, pagetitle)
-#
-# Write an HTML prolog common to all HTML files to FILEHANDLE. PAGETITLE will
-# be used as HTML page title. BASE_DIR contains a relative path which points
-# to the base directory.
-#
-
-sub write_html_prolog(*$$)
-{
- my $basedir = $_[1];
- my $pagetitle = $_[2];
- my $prolog;
-
- $prolog = $html_prolog;
- $prolog =~ s/\@pagetitle\@/$pagetitle/g;
- $prolog =~ s/\@basedir\@/$basedir/g;
-
- write_html($_[0], $prolog);
-}
-
-
-#
-# write_header_prolog(filehandle, base_dir)
-#
-# Write beginning of page header HTML code.
-#
-
-sub write_header_prolog(*$)
-{
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="title">$title</td></tr>
- <tr><td class="ruler"><img src="$_[1]glass.png" width=3 height=3 alt=""></td></tr>
-
- <tr>
- <td width="100%">
- <table cellpadding=1 border=0 width="100%">
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_header_line(filehandle, type, additional params..)
-#
-# Write a header line.
-#
-
-sub write_header_line(*$@)
-{
- my $HANDLE = shift;
- my $type = shift;
- my @args = @_;
-
- # Reduce indentation by using gotos
- if ($type eq 0) {
- goto header;
- } elsif ($type eq 1) {
- goto body;
- } elsif ($type eq 2) {
- goto legend_dir;
- } elsif ($type eq 3) {
- goto legend_source;
- } elsif ($type eq 4) {
- goto half_body;
- }
-
-header:
- # *************************************************************
- write_html($HANDLE, <<END_OF_HTML);
- <tr>
- <td width="5%"></td>
- <td width="10%" class="headerItem">$args[0]</td>
- <td width="35%" class="headerValue">$args[1]</td>
- <td width="10%"></td>
- <td width="10%" class="headerCovTableHead">$args[2]</td>
- <td width="10%" class="headerCovTableHead">$args[3]</td>
- <td width="15%" class="headerCovTableHead">$args[4]</td>
- <td width="5%"></td>
- </tr>
-END_OF_HTML
- # *************************************************************
- return;
-
-body:
- # *************************************************************
- write_html($HANDLE, <<END_OF_HTML);
- <tr>
- <td></td>
- <td class="headerItem">$args[0]</td>
- <td class="headerValue">$args[1]</td>
- <td class="headerItem">$args[2]</td>
- <td class="headerCovTableEntry">$args[3]</td>
- <td class="headerCovTableEntry">$args[4]</td>
- <td class="headerCovTableEntry$args[5]">$args[6]</td>
- </tr>
-END_OF_HTML
- # *************************************************************
- return;
-
-half_body:
- # *************************************************************
- write_html($HANDLE, <<END_OF_HTML);
- <tr>
- <td></td>
- <td class="headerItem">$args[0]</td>
- <td class="headerValue">$args[1]</td>
- </tr>
-END_OF_HTML
- # *************************************************************
- return;
-
-legend_dir:
- # *************************************************************
- write_html($HANDLE, <<END_OF_HTML);
- <tr>
- <td></td>
- <td class="headerItemLeg">$args[0]</td>
- <td class="headerValueLeg">
-$args[1] </td>
- <td></td>
- <td class="headerValueLeg" colspan=3>
-$args[2] </td>
- </tr>
-END_OF_HTML
- # *************************************************************
- return;
-
-legend_source:
- # *************************************************************
- write_html($HANDLE, <<END_OF_HTML);
- <tr>
- <td></td>
- <td class="headerItem">$args[0]</td>
- <td class="headerValueLeg" colspan=5>
- <span class="coverLegendNoCov">$args[1]</span>
- <span class="coverLegendCov">$args[2]</span>
- </td>
- </tr>
-END_OF_HTML
- # *************************************************************
-}
-
-
-#
-# write_header_epilog(filehandle, base_dir)
-#
-# Write end of page header HTML code.
-#
-
-sub write_header_epilog(*$)
-{
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <tr><td><img src="$_[1]glass.png" width=3 height=3 alt=""></td></tr>
- </table>
- </td>
- </tr>
- <tr><td class="ruler"><img src="$_[1]glass.png" width=3 height=3 alt=""></td></tr>
- </table>
-
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_file_table_prolog(filehandle, file_heading, lines_heading, func_heading)
-#
-# Write heading for file table.
-#
-
-sub write_file_table_prolog(*$$$)
-{
- # *************************************************************
-
- if ($func_coverage)
- {
- write_html($_[0], <<END_OF_HTML)
- <center>
- <table width="80%" cellpadding=1 cellspacing=1 border=0>
-
- <tr>
- <td width="45%"><br></td>
- <td width="15%"></td>
- <td width="10%"></td>
- <td width="10%"></td>
- <td width="10%"></td>
- <td width="10%"></td>
- </tr>
-
- <tr>
- <td class="tableHead">$_[1]</td>
- <td class="tableHead" colspan=3>$_[2]</td>
- <td class="tableHead" colspan=2>$_[3]</td>
- </tr>
-
-END_OF_HTML
- ;
- }
- else
- {
- write_html($_[0], <<END_OF_HTML)
- <center>
- <table width="80%" cellpadding=1 cellspacing=1 border=0>
-
- <tr>
- <td width="50%"><br></td>
- <td width="15%"></td>
- <td width="15%"></td>
- <td width="20%"></td>
- </tr>
-
- <tr>
- <td class="tableHead">$_[1]</td>
- <td class="tableHead" colspan=3>$_[2]</td>
- </tr>
-
-END_OF_HTML
- ;
- }
-
- # *************************************************************
-}
-
-
-#
-# write_file_table_entry(filehandle, cover_filename, cover_bar_graph,
-# cover_found, cover_hit, fn_found, fn_hit,
-# page_link, func_link)
-#
-# Write an entry of the file table.
-#
-
-sub write_file_table_entry(*$$$$$$$)
-{
- local *HANDLE = shift;
- my ($filename, $bar_graph, $found, $hit, $fn_found, $fn_hit,
- $page_link) = @_;
- my $rate;
- my $rate_string;
- my $funcs_string;
- my $class_lines = "Lo";
- my $class_funcs = "Hi";
- my $file_code;
-
- # Add link to source if provided
- if (defined($page_link) && $page_link ne "") {
- $file_code = "<a href=\"$page_link\">$filename</a>";
- } else {
- $file_code = $filename;
- }
-
- # Get line coverage rate
- if ($found > 0)
- {
- $rate = $hit * 100 / $found;
- $rate_string = sprintf("%.1f", $rate)."&nbsp;%";
-
- $class_lines = $rate_name[classify_rate($found, $hit,
- $med_limit, $hi_limit)];
- }
- else
- {
- $rate_string = "-";
- }
-
- # Get function coverage rate
- if ($fn_found > 0)
- {
- $rate = $fn_hit * 100 / $fn_found;
- $class_funcs = $rate_name[classify_rate($fn_found, $fn_hit,
- $fn_med_limit, $fn_hi_limit)];
- $funcs_string = sprintf("%.1f", $rate)."&nbsp;%";
- }
- else
- {
- # Define 0 of 0 functions as 100%
- $rate = 100;
- $funcs_string = "-";
- }
-
- # *************************************************************
-
- write_html(*HANDLE, <<END_OF_HTML)
- <tr>
- <td class="coverFile">$file_code</td>
- <td class="coverBar" align="center">
- $bar_graph
- </td>
- <td class="coverPer$class_lines">$rate_string</td>
- <td class="coverNum$class_lines">$hit / $found</td>
-END_OF_HTML
- ;
-
- if ($func_coverage)
- {
- write_html(*HANDLE, <<END_OF_HTML)
- <td class="coverPer$class_funcs">$funcs_string</td>
- <td class="coverNum$class_funcs">$fn_hit / $fn_found</td>
-END_OF_HTML
- ;
- }
- write_html(*HANDLE, <<END_OF_HTML)
- </tr>
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_file_table_detail_heading(filehandle, left_heading, right_heading)
-#
-# Write heading for detail section in file table.
-#
-
-sub write_file_table_detail_heading(*$$$)
-{
- my $func_rows = "";
-
- if ($func_coverage)
- {
- $func_rows = "<td class=\"testLinesHead\" colspan=2>$_[3]</td>";
- }
-
- # *************************************************************
- write_html($_[0], <<END_OF_HTML)
- <tr>
- <td class="testNameHead" colspan=2>$_[1]</td>
- <td class="testLinesHead" colspan=2>$_[2]</td>
- $func_rows
- </tr>
-
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_file_table_detail_entry(filehandle, test_name,
-# cover_found, cover_hit, func_found, func_hit)
-#
-# Write entry for detail section in file table.
-#
-
-sub write_file_table_detail_entry(*$$$$$)
-{
- my $rate;
- my $func_rate;
- my $name = $_[1];
-
- if ($_[2]>0)
- {
- $rate = sprintf("%.1f", $_[3]*100/$_[2])."&nbsp;%";
- }
- else
- {
- $rate = "-";
- }
-
- if ($_[4]>0)
- {
- $func_rate = sprintf("%.1f", $_[5]*100/$_[4])."&nbsp;%";
- }
- else
- {
- $func_rate = "-";
- }
-
- if ($name =~ /^(.*),diff$/)
- {
- $name = $1." (converted)";
- }
-
- if ($name eq "")
- {
- $name = "<span style=\"font-style:italic\">&lt;unnamed&gt;</span>";
- }
-
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <tr>
- <td class="testName" colspan=2>$name</td>
- <td class="testPer">$rate</td>
- <td class="testNum">$_[3]&nbsp;/&nbsp;$_[2]&nbsp;lines</td>
-END_OF_HTML
- ;
- if ($func_coverage)
- {
- write_html($_[0], <<END_OF_HTML)
- <td class="testPer">$func_rate</td>
- <td class="testNum">$_[5]&nbsp;/&nbsp;$_[4]</td>
-END_OF_HTML
- ;
- }
- write_html($_[0], <<END_OF_HTML)
- </tr>
-
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_file_table_epilog(filehandle)
-#
-# Write end of file table HTML code.
-#
-
-sub write_file_table_epilog(*)
-{
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- </table>
- </center>
- <br>
-
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_test_table_prolog(filehandle, table_heading)
-#
-# Write heading for test case description table.
-#
-
-sub write_test_table_prolog(*$)
-{
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <center>
- <table width="80%" cellpadding=2 cellspacing=1 border=0>
-
- <tr>
- <td><br></td>
- </tr>
-
- <tr>
- <td class="tableHead">$_[1]</td>
- </tr>
-
- <tr>
- <td class="testDescription">
- <dl>
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_test_table_entry(filehandle, test_name, test_description)
-#
-# Write entry for the test table.
-#
-
-sub write_test_table_entry(*$$)
-{
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <dt>$_[1]<a name="$_[1]">&nbsp;</a></dt>
- <dd>$_[2]<br><br></dd>
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_test_table_epilog(filehandle)
-#
-# Write end of test description table HTML code.
-#
-
-sub write_test_table_epilog(*)
-{
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- </dl>
- </td>
- </tr>
- </table>
- </center>
- <br>
-
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_source_prolog(filehandle)
-#
-# Write start of source code table.
-#
-
-sub write_source_prolog(*)
-{
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <table cellpadding=0 cellspacing=0 border=0>
- <tr>
- <td><br></td>
- </tr>
- <tr>
- <td><pre class="source">
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_source_line(filehandle, line_num, source, hit_count, converted,
-# add_anchor)
-#
-# Write formatted source code line. Return a line in a format as needed
-# by gen_png()
-#
-
-sub write_source_line(*$$$$$)
-{
- my $source_format;
- my $count;
- my $result;
- my $anchor_start = "";
- my $anchor_end = "";
-
- if (!(defined$_[3]))
- {
- $result = "";
- $source_format = "";
- $count = " "x15;
- }
- elsif ($_[3] == 0)
- {
- $result = $_[3];
- $source_format = '<span class="lineNoCov">';
- $count = sprintf("%15d", $_[3]);
- }
- elsif ($_[4] && defined($highlight))
- {
- $result = "*".$_[3];
- $source_format = '<span class="lineDiffCov">';
- $count = sprintf("%15d", $_[3]);
- }
- else
- {
- $result = $_[3];
- $source_format = '<span class="lineCov">';
- $count = sprintf("%15d", $_[3]);
- }
-
- $result .= ":".$_[2];
-
- # Write out a line number navigation anchor every $nav_resolution
- # lines if necessary
- if ($_[5])
- {
- $anchor_start = "<a name=\"$_[1]\">";
- $anchor_end = "</a>";
- }
-
-
- # *************************************************************
-
- write_html($_[0],
- $anchor_start.
- '<span class="lineNum">'.sprintf("%8d", $_[1]).
- " </span>$source_format$count : ".
- escape_html($_[2]).($source_format?"</span>":"").
- $anchor_end."\n");
-
- # *************************************************************
-
- return($result);
-}
-
-
-#
-# write_source_epilog(filehandle)
-#
-# Write end of source code table.
-#
-
-sub write_source_epilog(*)
-{
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- </pre>
- </td>
- </tr>
- </table>
- <br>
-
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_html_epilog(filehandle, base_dir[, break_frames])
-#
-# Write HTML page footer to FILEHANDLE. BREAK_FRAMES should be set when
-# this page is embedded in a frameset, clicking the URL link will then
-# break this frameset.
-#
-
-sub write_html_epilog(*$;$)
-{
- my $basedir = $_[1];
- my $break_code = "";
- my $epilog;
-
- if (defined($_[2]))
- {
- $break_code = " target=\"_parent\"";
- }
-
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="$_[1]glass.png" width=3 height=3 alt=""></td></tr>
- <tr><td class="versionInfo">Generated by: <a href="$lcov_url"$break_code>$lcov_version</a></td></tr>
- </table>
- <br>
-END_OF_HTML
- ;
-
- $epilog = $html_epilog;
- $epilog =~ s/\@basedir\@/$basedir/g;
-
- write_html($_[0], $epilog);
-}
-
-
-#
-# write_frameset(filehandle, basedir, basename, pagetitle)
-#
-#
-
-sub write_frameset(*$$$)
-{
- my $frame_width = $overview_width + 40;
-
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
-
- <html lang="en">
-
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>$_[3]</title>
- <link rel="stylesheet" type="text/css" href="$_[1]gcov.css">
- </head>
-
- <frameset cols="$frame_width,*">
- <frame src="$_[2].gcov.overview.$html_ext" name="overview">
- <frame src="$_[2].gcov.$html_ext" name="source">
- <noframes>
- <center>Frames not supported by your browser!<br></center>
- </noframes>
- </frameset>
-
- </html>
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# sub write_overview_line(filehandle, basename, line, link)
-#
-#
-
-sub write_overview_line(*$$$)
-{
- my $y1 = $_[2] - 1;
- my $y2 = $y1 + $nav_resolution - 1;
- my $x2 = $overview_width - 1;
-
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <area shape="rect" coords="0,$y1,$x2,$y2" href="$_[1].gcov.$html_ext#$_[3]" target="source" alt="overview">
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-#
-# write_overview(filehandle, basedir, basename, pagetitle, lines)
-#
-#
-
-sub write_overview(*$$$$)
-{
- my $index;
- my $max_line = $_[4] - 1;
- my $offset;
-
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
- <html lang="en">
-
- <head>
- <title>$_[3]</title>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <link rel="stylesheet" type="text/css" href="$_[1]gcov.css">
- </head>
-
- <body>
- <map name="overview">
-END_OF_HTML
- ;
-
- # *************************************************************
-
- # Make $offset the next higher multiple of $nav_resolution
- $offset = ($nav_offset + $nav_resolution - 1) / $nav_resolution;
- $offset = sprintf("%d", $offset ) * $nav_resolution;
-
- # Create image map for overview image
- for ($index = 1; $index <= $_[4]; $index += $nav_resolution)
- {
- # Enforce nav_offset
- if ($index < $offset + 1)
- {
- write_overview_line($_[0], $_[2], $index, 1);
- }
- else
- {
- write_overview_line($_[0], $_[2], $index, $index - $offset);
- }
- }
-
- # *************************************************************
-
- write_html($_[0], <<END_OF_HTML)
- </map>
-
- <center>
- <a href="$_[2].gcov.$html_ext#top" target="source">Top</a><br><br>
- <img src="$_[2].gcov.png" width=$overview_width height=$max_line alt="Overview" border=0 usemap="#overview">
- </center>
- </body>
- </html>
-END_OF_HTML
- ;
-
- # *************************************************************
-}
-
-
-# rate_to_col(found, hit)
-#
-# Return Lo, Med or Hi, depending on the coverage rate.
-#
-
-sub rate_to_col($$)
-{
- my ($found, $hit) = @_;
- my $rate;
-
- if ($found == 0) {
- return "Hi";
- }
- $rate = 100 * $hit / $found;
- if ($rate < $med_limit) {
- return "Lo";
- } elsif ($rate < $hi_limit) {
- return "Med";
- }
- return "Hi";
-}
-
-# format_rate(found, hit)
-#
-# Return formatted percent string for coverage rate.
-#
-
-sub format_rate($$)
-{
- return $_[0] == 0 ? "-" : sprintf("%.1f", $_[1] * 100 / $_[0])." %";
-}
-
-sub get_legend_code($$$)
-{
- my ($text, $med, $hi) = @_;
- my $result;
-
- $result = <<EOF;
- $text<br>
- <span class="coverLegendLo">0% to $med%</span>
- <span class="coverLegendMed">$med% to $hi%</span>
- <span class="coverLegendHi">$hi% to 100%</span>
-EOF
- return $result;
-}
-
-#
-# write_header(filehandle, type, trunc_file_name, rel_file_name, lines_found,
-# lines_hit, funcs_found, funcs_hit, sort_type)
-#
-# Write a complete standard page header. TYPE may be (0, 1, 2, 3, 4)
-# corresponding to (directory view header, file view header, source view
-# header, test case description header, function view header)
-#
-
-sub write_header(*$$$$$$$$)
-{
- local *HTML_HANDLE = $_[0];
- my $type = $_[1];
- my $trunc_name = $_[2];
- my $rel_filename = $_[3];
- my $lines_found = $_[4];
- my $lines_hit = $_[5];
- my $fn_found = $_[6];
- my $fn_hit = $_[7];
- my $sort_type = $_[8];
- my $base_dir;
- my $view;
- my $test;
- my $base_name;
-
- $base_name = basename($rel_filename);
-
- # Prepare text for "current view" field
- if ($type == 0)
- {
- # Main overview
- $base_dir = "";
- $view = $overview_title;
- }
- elsif ($type == 1)
- {
- # Directory overview
- $base_dir = get_relative_base_path($rel_filename);
- $view = "<a href=\"$base_dir"."index.$html_ext\">".
- "$overview_title</a> - $trunc_name";
- }
- elsif ($type == 2 || $type == 4)
- {
- # File view
- my $dir_name = dirname($rel_filename);
-
- $base_dir = get_relative_base_path($dir_name);
- if ($frames)
- {
- # Need to break frameset when clicking any of these
- # links
- $view = "<a href=\"$base_dir"."index.$html_ext\" ".
- "target=\"_parent\">$overview_title</a> - ".
- "<a href=\"index.$html_ext\" target=\"_parent\">".
- "$dir_name</a> - $base_name";
- }
- else
- {
- $view = "<a href=\"$base_dir"."index.$html_ext\">".
- "$overview_title</a> - ".
- "<a href=\"index.$html_ext\">".
- "$dir_name</a> - $base_name";
- }
-
- # Add function suffix
- if ($func_coverage) {
- if ($type == 2) {
- $view .= " (source / <a href=\"$base_name.func.$html_ext\">functions</a>)";
- } elsif ($type == 4) {
- $view .= " (<a href=\"$base_name.gcov.$html_ext\">source</a> / functions)";
- }
- }
- }
- elsif ($type == 3)
- {
- # Test description header
- $base_dir = "";
- $view = "<a href=\"$base_dir"."index.$html_ext\">".
- "$overview_title</a> - test case descriptions";
- }
-
- # Prepare text for "test" field
- $test = escape_html($test_title);
-
- # Append link to test description page if available
- if (%test_description && ($type != 3))
- {
- if ($frames && ($type == 2 || $type == 4))
- {
- # Need to break frameset when clicking this link
- $test .= " ( <a href=\"$base_dir".
- "descriptions.$html_ext\" target=\"_parent\">".
- "view descriptions</a> )";
- }
- else
- {
- $test .= " ( <a href=\"$base_dir".
- "descriptions.$html_ext\">".
- "view descriptions</a> )";
- }
- }
-
- # Write header
- write_header_prolog(*HTML_HANDLE, $base_dir);
- write_header_line(*HTML_HANDLE, 0, "Current view:", $view,
- "Found", "Hit", "Coverage");
- write_header_line(*HTML_HANDLE, 1, "Test:", $test, "Lines:",
- $lines_found, $lines_hit,
- $rate_name[classify_rate($lines_found, $lines_hit,
- $med_limit, $hi_limit)],
- format_rate($lines_found, $lines_hit));
- if ($func_coverage) {
- write_header_line(*HTML_HANDLE, 1, "Date:", $date, "Functions:",
- $fn_found, $fn_hit,
- $rate_name[classify_rate($fn_found,
- $fn_hit,
- $fn_med_limit,
- $fn_hi_limit)],
- format_rate($fn_found, $fn_hit));
- } else {
- write_header_line(*HTML_HANDLE, 4, "Date:", $date);
- }
- if ($legend) {
- if ($type == 0 || $type == 1) {
- my $line_code = get_legend_code("Line coverage:",
- $med_limit, $hi_limit);
- my $func_code = "";
-
- if ($func_coverage) {
- $func_code = get_legend_code(
- "Function coverage:",
- $fn_med_limit,
- $fn_hi_limit);
- }
- write_header_line(*HTML_HANDLE, 2, "Colors:",
- $line_code, $func_code);
- } elsif ($type == 2 || $type == 4) {
- write_header_line(*HTML_HANDLE, 3, "Colors:",
- "not hit", "hit");
- }
- }
- write_header_epilog(*HTML_HANDLE, $base_dir);
-}
-
-
-#
-# split_filename(filename)
-#
-# Return (path, filename, extension) for a given FILENAME.
-#
-
-sub split_filename($)
-{
- if (!$_[0]) { return(); }
- my @path_components = split('/', $_[0]);
- my @file_components = split('\.', pop(@path_components));
- my $extension = pop(@file_components);
-
- return (join("/",@path_components), join(".",@file_components),
- $extension);
-}
-
-#
-# get_sorted_keys(hash_ref, sort_type)
-#
-
-sub get_sorted_keys($$)
-{
- my ($hash, $type) = @_;
-
- if ($type == 0) {
- # Sort by name
- return sort(keys(%{$hash}));
- } elsif ($type == 1) {
- # Sort by line coverage
- return sort({$hash->{$a}[5] <=> $hash->{$b}[5]} keys(%{$hash}));
- } elsif ($type == 2) {
- # Sort by function coverage;
- return sort({$hash->{$a}[6] <=> $hash->{$b}[6]} keys(%{$hash}));
- }
-}
-
-sub get_sort_code($$$)
-{
- my ($link, $alt, $base) = @_;
- my $png;
- my $link_start;
- my $link_end;
-
- if (!defined($link)) {
- $png = "glass.png";
- $link_start = "";
- $link_end = "";
- } else {
- $png = "updown.png";
- $link_start = '<a href="'.$link.'">';
- $link_end = "</a>";
- }
-
- return ' <span class="tableHeadSort">'.$link_start.
- '<img src="'.$base.$png.'" width=10 height=14 '.
- 'alt="'.$alt.'" title="'.$alt.'" border=0>'.$link_end.'</span>';
-}
-
-sub get_file_code($$$$)
-{
- my ($type, $text, $sort_button, $base) = @_;
- my $result = $text;
- my $link;
-
- if ($sort_button) {
- if ($type == 1) {
- $link = "index.$html_ext";
- } else {
- $link = "index-detail.$html_ext";
- }
- }
- $result .= get_sort_code($link, "Sort by name", $base);
-
- return $result;
-}
-
-sub get_line_code($$$$$)
-{
- my ($type, $sort_type, $text, $sort_button, $base) = @_;
- my $result = $text;
- my $sort_link;
-
- if ($type == 1) {
- # Just text
- if ($sort_button) {
- $sort_link = "index-sort-l.$html_ext";
- }
- } elsif ($type == 2) {
- # Text + link to detail view
- $result .= ' ( <a class="detail" href="index-detail'.
- $fileview_sortname[$sort_type].'.'.$html_ext.
- '">show details</a> )';
- if ($sort_button) {
- $sort_link = "index-sort-l.$html_ext";
- }
- } else {
- # Text + link to standard view
- $result .= ' ( <a class="detail" href="index'.
- $fileview_sortname[$sort_type].'.'.$html_ext.
- '">hide details</a> )';
- if ($sort_button) {
- $sort_link = "index-detail-sort-l.$html_ext";
- }
- }
- # Add sort button
- $result .= get_sort_code($sort_link, "Sort by line coverage", $base);
-
- return $result;
-}
-
-sub get_func_code($$$$)
-{
- my ($type, $text, $sort_button, $base) = @_;
- my $result = $text;
- my $link;
-
- if ($sort_button) {
- if ($type == 1) {
- $link = "index-sort-f.$html_ext";
- } else {
- $link = "index-detail-sort-f.$html_ext";
- }
- }
- $result .= get_sort_code($link, "Sort by function coverage", $base);
- return $result;
-}
-
-#
-# write_file_table(filehandle, base_dir, overview, testhash, testfnchash,
-# fileview, sort_type)
-#
-# Write a complete file table. OVERVIEW is a reference to a hash containing
-# the following mapping:
-#
-# filename -> "lines_found,lines_hit,funcs_found,funcs_hit,page_link,
-# func_link"
-#
-# TESTHASH is a reference to the following hash:
-#
-# filename -> \%testdata
-# %testdata: name of test affecting this file -> \%testcount
-# %testcount: line number -> execution count for a single test
-#
-# Heading of first column is "Filename" if FILEVIEW is true, "Directory name"
-# otherwise.
-#
-
-sub write_file_table(*$$$$$$)
-{
- local *HTML_HANDLE = $_[0];
- my $base_dir = $_[1];
- my $overview = $_[2];
- my $testhash = $_[3];
- my $testfnchash = $_[4];
- my $fileview = $_[5];
- my $sort_type = $_[6];
- my $filename;
- my $bar_graph;
- my $hit;
- my $found;
- my $fn_found;
- my $fn_hit;
- my $page_link;
- my $testname;
- my $testdata;
- my $testfncdata;
- my $testcount;
- my $testfnccount;
- my %affecting_tests;
- my $line_code = "";
- my $func_code;
- my $file_code;
-
- # Determine HTML code for column headings
- if (($base_dir ne "") && $show_details)
- {
- my $detailed = keys(%{$testhash});
-
- $file_code = get_file_code($detailed ? 2 : 1,
- $fileview ? "Filename" : "Directory",
- $sort && $sort_type != 0, $base_dir);
- $line_code = get_line_code($detailed ? 3 : 2, $sort_type,
- "Line Coverage",
- $sort && $sort_type != 1, $base_dir);
- $func_code = get_func_code($detailed ? 2 : 1, "Functions",
- $sort && $sort_type != 2, $base_dir);
- } else {
- $file_code = get_file_code(1,
- $fileview ? "Filename" : "Directory",
- $sort && $sort_type != 0, $base_dir);
- $line_code = get_line_code(1, $sort_type, "Line Coverage",
- $sort && $sort_type != 1, $base_dir);
- $func_code = get_func_code(1, "Functions",
- $sort && $sort_type != 2, $base_dir);
- }
-
- write_file_table_prolog(*HTML_HANDLE, $file_code, $line_code,
- $func_code);
-
- foreach $filename (get_sorted_keys($overview, $sort_type))
- {
- ($found, $hit, $fn_found, $fn_hit, $page_link)
- = @{$overview->{$filename}};
- $bar_graph = get_bar_graph_code($base_dir, $found, $hit);
-
- $testdata = $testhash->{$filename};
- $testfncdata = $testfnchash->{$filename};
-
- write_file_table_entry(*HTML_HANDLE, $filename, $bar_graph,
- $found, $hit, $fn_found, $fn_hit,
- $page_link);
-
- # Check whether we should write test specific coverage
- # as well
- if (!($show_details && $testdata)) { next; }
-
- # Filter out those tests that actually affect this file
- %affecting_tests = %{ get_affecting_tests($testdata,
- $testfncdata) };
-
- # Does any of the tests affect this file at all?
- if (!%affecting_tests) { next; }
-
- # Write test details for this entry
- write_file_table_detail_heading(*HTML_HANDLE, "Test name",
- "Lines hit", "Functions hit");
-
- foreach $testname (keys(%affecting_tests))
- {
- ($found, $hit, $fn_found, $fn_hit) =
- split(",", $affecting_tests{$testname});
-
- # Insert link to description of available
- if ($test_description{$testname})
- {
- $testname = "<a href=\"$base_dir".
- "descriptions.$html_ext#$testname\">".
- "$testname</a>";
- }
-
- write_file_table_detail_entry(*HTML_HANDLE, $testname,
- $found, $hit, $fn_found, $fn_hit);
- }
- }
-
- write_file_table_epilog(*HTML_HANDLE);
-}
-
-
-#
-# get_found_and_hit(hash)
-#
-# Return the count for entries (found) and entries with an execution count
-# greater than zero (hit) in a hash (linenumber -> execution count) as
-# a list (found, hit)
-#
-
-sub get_found_and_hit($)
-{
- my %hash = %{$_[0]};
- my $found = 0;
- my $hit = 0;
-
- # Calculate sum
- $found = 0;
- $hit = 0;
-
- foreach (keys(%hash))
- {
- $found++;
- if ($hash{$_}>0) { $hit++; }
- }
-
- return ($found, $hit);
-}
-
-
-#
-# get_func_found_and_hit(sumfnccount)
-#
-# Return (f_found, f_hit) for sumfnccount
-#
-
-sub get_func_found_and_hit($)
-{
- my ($sumfnccount) = @_;
- my $function;
- my $fn_found;
- my $fn_hit;
-
- $fn_found = scalar(keys(%{$sumfnccount}));
- $fn_hit = 0;
- foreach $function (keys(%{$sumfnccount})) {
- if ($sumfnccount->{$function} > 0) {
- $fn_hit++;
- }
- }
- return ($fn_found, $fn_hit);
-}
-
-
-#
-# get_affecting_tests(testdata, testfncdata)
-#
-# HASHREF contains a mapping filename -> (linenumber -> exec count). Return
-# a hash containing mapping filename -> "lines found, lines hit" for each
-# filename which has a nonzero hit count.
-#
-
-sub get_affecting_tests($$)
-{
- my $testdata = $_[0];
- my $testfncdata = $_[1];
- my $testname;
- my $testcount;
- my $testfnccount;
- my %result;
- my $found;
- my $hit;
- my $fn_found;
- my $fn_hit;
-
- foreach $testname (keys(%{$testdata}))
- {
- # Get (line number -> count) hash for this test case
- $testcount = $testdata->{$testname};
- $testfnccount = $testfncdata->{$testname};
-
- # Calculate sum
- ($found, $hit) = get_found_and_hit($testcount);
- ($fn_found, $fn_hit) = get_func_found_and_hit($testfnccount);
-
- if ($hit>0)
- {
- $result{$testname} = "$found,$hit,$fn_found,$fn_hit";
- }
- }
-
- return(\%result);
-}
-
-
-sub get_hash_reverse($)
-{
- my ($hash) = @_;
- my %result;
-
- foreach (keys(%{$hash})) {
- $result{$hash->{$_}} = $_;
- }
-
- return \%result;
-}
-
-#
-# write_source(filehandle, source_filename, count_data, checksum_data,
-# converted_data, func_data)
-#
-# Write an HTML view of a source code file. Returns a list containing
-# data as needed by gen_png().
-#
-# Die on error.
-#
-
-sub write_source($$$$$$)
-{
- local *HTML_HANDLE = $_[0];
- local *SOURCE_HANDLE;
- my $source_filename = $_[1];
- my %count_data;
- my $line_number;
- my @result;
- my $checkdata = $_[3];
- my $converted = $_[4];
- my $funcdata = $_[5];
- my $datafunc = get_hash_reverse($funcdata);
- my $add_anchor;
-
- if ($_[2])
- {
- %count_data = %{$_[2]};
- }
-
- open(SOURCE_HANDLE, "<".$source_filename)
- or die("ERROR: cannot open $source_filename for reading!\n");
-
- write_source_prolog(*HTML_HANDLE);
-
- for ($line_number = 1; <SOURCE_HANDLE> ; $line_number++)
- {
- chomp($_);
-
- # Source code matches coverage data?
- if (defined($checkdata->{$line_number}) &&
- ($checkdata->{$line_number} ne md5_base64($_)))
- {
- die("ERROR: checksum mismatch at $source_filename:".
- "$line_number\n");
- }
-
- $add_anchor = 0;
- if ($frames) {
- if (($line_number - 1) % $nav_resolution == 0) {
- $add_anchor = 1;
- }
- }
- if ($func_coverage) {
- if ($line_number == 1) {
- $add_anchor = 1;
- } elsif (defined($datafunc->{$line_number +
- $func_offset})) {
- $add_anchor = 1;
- }
- }
- push (@result,
- write_source_line(HTML_HANDLE, $line_number,
- $_, $count_data{$line_number},
- $converted->{$line_number},
- $add_anchor));
- }
-
- close(SOURCE_HANDLE);
- write_source_epilog(*HTML_HANDLE);
- return(@result);
-}
-
-
-sub funcview_get_func_code($$$)
-{
- my ($name, $base, $type) = @_;
- my $result;
- my $link;
-
- if ($sort && $type == 1) {
- $link = "$name.func.$html_ext";
- }
- $result = "Function Name";
- $result .= get_sort_code($link, "Sort by function name", $base);
-
- return $result;
-}
-
-sub funcview_get_count_code($$$)
-{
- my ($name, $base, $type) = @_;
- my $result;
- my $link;
-
- if ($sort && $type == 0) {
- $link = "$name.func-sort-c.$html_ext";
- }
- $result = "Hit count";
- $result .= get_sort_code($link, "Sort by hit count", $base);
-
- return $result;
-}
-
-#
-# funcview_get_sorted(funcdata, sumfncdata, sort_type)
-#
-# Depending on the value of sort_type, return a list of functions sorted
-# by name (type 0) or by the associated call count (type 1).
-#
-
-sub funcview_get_sorted($$$)
-{
- my ($funcdata, $sumfncdata, $type) = @_;
-
- if ($type == 0) {
- return sort(keys(%{$funcdata}));
- }
- return sort({$sumfncdata->{$b} <=> $sumfncdata->{$a}}
- keys(%{$sumfncdata}));
-}
-
-#
-# write_function_table(filehandle, source_file, sumcount, funcdata,
-# sumfnccount, testfncdata)
-#
-# Write an HTML table listing all functions in a source file, including
-# also function call counts and line coverages inside of each function.
-#
-# Die on error.
-#
-
-sub write_function_table(*$$$$$$$$)
-{
- local *HTML_HANDLE = $_[0];
- my $source = $_[1];
- my $sumcount = $_[2];
- my $funcdata = $_[3];
- my $sumfncdata = $_[4];
- my $testfncdata = $_[5];
- my $name = $_[6];
- my $base = $_[7];
- my $type = $_[8];
- my $func;
- my $func_code;
- my $count_code;
-
- # Get HTML code for headings
- $func_code = funcview_get_func_code($name, $base, $type);
- $count_code = funcview_get_count_code($name, $base, $type);
- write_html(*HTML_HANDLE, <<END_OF_HTML)
- <center>
- <table width="60%" cellpadding=1 cellspacing=1 border=0>
- <tr><td><br></td></tr>
- <tr>
- <td width="80%" class="tableHead">$func_code</td>
- <td width="20%" class="tableHead">$count_code</td>
- </tr>
-END_OF_HTML
- ;
-
- # Get a sorted table
- foreach $func (funcview_get_sorted($funcdata, $sumfncdata, $type)) {
- my $startline = $funcdata->{$func} - $func_offset;
- my $name = escape_html($func);
- my $count = $sumfncdata->{$name};
- my $countstyle;
-
- if ($startline < 1) {
- $startline = 1;
- }
- if ($count == 0) {
- $countstyle = "coverFnLo";
- } else {
- $countstyle = "coverFnHi";
- }
-
- write_html(*HTML_HANDLE, <<END_OF_HTML)
- <tr>
- <td class="coverFn"><a href="$source#$startline">$name</a></td>
- <td class="$countstyle">$count</td>
- </tr>
-END_OF_HTML
- ;
- }
- write_html(*HTML_HANDLE, <<END_OF_HTML)
- </table>
- <br>
- </center>
-END_OF_HTML
- ;
-}
-
-
-#
-# info(printf_parameter)
-#
-# Use printf to write PRINTF_PARAMETER to stdout only when the $quiet flag
-# is not set.
-#
-
-sub info(@)
-{
- if (!$quiet)
- {
- # Print info string
- printf(@_);
- }
-}
-
-
-#
-# subtract_counts(data_ref, base_ref)
-#
-
-sub subtract_counts($$)
-{
- my %data = %{$_[0]};
- my %base = %{$_[1]};
- my $line;
- my $data_count;
- my $base_count;
- my $hit = 0;
- my $found = 0;
-
- foreach $line (keys(%data))
- {
- $found++;
- $data_count = $data{$line};
- $base_count = $base{$line};
-
- if (defined($base_count))
- {
- $data_count -= $base_count;
-
- # Make sure we don't get negative numbers
- if ($data_count<0) { $data_count = 0; }
- }
-
- $data{$line} = $data_count;
- if ($data_count > 0) { $hit++; }
- }
-
- return (\%data, $found, $hit);
-}
-
-
-#
-# subtract_fnccounts(data, base)
-#
-# Subtract function call counts found in base from those in data.
-# Return (data, f_found, f_hit).
-#
-
-sub subtract_fnccounts($$)
-{
- my %data = %{$_[0]};
- my %base = %{$_[1]};
- my $func;
- my $data_count;
- my $base_count;
- my $fn_hit = 0;
- my $fn_found = 0;
-
- foreach $func (keys(%data)) {
- $fn_found++;
- $data_count = $data{$func};
- $base_count = $base{$func};
-
- if (defined($base_count)) {
- $data_count -= $base_count;
-
- # Make sure we don't get negative numbers
- if ($data_count < 0) {
- $data_count = 0;
- }
- }
-
- $data{$func} = $data_count;
- if ($data_count > 0) {
- $fn_hit++;
- }
- }
-
- return (\%data, $fn_found, $fn_hit);
-}
-
-
-#
-# apply_baseline(data_ref, baseline_ref)
-#
-# Subtract the execution counts found in the baseline hash referenced by
-# BASELINE_REF from actual data in DATA_REF.
-#
-
-sub apply_baseline($$)
-{
- my %data_hash = %{$_[0]};
- my %base_hash = %{$_[1]};
- my $filename;
- my $testname;
- my $data;
- my $data_testdata;
- my $data_funcdata;
- my $data_checkdata;
- my $data_testfncdata;
- my $data_count;
- my $data_testfnccount;
- my $base;
- my $base_checkdata;
- my $base_sumfnccount;
- my $base_count;
- my $sumcount;
- my $sumfnccount;
- my $found;
- my $hit;
- my $fn_found;
- my $fn_hit;
-
- foreach $filename (keys(%data_hash))
- {
- # Get data set for data and baseline
- $data = $data_hash{$filename};
- $base = $base_hash{$filename};
-
- # Skip data entries for which no base entry exists
- if (!defined($base))
- {
- next;
- }
-
- # Get set entries for data and baseline
- ($data_testdata, undef, $data_funcdata, $data_checkdata,
- $data_testfncdata) = get_info_entry($data);
- (undef, $base_count, undef, $base_checkdata, undef,
- $base_sumfnccount) = get_info_entry($base);
-
- # Check for compatible checksums
- merge_checksums($data_checkdata, $base_checkdata, $filename);
-
- # sumcount has to be calculated anew
- $sumcount = {};
- $sumfnccount = {};
-
- # For each test case, subtract test specific counts
- foreach $testname (keys(%{$data_testdata}))
- {
- # Get counts of both data and baseline
- $data_count = $data_testdata->{$testname};
- $data_testfnccount = $data_testfncdata->{$testname};
-
- ($data_count, undef, $hit) =
- subtract_counts($data_count, $base_count);
- ($data_testfnccount) =
- subtract_fnccounts($data_testfnccount,
- $base_sumfnccount);
-
- # Check whether this test case did hit any line at all
- if ($hit > 0)
- {
- # Write back resulting hash
- $data_testdata->{$testname} = $data_count;
- $data_testfncdata->{$testname} =
- $data_testfnccount;
- }
- else
- {
- # Delete test case which did not impact this
- # file
- delete($data_testdata->{$testname});
- delete($data_testfncdata->{$testname});
- }
-
- # Add counts to sum of counts
- ($sumcount, $found, $hit) =
- add_counts($sumcount, $data_count);
- ($sumfnccount, $fn_found, $fn_hit) =
- add_fnccounts($sumfnccount, $data_testfnccount);
- }
-
- # Write back resulting entry
- set_info_entry($data, $data_testdata, $sumcount, $data_funcdata,
- $data_checkdata, $data_testfncdata, $sumfnccount,
- $found, $hit, $fn_found, $fn_hit);
-
- $data_hash{$filename} = $data;
- }
-
- return (\%data_hash);
-}
-
-
-#
-# remove_unused_descriptions()
-#
-# Removes all test descriptions from the global hash %test_description which
-# are not present in %info_data.
-#
-
-sub remove_unused_descriptions()
-{
- my $filename; # The current filename
- my %test_list; # Hash containing found test names
- my $test_data; # Reference to hash test_name -> count_data
- my $before; # Initial number of descriptions
- my $after; # Remaining number of descriptions
-
- $before = scalar(keys(%test_description));
-
- foreach $filename (keys(%info_data))
- {
- ($test_data) = get_info_entry($info_data{$filename});
- foreach (keys(%{$test_data}))
- {
- $test_list{$_} = "";
- }
- }
-
- # Remove descriptions for tests which are not in our list
- foreach (keys(%test_description))
- {
- if (!defined($test_list{$_}))
- {
- delete($test_description{$_});
- }
- }
-
- $after = scalar(keys(%test_description));
- if ($after < $before)
- {
- info("Removed ".($before - $after).
- " unused descriptions, $after remaining.\n");
- }
-}
-
-
-#
-# apply_prefix(filename, prefix)
-#
-# If FILENAME begins with PREFIX, remove PREFIX from FILENAME and return
-# resulting string, otherwise return FILENAME.
-#
-
-sub apply_prefix($$)
-{
- my $filename = $_[0];
- my $prefix = $_[1];
-
- if (defined($prefix) && ($prefix ne ""))
- {
- if ($filename =~ /^\Q$prefix\E\/(.*)$/)
- {
- return substr($filename, length($prefix) + 1);
- }
- }
-
- return $filename;
-}
-
-
-#
-# system_no_output(mode, parameters)
-#
-# Call an external program using PARAMETERS while suppressing depending on
-# the value of MODE:
-#
-# MODE & 1: suppress STDOUT
-# MODE & 2: suppress STDERR
-#
-# Return 0 on success, non-zero otherwise.
-#
-
-sub system_no_output($@)
-{
- my $mode = shift;
- my $result;
- local *OLD_STDERR;
- local *OLD_STDOUT;
-
- # Save old stdout and stderr handles
- ($mode & 1) && open(OLD_STDOUT, ">>&STDOUT");
- ($mode & 2) && open(OLD_STDERR, ">>&STDERR");
-
- # Redirect to /dev/null
- ($mode & 1) && open(STDOUT, ">/dev/null");
- ($mode & 2) && open(STDERR, ">/dev/null");
-
- system(@_);
- $result = $?;
-
- # Close redirected handles
- ($mode & 1) && close(STDOUT);
- ($mode & 2) && close(STDERR);
-
- # Restore old handles
- ($mode & 1) && open(STDOUT, ">>&OLD_STDOUT");
- ($mode & 2) && open(STDERR, ">>&OLD_STDERR");
-
- return $result;
-}
-
-
-#
-# read_config(filename)
-#
-# Read configuration file FILENAME and return a reference to a hash containing
-# all valid key=value pairs found.
-#
-
-sub read_config($)
-{
- my $filename = $_[0];
- my %result;
- my $key;
- my $value;
- local *HANDLE;
-
- if (!open(HANDLE, "<$filename"))
- {
- warn("WARNING: cannot read configuration file $filename\n");
- return undef;
- }
- while (<HANDLE>)
- {
- chomp;
- # Skip comments
- s/#.*//;
- # Remove leading blanks
- s/^\s+//;
- # Remove trailing blanks
- s/\s+$//;
- next unless length;
- ($key, $value) = split(/\s*=\s*/, $_, 2);
- if (defined($key) && defined($value))
- {
- $result{$key} = $value;
- }
- else
- {
- warn("WARNING: malformed statement in line $. ".
- "of configuration file $filename\n");
- }
- }
- close(HANDLE);
- return \%result;
-}
-
-
-#
-# apply_config(REF)
-#
-# REF is a reference to a hash containing the following mapping:
-#
-# key_string => var_ref
-#
-# where KEY_STRING is a keyword and VAR_REF is a reference to an associated
-# variable. If the global configuration hash CONFIG contains a value for
-# keyword KEY_STRING, VAR_REF will be assigned the value for that keyword.
-#
-
-sub apply_config($)
-{
- my $ref = $_[0];
-
- foreach (keys(%{$ref}))
- {
- if (defined($config->{$_}))
- {
- ${$ref->{$_}} = $config->{$_};
- }
- }
-}
-
-
-#
-# get_html_prolog(FILENAME)
-#
-# If FILENAME is defined, return contents of file. Otherwise return default
-# HTML prolog. Die on error.
-#
-
-sub get_html_prolog($)
-{
- my $filename = $_[0];
- my $result = "";
-
- if (defined($filename))
- {
- local *HANDLE;
-
- open(HANDLE, "<".$filename)
- or die("ERROR: cannot open html prolog $filename!\n");
- while (<HANDLE>)
- {
- $result .= $_;
- }
- close(HANDLE);
- }
- else
- {
- $result = <<END_OF_HTML
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<html lang="en">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>\@pagetitle\@</title>
- <link rel="stylesheet" type="text/css" href="\@basedir\@gcov.css">
-</head>
-
-<body>
-
-END_OF_HTML
- ;
- }
-
- return $result;
-}
-
-
-#
-# get_html_epilog(FILENAME)
-#
-# If FILENAME is defined, return contents of file. Otherwise return default
-# HTML epilog. Die on error.
-#
-sub get_html_epilog($)
-{
- my $filename = $_[0];
- my $result = "";
-
- if (defined($filename))
- {
- local *HANDLE;
-
- open(HANDLE, "<".$filename)
- or die("ERROR: cannot open html epilog $filename!\n");
- while (<HANDLE>)
- {
- $result .= $_;
- }
- close(HANDLE);
- }
- else
- {
- $result = <<END_OF_HTML
-
-</body>
-</html>
-END_OF_HTML
- ;
- }
-
- return $result;
-
-}
-
-sub warn_handler($)
-{
- my ($msg) = @_;
-
- warn("$tool_name: $msg");
-}
-
-sub die_handler($)
-{
- my ($msg) = @_;
-
- die("$tool_name: $msg");
-}
diff --git a/3rdParty/LCov/geninfo b/3rdParty/LCov/geninfo
deleted file mode 100755
index 055641b..0000000
--- a/3rdParty/LCov/geninfo
+++ /dev/null
@@ -1,2178 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright (c) International Business Machines Corp., 2002,2007
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or (at
-# your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-#
-# geninfo
-#
-# This script generates .info files from data files as created by code
-# instrumented with gcc's built-in profiling mechanism. Call it with
-# --help and refer to the geninfo man page to get information on usage
-# and available options.
-#
-#
-# Authors:
-# 2002-08-23 created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>
-# IBM Lab Boeblingen
-# based on code by Manoj Iyer <manjo@mail.utexas.edu> and
-# Megan Bock <mbock@us.ibm.com>
-# IBM Austin
-# 2002-09-05 / Peter Oberparleiter: implemented option that allows file list
-# 2003-04-16 / Peter Oberparleiter: modified read_gcov so that it can also
-# parse the new gcov format which is to be introduced in gcc 3.3
-# 2003-04-30 / Peter Oberparleiter: made info write to STDERR, not STDOUT
-# 2003-07-03 / Peter Oberparleiter: added line checksum support, added
-# --no-checksum
-# 2003-09-18 / Nigel Hinds: capture branch coverage data from GCOV
-# 2003-12-11 / Laurent Deniel: added --follow option
-# workaround gcov (<= 3.2.x) bug with empty .da files
-# 2004-01-03 / Laurent Deniel: Ignore empty .bb files
-# 2004-02-16 / Andreas Krebbel: Added support for .gcno/.gcda files and
-# gcov versioning
-# 2004-08-09 / Peter Oberparleiter: added configuration file support
-# 2008-07-14 / Tom Zoerner: added --function-coverage command line option
-# 2008-08-13 / Peter Oberparleiter: modified function coverage
-# implementation (now enabled per default)
-#
-
-use strict;
-use File::Basename;
-use Getopt::Long;
-use Digest::MD5 qw(md5_base64);
-
-
-# Constants
-our $lcov_version = "LCOV version 1.7";
-our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
-our $gcov_tool = "gcov";
-our $tool_name = basename($0);
-
-our $GCOV_VERSION_3_4_0 = 0x30400;
-our $GCOV_VERSION_3_3_0 = 0x30300;
-our $GCNO_FUNCTION_TAG = 0x01000000;
-our $GCNO_LINES_TAG = 0x01450000;
-our $GCNO_FILE_MAGIC = 0x67636e6f;
-our $BBG_FILE_MAGIC = 0x67626267;
-
-our $COMPAT_HAMMER = "hammer";
-
-our $ERROR_GCOV = 0;
-our $ERROR_SOURCE = 1;
-
-# Prototypes
-sub print_usage(*);
-sub gen_info($);
-sub process_dafile($);
-sub match_filename($@);
-sub solve_ambiguous_match($$$);
-sub split_filename($);
-sub solve_relative_path($$);
-sub get_dir($);
-sub read_gcov_header($);
-sub read_gcov_file($);
-sub read_bb_file($$);
-sub read_string(*$);
-sub read_gcno_file($$);
-sub read_gcno_string(*$);
-sub read_hammer_bbg_file($$);
-sub read_hammer_bbg_string(*$);
-sub unpack_int32($$);
-sub info(@);
-sub get_gcov_version();
-sub system_no_output($@);
-sub read_config($);
-sub apply_config($);
-sub gen_initial_info($);
-sub process_graphfile($);
-sub warn_handler($);
-sub die_handler($);
-
-# Global variables
-our $gcov_version;
-our $graph_file_extension;
-our $data_file_extension;
-our @data_directory;
-our $test_name = "";
-our $quiet;
-our $help;
-our $output_filename;
-our $base_directory;
-our $version;
-our $follow;
-our $checksum;
-our $no_checksum;
-our $preserve_paths;
-our $compat_libtool;
-our $no_compat_libtool;
-our $adjust_testname;
-our $config; # Configuration file contents
-our $compatibility; # Compatibility version flag - used to indicate
- # non-standard GCOV data format versions
-our @ignore_errors; # List of errors to ignore (parameter)
-our @ignore; # List of errors to ignore (array)
-our $initial;
-our $no_recursion = 0;
-our $maxdepth;
-
-our $cwd = `pwd`;
-chomp($cwd);
-
-
-#
-# Code entry point
-#
-
-# Register handler routine to be called when interrupted
-$SIG{"INT"} = \&int_handler;
-$SIG{__WARN__} = \&warn_handler;
-$SIG{__DIE__} = \&die_handler;
-
-# Read configuration file if available
-if (-r $ENV{"HOME"}."/.lcovrc")
-{
- $config = read_config($ENV{"HOME"}."/.lcovrc");
-}
-elsif (-r "/etc/lcovrc")
-{
- $config = read_config("/etc/lcovrc");
-}
-
-if ($config)
-{
- # Copy configuration file values to variables
- apply_config({
- "geninfo_gcov_tool" => \$gcov_tool,
- "geninfo_adjust_testname" => \$adjust_testname,
- "geninfo_checksum" => \$checksum,
- "geninfo_no_checksum" => \$no_checksum, # deprecated
- "geninfo_compat_libtool" => \$compat_libtool});
-
- # Merge options
- if (defined($no_checksum))
- {
- $checksum = ($no_checksum ? 0 : 1);
- $no_checksum = undef;
- }
-}
-
-# Parse command line options
-if (!GetOptions("test-name=s" => \$test_name,
- "output-filename=s" => \$output_filename,
- "checksum" => \$checksum,
- "no-checksum" => \$no_checksum,
- "base-directory=s" => \$base_directory,
- "version" =>\$version,
- "quiet" => \$quiet,
- "help|?" => \$help,
- "follow" => \$follow,
- "compat-libtool" => \$compat_libtool,
- "no-compat-libtool" => \$no_compat_libtool,
- "gcov-tool=s" => \$gcov_tool,
- "ignore-errors=s" => \@ignore_errors,
- "initial|i" => \$initial,
- "no-recursion" => \$no_recursion,
- ))
-{
- print(STDERR "Use $tool_name --help to get usage information\n");
- exit(1);
-}
-else
-{
- # Merge options
- if (defined($no_checksum))
- {
- $checksum = ($no_checksum ? 0 : 1);
- $no_checksum = undef;
- }
-
- if (defined($no_compat_libtool))
- {
- $compat_libtool = ($no_compat_libtool ? 0 : 1);
- $no_compat_libtool = undef;
- }
-}
-
-@data_directory = @ARGV;
-
-# Check for help option
-if ($help)
-{
- print_usage(*STDOUT);
- exit(0);
-}
-
-# Check for version option
-if ($version)
-{
- print("$tool_name: $lcov_version\n");
- exit(0);
-}
-
-# Make sure test names only contain valid characters
-if ($test_name =~ s/\W/_/g)
-{
- warn("WARNING: invalid characters removed from testname!\n");
-}
-
-# Adjust test name to include uname output if requested
-if ($adjust_testname)
-{
- $test_name .= "__".`uname -a`;
- $test_name =~ s/\W/_/g;
-}
-
-# Make sure base_directory contains an absolute path specification
-if ($base_directory)
-{
- $base_directory = solve_relative_path($cwd, $base_directory);
-}
-
-# Check for follow option
-if ($follow)
-{
- $follow = "-follow"
-}
-else
-{
- $follow = "";
-}
-
-# Determine checksum mode
-if (defined($checksum))
-{
- # Normalize to boolean
- $checksum = ($checksum ? 1 : 0);
-}
-else
-{
- # Default is off
- $checksum = 0;
-}
-
-# Determine libtool compatibility mode
-if (defined($compat_libtool))
-{
- $compat_libtool = ($compat_libtool? 1 : 0);
-}
-else
-{
- # Default is on
- $compat_libtool = 1;
-}
-
-# Determine max depth for recursion
-if ($no_recursion)
-{
- $maxdepth = "-maxdepth 1";
-}
-else
-{
- $maxdepth = "";
-}
-
-# Check for directory name
-if (!@data_directory)
-{
- die("No directory specified\n".
- "Use $tool_name --help to get usage information\n");
-}
-else
-{
- foreach (@data_directory)
- {
- stat($_);
- if (!-r _)
- {
- die("ERROR: cannot read $_!\n");
- }
- }
-}
-
-if (@ignore_errors)
-{
- my @expanded;
- my $error;
-
- # Expand comma-separated entries
- foreach (@ignore_errors) {
- if (/,/)
- {
- push(@expanded, split(",", $_));
- }
- else
- {
- push(@expanded, $_);
- }
- }
-
- foreach (@expanded)
- {
- /^gcov$/ && do { $ignore[$ERROR_GCOV] = 1; next; } ;
- /^source$/ && do { $ignore[$ERROR_SOURCE] = 1; next; };
- die("ERROR: unknown argument for --ignore-errors: $_\n");
- }
-}
-
-if (system_no_output(3, $gcov_tool, "--help") == -1)
-{
- die("ERROR: need tool $gcov_tool!\n");
-}
-
-$gcov_version = get_gcov_version();
-
-if ($gcov_version < $GCOV_VERSION_3_4_0)
-{
- if (defined($compatibility) && $compatibility eq $COMPAT_HAMMER)
- {
- $data_file_extension = ".da";
- $graph_file_extension = ".bbg";
- }
- else
- {
- $data_file_extension = ".da";
- $graph_file_extension = ".bb";
- }
-}
-else
-{
- $data_file_extension = ".gcda";
- $graph_file_extension = ".gcno";
-}
-
-# Check for availability of --preserve-paths option of gcov
-if (`$gcov_tool --help` =~ /--preserve-paths/)
-{
- $preserve_paths = "--preserve-paths";
-}
-
-# Check output filename
-if (defined($output_filename) && ($output_filename ne "-"))
-{
- # Initially create output filename, data is appended
- # for each data file processed
- local *DUMMY_HANDLE;
- open(DUMMY_HANDLE, ">$output_filename")
- or die("ERROR: cannot create $output_filename!\n");
- close(DUMMY_HANDLE);
-
- # Make $output_filename an absolute path because we're going
- # to change directories while processing files
- if (!($output_filename =~ /^\/(.*)$/))
- {
- $output_filename = $cwd."/".$output_filename;
- }
-}
-
-# Do something
-if ($initial)
-{
- foreach (@data_directory)
- {
- gen_initial_info($_);
- }
-}
-else
-{
- foreach (@data_directory)
- {
- gen_info($_);
- }
-}
-info("Finished .info-file creation\n");
-
-exit(0);
-
-
-
-#
-# print_usage(handle)
-#
-# Print usage information.
-#
-
-sub print_usage(*)
-{
- local *HANDLE = $_[0];
-
- print(HANDLE <<END_OF_USAGE);
-Usage: $tool_name [OPTIONS] DIRECTORY
-
-Traverse DIRECTORY and create a .info file for each data file found. Note
-that you may specify more than one directory, all of which are then processed
-sequentially.
-
- -h, --help Print this help, then exit
- -v, --version Print version number, then exit
- -q, --quiet Do not print progress messages
- -i, --initial Capture initial zero coverage data
- -t, --test-name NAME Use test case name NAME for resulting data
- -o, --output-filename OUTFILE Write data only to OUTFILE
- -f, --follow Follow links when searching .da/.gcda files
- -b, --base-directory DIR Use DIR as base directory for relative paths
- --(no-)checksum Enable (disable) line checksumming
- --(no-)compat-libtool Enable (disable) libtool compatibility mode
- --gcov-tool TOOL Specify gcov tool location
- --ignore-errors ERROR Continue after ERROR (gcov, source)
- --no-recursion Exlude subdirectories from processing
- --function-coverage Capture function call counts
-
-For more information see: $lcov_url
-END_OF_USAGE
- ;
-}
-
-
-#
-# gen_info(directory)
-#
-# Traverse DIRECTORY and create a .info file for each data file found.
-# The .info file contains TEST_NAME in the following format:
-#
-# TN:<test name>
-#
-# For each source file name referenced in the data file, there is a section
-# containing source code and coverage data:
-#
-# SF:<absolute path to the source file>
-# FN:<line number of function start>,<function name> for each function
-# DA:<line number>,<execution count> for each instrumented line
-# LH:<number of lines with an execution count> greater than 0
-# LF:<number of instrumented lines>
-#
-# Sections are separated by:
-#
-# end_of_record
-#
-# In addition to the main source code file there are sections for each
-# #included file containing executable code. Note that the absolute path
-# of a source file is generated by interpreting the contents of the respective
-# graph file. Relative filenames are prefixed with the directory in which the
-# graph file is found. Note also that symbolic links to the graph file will be
-# resolved so that the actual file path is used instead of the path to a link.
-# This approach is necessary for the mechanism to work with the /proc/gcov
-# files.
-#
-# Die on error.
-#
-
-sub gen_info($)
-{
- my $directory = $_[0];
- my @file_list;
-
- if (-d $directory)
- {
- info("Scanning $directory for $data_file_extension ".
- "files ...\n");
-
- @file_list = `find "$directory" $maxdepth $follow -name \\*$data_file_extension -type f 2>/dev/null`;
- chomp(@file_list);
- @file_list or die("ERROR: no $data_file_extension files found ".
- "in $directory!\n");
- info("Found %d data files in %s\n", $#file_list+1, $directory);
- }
- else
- {
- @file_list = ($directory);
- }
-
- # Process all files in list
- foreach (@file_list) { process_dafile($_); }
-}
-
-
-#
-# process_dafile(da_filename)
-#
-# Create a .info file for a single data file.
-#
-# Die on error.
-#
-
-sub process_dafile($)
-{
- info("Processing %s\n", $_[0]);
-
- my $da_filename; # Name of data file to process
- my $da_dir; # Directory of data file
- my $source_dir; # Directory of source file
- my $da_basename; # data filename without ".da/.gcda" extension
- my $bb_filename; # Name of respective graph file
- my %bb_content; # Contents of graph file
- my $gcov_error; # Error code of gcov tool
- my $object_dir; # Directory containing all object files
- my $source_filename; # Name of a source code file
- my $gcov_file; # Name of a .gcov file
- my @gcov_content; # Content of a .gcov file
- my @gcov_branches; # Branch content of a .gcov file
- my @gcov_functions; # Function calls of a .gcov file
- my @gcov_list; # List of generated .gcov files
- my $line_number; # Line number count
- my $lines_hit; # Number of instrumented lines hit
- my $lines_found; # Number of instrumented lines found
- my $funcs_hit; # Number of instrumented functions hit
- my $funcs_found; # Number of instrumented functions found
- my $source; # gcov source header information
- my $object; # gcov object header information
- my @matches; # List of absolute paths matching filename
- my @unprocessed; # List of unprocessed source code files
- my $base_dir; # Base directory for current file
- my @result;
- my $index;
- my $da_renamed; # If data file is to be renamed
- local *INFO_HANDLE;
-
- # Get path to data file in absolute and normalized form (begins with /,
- # contains no more ../ or ./)
- $da_filename = solve_relative_path($cwd, $_[0]);
-
- # Get directory and basename of data file
- ($da_dir, $da_basename) = split_filename($da_filename);
-
- # avoid files from .libs dirs
- if ($compat_libtool && $da_dir =~ m/(.*)\/\.libs$/) {
- $source_dir = $1;
- } else {
- $source_dir = $da_dir;
- }
-
- if (-z $da_filename)
- {
- $da_renamed = 1;
- }
- else
- {
- $da_renamed = 0;
- }
-
- # Construct base_dir for current file
- if ($base_directory)
- {
- $base_dir = $base_directory;
- }
- else
- {
- $base_dir = $source_dir;
- }
-
- # Check for writable $base_dir (gcov will try to write files there)
- stat($base_dir);
- if (!-w _)
- {
- die("ERROR: cannot write to directory $base_dir!\n");
- }
-
- # Construct name of graph file
- $bb_filename = $da_dir."/".$da_basename.$graph_file_extension;
-
- # Find out the real location of graph file in case we're just looking at
- # a link
- while (readlink($bb_filename))
- {
- my $last_dir = dirname($bb_filename);
-
- $bb_filename = readlink($bb_filename);
- $bb_filename = solve_relative_path($last_dir, $bb_filename);
- }
-
- # Ignore empty graph file (e.g. source file with no statement)
- if (-z $bb_filename)
- {
- warn("WARNING: empty $bb_filename (skipped)\n");
- return;
- }
-
- # Read contents of graph file into hash. We need it later to find out
- # the absolute path to each .gcov file created as well as for
- # information about functions and their source code positions.
- if ($gcov_version < $GCOV_VERSION_3_4_0)
- {
- if (defined($compatibility) && $compatibility eq $COMPAT_HAMMER)
- {
- %bb_content = read_hammer_bbg_file($bb_filename,
- $base_dir);
- }
- else
- {
- %bb_content = read_bb_file($bb_filename, $base_dir);
- }
- }
- else
- {
- %bb_content = read_gcno_file($bb_filename, $base_dir);
- }
-
- # Set $object_dir to real location of object files. This may differ
- # from $da_dir if the graph file is just a link to the "real" object
- # file location.
- $object_dir = dirname($bb_filename);
-
- # Is the data file in a different directory? (this happens e.g. with
- # the gcov-kernel patch)
- if ($object_dir ne $da_dir)
- {
- # Need to create link to data file in $object_dir
- system("ln", "-s", $da_filename,
- "$object_dir/$da_basename$data_file_extension")
- and die ("ERROR: cannot create link $object_dir/".
- "$da_basename$data_file_extension!\n");
- }
-
- # Change to directory containing data files and apply GCOV
- chdir($base_dir);
-
- if ($da_renamed)
- {
- # Need to rename empty data file to workaround
- # gcov <= 3.2.x bug (Abort)
- system_no_output(3, "mv", "$da_filename", "$da_filename.ori")
- and die ("ERROR: cannot rename $da_filename\n");
- }
-
- # Execute gcov command and suppress standard output
- if ($preserve_paths)
- {
- $gcov_error = system_no_output(1, $gcov_tool, $da_filename,
- "-o", $object_dir,
- "--preserve-paths",
- "-b");
- }
- else
- {
- $gcov_error = system_no_output(1, $gcov_tool, $da_filename,
- "-o", $object_dir,
- "-b");
- }
-
- if ($da_renamed)
- {
- system_no_output(3, "mv", "$da_filename.ori", "$da_filename")
- and die ("ERROR: cannot rename $da_filename.ori");
- }
-
- # Clean up link
- if ($object_dir ne $da_dir)
- {
- unlink($object_dir."/".$da_basename.$data_file_extension);
- }
-
- if ($gcov_error)
- {
- if ($ignore[$ERROR_GCOV])
- {
- warn("WARNING: GCOV failed for $da_filename!\n");
- return;
- }
- die("ERROR: GCOV failed for $da_filename!\n");
- }
-
- # Collect data from resulting .gcov files and create .info file
- @gcov_list = glob("*.gcov");
-
- # Check for files
- if (!@gcov_list)
- {
- warn("WARNING: gcov did not create any files for ".
- "$da_filename!\n");
- }
-
- # Check whether we're writing to a single file
- if ($output_filename)
- {
- if ($output_filename eq "-")
- {
- *INFO_HANDLE = *STDOUT;
- }
- else
- {
- # Append to output file
- open(INFO_HANDLE, ">>$output_filename")
- or die("ERROR: cannot write to ".
- "$output_filename!\n");
- }
- }
- else
- {
- # Open .info file for output
- open(INFO_HANDLE, ">$da_filename.info")
- or die("ERROR: cannot create $da_filename.info!\n");
- }
-
- # Write test name
- printf(INFO_HANDLE "TN:%s\n", $test_name);
-
- # Traverse the list of generated .gcov files and combine them into a
- # single .info file
- @unprocessed = keys(%bb_content);
- foreach $gcov_file (@gcov_list)
- {
- ($source, $object) = read_gcov_header($gcov_file);
-
- if (defined($source))
- {
- $source = solve_relative_path($base_dir, $source);
- }
-
- # gcov will happily create output even if there's no source code
- # available - this interferes with checksum creation so we need
- # to pull the emergency brake here.
- if (defined($source) && ! -r $source && $checksum)
- {
- if ($ignore[$ERROR_SOURCE])
- {
- warn("WARNING: could not read source file ".
- "$source\n");
- next;
- }
- die("ERROR: could not read source file $source\n");
- }
-
- @matches = match_filename(defined($source) ? $source :
- $gcov_file, keys(%bb_content));
-
- # Skip files that are not mentioned in the graph file
- if (!@matches)
- {
- warn("WARNING: cannot find an entry for ".$gcov_file.
- " in $graph_file_extension file, skipping ".
- "file!\n");
- unlink($gcov_file);
- next;
- }
-
- # Read in contents of gcov file
- @result = read_gcov_file($gcov_file);
- @gcov_content = @{$result[0]};
- @gcov_branches = @{$result[1]};
- @gcov_functions = @{$result[2]};
-
- # Skip empty files
- if (!@gcov_content)
- {
- warn("WARNING: skipping empty file ".$gcov_file."\n");
- unlink($gcov_file);
- next;
- }
-
- if (scalar(@matches) == 1)
- {
- # Just one match
- $source_filename = $matches[0];
- }
- else
- {
- # Try to solve the ambiguity
- $source_filename = solve_ambiguous_match($gcov_file,
- \@matches, \@gcov_content);
- }
-
- # Remove processed file from list
- for ($index = scalar(@unprocessed) - 1; $index >= 0; $index--)
- {
- if ($unprocessed[$index] eq $source_filename)
- {
- splice(@unprocessed, $index, 1);
- last;
- }
- }
-
- # Write absolute path of source file
- printf(INFO_HANDLE "SF:%s\n", $source_filename);
-
- # Write function-related information
- if (defined($bb_content{$source_filename}))
- {
- foreach (split(",",$bb_content{$source_filename}))
- {
- my ($fn, $line) = split("=", $_);
-
- if ($fn eq "") {
- next;
- }
-
- # Normalize function name
- $fn =~ s/\W/_/g;
-
- print(INFO_HANDLE "FN:$line,$fn\n");
- }
- }
-
- #--
- #-- FNDA: <call-count>, <function-name>
- #-- FNF: overall count of functions
- #-- FNH: overall count of functions with non-zero call count
- #--
- $funcs_found = 0;
- $funcs_hit = 0;
- while (@gcov_functions)
- {
- printf(INFO_HANDLE "FNDA:%s,%s\n",
- $gcov_functions[0],
- $gcov_functions[1]);
- $funcs_found++;
- $funcs_hit++ if $gcov_functions[0];
- splice(@gcov_functions,0,2);
- }
- if ($funcs_found > 0) {
- printf(INFO_HANDLE "FNF:%s\n", $funcs_found);
- printf(INFO_HANDLE "FNH:%s\n", $funcs_hit);
- }
-
- # Reset line counters
- $line_number = 0;
- $lines_found = 0;
- $lines_hit = 0;
-
- # Write coverage information for each instrumented line
- # Note: @gcov_content contains a list of (flag, count, source)
- # tuple for each source code line
- while (@gcov_content)
- {
- $line_number++;
-
- # Check for instrumented line
- if ($gcov_content[0])
- {
- $lines_found++;
- printf(INFO_HANDLE "DA:".$line_number.",".
- $gcov_content[1].($checksum ?
- ",". md5_base64($gcov_content[2]) : "").
- "\n");
-
- # Increase $lines_hit in case of an execution
- # count>0
- if ($gcov_content[1] > 0) { $lines_hit++; }
- }
-
- # Remove already processed data from array
- splice(@gcov_content,0,3);
- }
-
- #--
- #-- BA: <code-line>, <branch-coverage>
- #--
- #-- print one BA line for every branch of a
- #-- conditional. <branch-coverage> values
- #-- are:
- #-- 0 - not executed
- #-- 1 - executed but not taken
- #-- 2 - executed and taken
- #--
- while (@gcov_branches)
- {
- if ($gcov_branches[0])
- {
- printf(INFO_HANDLE "BA:%s,%s\n",
- $gcov_branches[0],
- $gcov_branches[1]);
- }
- splice(@gcov_branches,0,2);
- }
-
- # Write line statistics and section separator
- printf(INFO_HANDLE "LF:%s\n", $lines_found);
- printf(INFO_HANDLE "LH:%s\n", $lines_hit);
- print(INFO_HANDLE "end_of_record\n");
-
- # Remove .gcov file after processing
- unlink($gcov_file);
- }
-
- # Check for files which show up in the graph file but were never
- # processed
- if (@unprocessed && @gcov_list)
- {
- foreach (@unprocessed)
- {
- warn("WARNING: no data found for $_\n");
- }
- }
-
- if (!($output_filename && ($output_filename eq "-")))
- {
- close(INFO_HANDLE);
- }
-
- # Change back to initial directory
- chdir($cwd);
-}
-
-
-#
-# solve_relative_path(path, dir)
-#
-# Solve relative path components of DIR which, if not absolute, resides in PATH.
-#
-
-sub solve_relative_path($$)
-{
- my $path = $_[0];
- my $dir = $_[1];
- my $result;
-
- $result = $dir;
- # Prepend path if not absolute
- if ($dir =~ /^[^\/]/)
- {
- $result = "$path/$result";
- }
-
- # Remove //
- $result =~ s/\/\//\//g;
-
- # Remove .
- $result =~ s/\/\.\//\//g;
-
- # Solve ..
- while ($result =~ s/\/[^\/]+\/\.\.\//\//)
- {
- }
-
- # Remove preceding ..
- $result =~ s/^\/\.\.\//\//g;
-
- return $result;
-}
-
-
-#
-# match_filename(gcov_filename, list)
-#
-# Return a list of those entries of LIST which match the relative filename
-# GCOV_FILENAME.
-#
-
-sub match_filename($@)
-{
- my $filename = shift;
- my @list = @_;
- my @result;
-
- $filename =~ s/^(.*).gcov$/$1/;
-
- if ($filename =~ /^\/(.*)$/)
- {
- $filename = "$1";
- }
-
- foreach (@list)
- {
- if (/\/\Q$filename\E(.*)$/ && $1 eq "")
- {
- @result = (@result, $_);
- }
- }
- return @result;
-}
-
-
-#
-# solve_ambiguous_match(rel_filename, matches_ref, gcov_content_ref)
-#
-# Try to solve ambiguous matches of mapping (gcov file) -> (source code) file
-# by comparing source code provided in the GCOV file with that of the files
-# in MATCHES. REL_FILENAME identifies the relative filename of the gcov
-# file.
-#
-# Return the one real match or die if there is none.
-#
-
-sub solve_ambiguous_match($$$)
-{
- my $rel_name = $_[0];
- my $matches = $_[1];
- my $content = $_[2];
- my $filename;
- my $index;
- my $no_match;
- local *SOURCE;
-
- # Check the list of matches
- foreach $filename (@$matches)
- {
-
- # Compare file contents
- open(SOURCE, $filename)
- or die("ERROR: cannot read $filename!\n");
-
- $no_match = 0;
- for ($index = 2; <SOURCE>; $index += 3)
- {
- chomp;
-
- if ($_ ne @$content[$index])
- {
- $no_match = 1;
- last;
- }
- }
-
- close(SOURCE);
-
- if (!$no_match)
- {
- info("Solved source file ambiguity for $rel_name\n");
- return $filename;
- }
- }
-
- die("ERROR: could not match gcov data for $rel_name!\n");
-}
-
-
-#
-# split_filename(filename)
-#
-# Return (path, filename, extension) for a given FILENAME.
-#
-
-sub split_filename($)
-{
- my @path_components = split('/', $_[0]);
- my @file_components = split('\.', pop(@path_components));
- my $extension = pop(@file_components);
-
- return (join("/",@path_components), join(".",@file_components),
- $extension);
-}
-
-
-#
-# get_dir(filename);
-#
-# Return the directory component of a given FILENAME.
-#
-
-sub get_dir($)
-{
- my @components = split("/", $_[0]);
- pop(@components);
-
- return join("/", @components);
-}
-
-
-#
-# read_gcov_header(gcov_filename)
-#
-# Parse file GCOV_FILENAME and return a list containing the following
-# information:
-#
-# (source, object)
-#
-# where:
-#
-# source: complete relative path of the source code file (gcc >= 3.3 only)
-# object: name of associated graph file
-#
-# Die on error.
-#
-
-sub read_gcov_header($)
-{
- my $source;
- my $object;
- local *INPUT;
-
- if (!open(INPUT, $_[0]))
- {
- if ($ignore_errors[$ERROR_GCOV])
- {
- warn("WARNING: cannot read $_[0]!\n");
- return (undef,undef);
- }
- die("ERROR: cannot read $_[0]!\n");
- }
-
- while (<INPUT>)
- {
- chomp($_);
-
- if (/^\s+-:\s+0:Source:(.*)$/)
- {
- # Source: header entry
- $source = $1;
- }
- elsif (/^\s+-:\s+0:Object:(.*)$/)
- {
- # Object: header entry
- $object = $1;
- }
- else
- {
- last;
- }
- }
-
- close(INPUT);
-
- return ($source, $object);
-}
-
-
-#
-# read_gcov_file(gcov_filename)
-#
-# Parse file GCOV_FILENAME (.gcov file format) and return the list:
-# (reference to gcov_content, reference to gcov_branch, reference to gcov_func)
-#
-# gcov_content is a list of 3 elements
-# (flag, count, source) for each source code line:
-#
-# $result[($line_number-1)*3+0] = instrumentation flag for line $line_number
-# $result[($line_number-1)*3+1] = execution count for line $line_number
-# $result[($line_number-1)*3+2] = source code text for line $line_number
-#
-# gcov_branch is a list of 2 elements
-# (linenumber, branch result) for each branch
-#
-# gcov_func is a list of 2 elements
-# (number of calls, function name) for each function
-#
-# Die on error.
-#
-
-sub read_gcov_file($)
-{
- my $filename = $_[0];
- my @result = ();
- my @branches = ();
- my @functions = ();
- my $number;
- local *INPUT;
-
- open(INPUT, $filename)
- or die("ERROR: cannot read $filename!\n");
-
- if ($gcov_version < $GCOV_VERSION_3_3_0)
- {
- # Expect gcov format as used in gcc < 3.3
- while (<INPUT>)
- {
- chomp($_);
-
- if (/^\t\t(.*)$/)
- {
- # Uninstrumented line
- push(@result, 0);
- push(@result, 0);
- push(@result, $1);
- }
- elsif (/^branch/)
- {
- # Branch execution data
- push(@branches, scalar(@result) / 3);
- if (/^branch \d+ never executed$/)
- {
- push(@branches, 0);
- }
- elsif (/^branch \d+ taken = 0%/)
- {
- push(@branches, 1);
- }
- else
- {
- push(@branches, 2);
- }
- }
- elsif (/^call/ || /^function/)
- {
- # Function call return data
- }
- else
- {
- # Source code execution data
- $number = (split(" ",substr($_, 0, 16)))[0];
-
- # Check for zero count which is indicated
- # by ######
- if ($number eq "######") { $number = 0; }
-
- push(@result, 1);
- push(@result, $number);
- push(@result, substr($_, 16));
- }
- }
- }
- else
- {
- # Expect gcov format as used in gcc >= 3.3
- while (<INPUT>)
- {
- chomp($_);
-
- if (/^branch\s+\d+\s+(\S+)\s+(\S+)/)
- {
- # Branch execution data
- push(@branches, scalar(@result) / 3);
- if ($1 eq "never")
- {
- push(@branches, 0);
- }
- elsif ($2 eq "0%")
- {
- push(@branches, 1);
- }
- else
- {
- push(@branches, 2);
- }
- }
- elsif (/^function\s+(\S+)\s+called\s+(\d+)/)
- {
- push(@functions, $2, $1);
- }
- elsif (/^call/)
- {
- # Function call return data
- }
- elsif (/^\s*([^:]+):\s*([^:]+):(.*)$/)
- {
- # <exec count>:<line number>:<source code>
- if ($2 eq "0")
- {
- # Extra data
- }
- elsif ($1 eq "-")
- {
- # Uninstrumented line
- push(@result, 0);
- push(@result, 0);
- push(@result, $3);
- }
- else
- {
- # Source code execution data
- $number = $1;
-
- # Check for zero count
- if ($number eq "#####") { $number = 0; }
-
- push(@result, 1);
- push(@result, $number);
- push(@result, $3);
- }
- }
- }
- }
-
- close(INPUT);
- return(\@result, \@branches, \@functions);
-}
-
-
-#
-# read_bb_file(bb_filename, base_dir)
-#
-# Read .bb file BB_FILENAME and return a hash containing the following
-# mapping:
-#
-# filename -> comma-separated list of pairs (function name=starting
-# line number) to indicate the starting line of a function or
-# =name to indicate an instrumented line
-#
-# for each entry in the .bb file. Filenames are absolute, i.e. relative
-# filenames are prefixed with BASE_DIR.
-#
-# Die on error.
-#
-
-sub read_bb_file($$)
-{
- my $bb_filename = $_[0];
- my $base_dir = $_[1];
- my %result;
- my $filename;
- my $function_name;
- my $minus_one = sprintf("%d", 0x80000001);
- my $minus_two = sprintf("%d", 0x80000002);
- my $value;
- my $packed_word;
- local *INPUT;
-
- open(INPUT, $bb_filename)
- or die("ERROR: cannot read $bb_filename!\n");
-
- binmode(INPUT);
-
- # Read data in words of 4 bytes
- while (read(INPUT, $packed_word, 4) == 4)
- {
- # Decode integer in intel byteorder
- $value = unpack_int32($packed_word, 0);
-
- # Note: the .bb file format is documented in GCC info pages
- if ($value == $minus_one)
- {
- # Filename follows
- $filename = read_string(*INPUT, $minus_one)
- or die("ERROR: incomplete filename in ".
- "$bb_filename!\n");
-
- # Make path absolute
- $filename = solve_relative_path($base_dir, $filename);
-
- # Insert into hash if not yet present.
- # This is necessary because functions declared as
- # "inline" are not listed as actual functions in
- # .bb files
- if (!$result{$filename})
- {
- $result{$filename}="";
- }
- }
- elsif ($value == $minus_two)
- {
- # Function name follows
- $function_name = read_string(*INPUT, $minus_two)
- or die("ERROR: incomplete function ".
- "name in $bb_filename!\n");
- $function_name =~ s/\W/_/g;
- }
- elsif ($value > 0)
- {
- if (defined($filename))
- {
- $result{$filename} .=
- ($result{$filename} ? "," : "").
- "=$value";
- }
- else
- {
- warn("WARNING: unassigned line".
- " number in .bb file ".
- "$bb_filename\n");
- }
- if ($function_name)
- {
- # Got a full entry filename, funcname, lineno
- # Add to resulting hash
-
- $result{$filename}.=
- ($result{$filename} ? "," : "").
- join("=",($function_name,$value));
- undef($function_name);
- }
- }
- }
- close(INPUT);
-
- if (!scalar(keys(%result)))
- {
- die("ERROR: no data found in $bb_filename!\n");
- }
- return %result;
-}
-
-
-#
-# read_string(handle, delimiter);
-#
-# Read and return a string in 4-byte chunks from HANDLE until DELIMITER
-# is found.
-#
-# Return empty string on error.
-#
-
-sub read_string(*$)
-{
- my $HANDLE = $_[0];
- my $delimiter = $_[1];
- my $string = "";
- my $packed_word;
- my $value;
-
- while (read($HANDLE,$packed_word,4) == 4)
- {
- $value = unpack_int32($packed_word, 0);
-
- if ($value == $delimiter)
- {
- # Remove trailing nil bytes
- $/="\0";
- while (chomp($string)) {};
- $/="\n";
- return($string);
- }
-
- $string = $string.$packed_word;
- }
- return("");
-}
-
-
-#
-# read_gcno_file(bb_filename, base_dir)
-#
-# Read .gcno file BB_FILENAME and return a hash containing the following
-# mapping:
-#
-# filename -> comma-separated list of pairs (function name=starting
-# line number) to indicate the starting line of a function or
-# =name to indicate an instrumented line
-#
-# for each entry in the .gcno file. Filenames are absolute, i.e. relative
-# filenames are prefixed with BASE_DIR.
-#
-# Die on error.
-#
-
-sub read_gcno_file($$)
-{
- my $gcno_filename = $_[0];
- my $base_dir = $_[1];
- my %result;
- my $filename;
- my $function_name;
- my $lineno;
- my $length;
- my $value;
- my $endianness;
- my $blocks;
- my $packed_word;
- my $string;
- local *INPUT;
-
- open(INPUT, $gcno_filename)
- or die("ERROR: cannot read $gcno_filename!\n");
-
- binmode(INPUT);
-
- read(INPUT, $packed_word, 4) == 4
- or die("ERROR: Invalid gcno file format\n");
-
- $value = unpack_int32($packed_word, 0);
- $endianness = !($value == $GCNO_FILE_MAGIC);
-
- unpack_int32($packed_word, $endianness) == $GCNO_FILE_MAGIC
- or die("ERROR: gcno file magic does not match\n");
-
- seek(INPUT, 8, 1);
-
- # Read data in words of 4 bytes
- while (read(INPUT, $packed_word, 4) == 4)
- {
- # Decode integer in intel byteorder
- $value = unpack_int32($packed_word, $endianness);
-
- if ($value == $GCNO_FUNCTION_TAG)
- {
- # skip length, ident and checksum
- seek(INPUT, 12, 1);
- (undef, $function_name) =
- read_gcno_string(*INPUT, $endianness);
- $function_name =~ s/\W/_/g;
- (undef, $filename) =
- read_gcno_string(*INPUT, $endianness);
- $filename = solve_relative_path($base_dir, $filename);
-
- read(INPUT, $packed_word, 4);
- $lineno = unpack_int32($packed_word, $endianness);
-
- $result{$filename}.=
- ($result{$filename} ? "," : "").
- join("=",($function_name,$lineno));
- }
- elsif ($value == $GCNO_LINES_TAG)
- {
- # Check for names of files containing inlined code
- # included in this file
- read(INPUT, $packed_word, 4);
- $length = unpack_int32($packed_word, $endianness);
- if ($length > 0)
- {
- # Block number
- read(INPUT, $packed_word, 4);
- $length--;
- }
- while ($length > 0)
- {
- read(INPUT, $packed_word, 4);
- $lineno = unpack_int32($packed_word,
- $endianness);
- $length--;
- if ($lineno != 0)
- {
- if (defined($filename))
- {
- $result{$filename} .=
- ($result{$filename} ? "," : "").
- "=$lineno";
- }
- else
- {
- warn("WARNING: unassigned line".
- " number in .gcno file ".
- "$gcno_filename\n");
- }
- next;
- }
- last if ($length == 0);
- ($blocks, $string) =
- read_gcno_string(*INPUT, $endianness);
- if (defined($string))
- {
- $filename = $string;
- }
- if ($blocks > 1)
- {
- $filename = solve_relative_path(
- $base_dir, $filename);
- if (!defined($result{$filename}))
- {
- $result{$filename} = "";
- }
- }
- $length -= $blocks;
- }
- }
- else
- {
- read(INPUT, $packed_word, 4);
- $length = unpack_int32($packed_word, $endianness);
- seek(INPUT, 4 * $length, 1);
- }
- }
- close(INPUT);
-
- if (!scalar(keys(%result)))
- {
- die("ERROR: no data found in $gcno_filename!\n");
- }
- return %result;
-}
-
-
-#
-# read_gcno_string(handle, endianness);
-#
-# Read a string in 4-byte chunks from HANDLE.
-#
-# Return (number of 4-byte chunks read, string).
-#
-
-sub read_gcno_string(*$)
-{
- my $handle = $_[0];
- my $endianness = $_[1];
- my $number_of_blocks = 0;
- my $string = "";
- my $packed_word;
-
- read($handle, $packed_word, 4) == 4
- or die("ERROR: reading string\n");
-
- $number_of_blocks = unpack_int32($packed_word, $endianness);
-
- if ($number_of_blocks == 0)
- {
- return (1, undef);
- }
-
- if (read($handle, $packed_word, 4 * $number_of_blocks) !=
- 4 * $number_of_blocks)
- {
- my $msg = "invalid string size ".(4 * $number_of_blocks)." in ".
- "gcno file at position ".tell($handle)."\n";
- if ($ignore[$ERROR_SOURCE])
- {
- warn("WARNING: $msg");
- return (1, undef);
- }
- else
- {
- die("ERROR: $msg");
- }
- }
-
- $string = $string . $packed_word;
-
- # Remove trailing nil bytes
- $/="\0";
- while (chomp($string)) {};
- $/="\n";
-
- return(1 + $number_of_blocks, $string);
-}
-
-
-#
-# read_hammer_bbg_file(bb_filename, base_dir)
-#
-# Read .bbg file BB_FILENAME and return a hash containing the following
-# mapping:
-#
-# filename -> comma-separated list of pairs (function name=starting
-# line number) to indicate the starting line of a function or
-# =name to indicate an instrumented line
-#
-# for each entry in the .bbg file. Filenames are absolute, i.e. relative
-# filenames are prefixed with BASE_DIR.
-#
-# Die on error.
-#
-
-sub read_hammer_bbg_file($$)
-{
- my $bbg_filename = $_[0];
- my $base_dir = $_[1];
- my %result;
- my $filename;
- my $function_name;
- my $first_line;
- my $lineno;
- my $length;
- my $value;
- my $endianness;
- my $blocks;
- my $packed_word;
- local *INPUT;
-
- open(INPUT, $bbg_filename)
- or die("ERROR: cannot read $bbg_filename!\n");
-
- binmode(INPUT);
-
- # Read magic
- read(INPUT, $packed_word, 4) == 4
- or die("ERROR: invalid bbg file format\n");
-
- $endianness = 1;
-
- unpack_int32($packed_word, $endianness) == $BBG_FILE_MAGIC
- or die("ERROR: bbg file magic does not match\n");
-
- # Skip version
- seek(INPUT, 4, 1);
-
- # Read data in words of 4 bytes
- while (read(INPUT, $packed_word, 4) == 4)
- {
- # Get record tag
- $value = unpack_int32($packed_word, $endianness);
-
- # Get record length
- read(INPUT, $packed_word, 4);
- $length = unpack_int32($packed_word, $endianness);
-
- if ($value == $GCNO_FUNCTION_TAG)
- {
- # Get function name
- ($value, $function_name) =
- read_hammer_bbg_string(*INPUT, $endianness);
- $function_name =~ s/\W/_/g;
- $filename = undef;
- $first_line = undef;
-
- seek(INPUT, $length - $value * 4, 1);
- }
- elsif ($value == $GCNO_LINES_TAG)
- {
- # Get linenumber and filename
- # Skip block number
- seek(INPUT, 4, 1);
- $length -= 4;
-
- while ($length > 0)
- {
- read(INPUT, $packed_word, 4);
- $lineno = unpack_int32($packed_word,
- $endianness);
- $length -= 4;
- if ($lineno != 0)
- {
- if (!defined($first_line))
- {
- $first_line = $lineno;
- }
- if (defined($filename))
- {
- $result{$filename} .=
- ($result{$filename} ? "," : "").
- "=$lineno";
- }
- else
- {
- warn("WARNING: unassigned line".
- " number in .bbg file ".
- "$bbg_filename\n");
- }
- next;
- }
- ($blocks, $value) =
- read_hammer_bbg_string(
- *INPUT, $endianness);
- # Add all filenames to result list
- if (defined($value))
- {
- $value = solve_relative_path(
- $base_dir, $value);
- if (!defined($result{$value}))
- {
- $result{$value} = undef;
- }
- if (!defined($filename))
- {
- $filename = $value;
- }
- }
- $length -= $blocks * 4;
-
- # Got a complete data set?
- if (defined($filename) &&
- defined($first_line) &&
- defined($function_name))
- {
- # Add it to our result hash
- if (defined($result{$filename}))
- {
- $result{$filename} .=
- ",$function_name=$first_line";
- }
- else
- {
- $result{$filename} =
- "$function_name=$first_line";
- }
- $function_name = undef;
- $filename = undef;
- $first_line = undef;
- }
- }
- }
- else
- {
- # Skip other records
- seek(INPUT, $length, 1);
- }
- }
- close(INPUT);
-
- if (!scalar(keys(%result)))
- {
- die("ERROR: no data found in $bbg_filename!\n");
- }
- return %result;
-}
-
-
-#
-# read_hammer_bbg_string(handle, endianness);
-#
-# Read a string in 4-byte chunks from HANDLE.
-#
-# Return (number of 4-byte chunks read, string).
-#
-
-sub read_hammer_bbg_string(*$)
-{
- my $handle = $_[0];
- my $endianness = $_[1];
- my $length = 0;
- my $string = "";
- my $packed_word;
- my $pad;
-
- read($handle, $packed_word, 4) == 4
- or die("ERROR: reading string\n");
-
- $length = unpack_int32($packed_word, $endianness);
- $pad = 4 - $length % 4;
-
- if ($length == 0)
- {
- return (1, undef);
- }
-
- read($handle, $string, $length) ==
- $length or die("ERROR: reading string\n");
- seek($handle, $pad, 1);
-
- return(1 + ($length + $pad) / 4, $string);
-}
-
-#
-# unpack_int32(word, endianness)
-#
-# Interpret 4-byte binary string WORD as signed 32 bit integer in
-# endian encoding defined by ENDIANNESS (0=little, 1=big) and return its
-# value.
-#
-
-sub unpack_int32($$)
-{
- return sprintf("%d", unpack($_[1] ? "N" : "V",$_[0]));
-}
-
-
-#
-# Get the GCOV tool version. Return an integer number which represents the
-# GCOV version. Version numbers can be compared using standard integer
-# operations.
-#
-
-sub get_gcov_version()
-{
- local *HANDLE;
- my $version_string;
- my $result;
-
- open(GCOV_PIPE, "$gcov_tool -v |")
- or die("ERROR: cannot retrieve gcov version!\n");
- $version_string = <GCOV_PIPE>;
- close(GCOV_PIPE);
-
- $result = 0;
- if ($version_string =~ /(\d+)\.(\d+)(\.(\d+))?/)
- {
- if (defined($4))
- {
- info("Found gcov version: $1.$2.$4\n");
- $result = $1 << 16 | $2 << 8 | $4;
- }
- else
- {
- info("Found gcov version: $1.$2\n");
- $result = $1 << 16 | $2 << 8;
- }
- }
- if ($version_string =~ /suse/i && $result == 0x30303 ||
- $version_string =~ /mandrake/i && $result == 0x30302)
- {
- info("Using compatibility mode for GCC 3.3 (hammer)\n");
- $compatibility = $COMPAT_HAMMER;
- }
- return $result;
-}
-
-
-#
-# info(printf_parameter)
-#
-# Use printf to write PRINTF_PARAMETER to stdout only when the $quiet flag
-# is not set.
-#
-
-sub info(@)
-{
- if (!$quiet)
- {
- # Print info string
- if (defined($output_filename) && ($output_filename eq "-"))
- {
- # Don't interfere with the .info output to STDOUT
- printf(STDERR @_);
- }
- else
- {
- printf(@_);
- }
- }
-}
-
-
-#
-# int_handler()
-#
-# Called when the script was interrupted by an INT signal (e.g. CTRl-C)
-#
-
-sub int_handler()
-{
- if ($cwd) { chdir($cwd); }
- info("Aborted.\n");
- exit(1);
-}
-
-
-#
-# system_no_output(mode, parameters)
-#
-# Call an external program using PARAMETERS while suppressing depending on
-# the value of MODE:
-#
-# MODE & 1: suppress STDOUT
-# MODE & 2: suppress STDERR
-#
-# Return 0 on success, non-zero otherwise.
-#
-
-sub system_no_output($@)
-{
- my $mode = shift;
- my $result;
- local *OLD_STDERR;
- local *OLD_STDOUT;
-
- # Save old stdout and stderr handles
- ($mode & 1) && open(OLD_STDOUT, ">>&STDOUT");
- ($mode & 2) && open(OLD_STDERR, ">>&STDERR");
-
- # Redirect to /dev/null
- ($mode & 1) && open(STDOUT, ">/dev/null");
- ($mode & 2) && open(STDERR, ">/dev/null");
-
- system(@_);
- $result = $?;
-
- # Close redirected handles
- ($mode & 1) && close(STDOUT);
- ($mode & 2) && close(STDERR);
-
- # Restore old handles
- ($mode & 1) && open(STDOUT, ">>&OLD_STDOUT");
- ($mode & 2) && open(STDERR, ">>&OLD_STDERR");
-
- return $result;
-}
-
-
-#
-# read_config(filename)
-#
-# Read configuration file FILENAME and return a reference to a hash containing
-# all valid key=value pairs found.
-#
-
-sub read_config($)
-{
- my $filename = $_[0];
- my %result;
- my $key;
- my $value;
- local *HANDLE;
-
- if (!open(HANDLE, "<$filename"))
- {
- warn("WARNING: cannot read configuration file $filename\n");
- return undef;
- }
- while (<HANDLE>)
- {
- chomp;
- # Skip comments
- s/#.*//;
- # Remove leading blanks
- s/^\s+//;
- # Remove trailing blanks
- s/\s+$//;
- next unless length;
- ($key, $value) = split(/\s*=\s*/, $_, 2);
- if (defined($key) && defined($value))
- {
- $result{$key} = $value;
- }
- else
- {
- warn("WARNING: malformed statement in line $. ".
- "of configuration file $filename\n");
- }
- }
- close(HANDLE);
- return \%result;
-}
-
-
-#
-# apply_config(REF)
-#
-# REF is a reference to a hash containing the following mapping:
-#
-# key_string => var_ref
-#
-# where KEY_STRING is a keyword and VAR_REF is a reference to an associated
-# variable. If the global configuration hash CONFIG contains a value for
-# keyword KEY_STRING, VAR_REF will be assigned the value for that keyword.
-#
-
-sub apply_config($)
-{
- my $ref = $_[0];
-
- foreach (keys(%{$ref}))
- {
- if (defined($config->{$_}))
- {
- ${$ref->{$_}} = $config->{$_};
- }
- }
-}
-
-
-sub gen_initial_info($)
-{
- my $directory = $_[0];
- my @file_list;
-
- if (-d $directory)
- {
- info("Scanning $directory for $graph_file_extension ".
- "files ...\n");
-
- @file_list = `find "$directory" $maxdepth $follow -name \\*$graph_file_extension -type f 2>/dev/null`;
- chomp(@file_list);
- @file_list or die("ERROR: no $graph_file_extension files ".
- "found in $directory!\n");
- info("Found %d graph files in %s\n", $#file_list+1, $directory);
- }
- else
- {
- @file_list = ($directory);
- }
-
- # Process all files in list
- foreach (@file_list) { process_graphfile($_); }
-}
-
-sub process_graphfile($)
-{
- my $graph_filename = $_[0];
- my $graph_dir;
- my $graph_basename;
- my $source_dir;
- my $base_dir;
- my %graph_data;
- my $filename;
- local *INFO_HANDLE;
-
- info("Processing $_[0]\n");
-
- # Get path to data file in absolute and normalized form (begins with /,
- # contains no more ../ or ./)
- $graph_filename = solve_relative_path($cwd, $graph_filename);
-
- # Get directory and basename of data file
- ($graph_dir, $graph_basename) = split_filename($graph_filename);
-
- # avoid files from .libs dirs
- if ($compat_libtool && $graph_dir =~ m/(.*)\/\.libs$/) {
- $source_dir = $1;
- } else {
- $source_dir = $graph_dir;
- }
-
- # Construct base_dir for current file
- if ($base_directory)
- {
- $base_dir = $base_directory;
- }
- else
- {
- $base_dir = $source_dir;
- }
-
- if ($gcov_version < $GCOV_VERSION_3_4_0)
- {
- if (defined($compatibility) && $compatibility eq $COMPAT_HAMMER)
- {
- %graph_data = read_hammer_bbg_file($graph_filename,
- $base_dir);
- }
- else
- {
- %graph_data = read_bb_file($graph_filename, $base_dir);
- }
- }
- else
- {
- %graph_data = read_gcno_file($graph_filename, $base_dir);
- }
-
- # Check whether we're writing to a single file
- if ($output_filename)
- {
- if ($output_filename eq "-")
- {
- *INFO_HANDLE = *STDOUT;
- }
- else
- {
- # Append to output file
- open(INFO_HANDLE, ">>$output_filename")
- or die("ERROR: cannot write to ".
- "$output_filename!\n");
- }
- }
- else
- {
- # Open .info file for output
- open(INFO_HANDLE, ">$graph_filename.info")
- or die("ERROR: cannot create $graph_filename.info!\n");
- }
-
- # Write test name
- printf(INFO_HANDLE "TN:%s\n", $test_name);
- foreach $filename (keys(%graph_data))
- {
- my %lines;
- my $count = 0;
- my @functions;
-
- print(INFO_HANDLE "SF:$filename\n");
-
- # Write function related data
- foreach (split(",",$graph_data{$filename}))
- {
- my ($fn, $line) = split("=", $_);
-
- if ($fn eq "")
- {
- $lines{$line} = "";
- next;
- }
-
- # Normalize function name
- $fn =~ s/\W/_/g;
-
- print(INFO_HANDLE "FN:$line,$fn\n");
- push(@functions, $fn);
- }
- foreach (@functions) {
- print(INFO_HANDLE "FNDA:$_,0\n");
- }
- print(INFO_HANDLE "FNF:".scalar(@functions)."\n");
- print(INFO_HANDLE "FNH:0\n");
-
- # Write line related data
- foreach (sort {$a <=> $b } keys(%lines))
- {
- print(INFO_HANDLE "DA:$_,0\n");
- $count++;
- }
- print(INFO_HANDLE "LH:0\n");
- print(INFO_HANDLE "LF:$count\n");
- print(INFO_HANDLE "end_of_record\n");
- }
- if (!($output_filename && ($output_filename eq "-")))
- {
- close(INFO_HANDLE);
- }
-}
-
-sub warn_handler($)
-{
- my ($msg) = @_;
-
- warn("$tool_name: $msg");
-}
-
-sub die_handler($)
-{
- my ($msg) = @_;
-
- die("$tool_name: $msg");
-}
diff --git a/3rdParty/LCov/genpng b/3rdParty/LCov/genpng
deleted file mode 100755
index b4d90c2..0000000
--- a/3rdParty/LCov/genpng
+++ /dev/null
@@ -1,381 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright (c) International Business Machines Corp., 2002
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or (at
-# your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-#
-# genpng
-#
-# This script creates an overview PNG image of a source code file by
-# representing each source code character by a single pixel.
-#
-# Note that the PERL module GD.pm is required for this script to work.
-# It may be obtained from http://www.cpan.org
-#
-# History:
-# 2002-08-26: created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>
-#
-
-use strict;
-use File::Basename;
-use Getopt::Long;
-
-
-# Constants
-our $lcov_version = "LCOV version 1.7";
-our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
-our $tool_name = basename($0);
-
-
-# Prototypes
-sub gen_png($$$@);
-sub check_and_load_module($);
-sub genpng_print_usage(*);
-sub genpng_process_file($$$$);
-sub warn_handler($);
-sub die_handler($);
-
-
-#
-# Code entry point
-#
-
-# Check whether required module GD.pm is installed
-if (check_and_load_module("GD"))
-{
- # Note: cannot use die() to print this message because inserting this
- # code into another script via do() would not fail as required!
- print(STDERR <<END_OF_TEXT)
-ERROR: required module GD.pm not found on this system (see www.cpan.org).
-END_OF_TEXT
- ;
- exit(2);
-}
-
-# Check whether we're called from the command line or from another script
-if (!caller)
-{
- my $filename;
- my $tab_size = 4;
- my $width = 80;
- my $out_filename;
- my $help;
- my $version;
-
- $SIG{__WARN__} = \&warn_handler;
- $SIG{__DIE__} = \&die_handler;
-
- # Parse command line options
- if (!GetOptions("tab-size=i" => \$tab_size,
- "width=i" => \$width,
- "output-filename=s" => \$out_filename,
- "help" => \$help,
- "version" => \$version))
- {
- print(STDERR "Use $tool_name --help to get usage ".
- "information\n");
- exit(1);
- }
-
- $filename = $ARGV[0];
-
- # Check for help flag
- if ($help)
- {
- genpng_print_usage(*STDOUT);
- exit(0);
- }
-
- # Check for version flag
- if ($version)
- {
- print("$tool_name: $lcov_version\n");
- exit(0);
- }
-
- # Check options
- if (!$filename)
- {
- die("No filename specified\n");
- }
-
- # Check for output filename
- if (!$out_filename)
- {
- $out_filename = "$filename.png";
- }
-
- genpng_process_file($filename, $out_filename, $width, $tab_size);
- exit(0);
-}
-
-
-#
-# genpng_print_usage(handle)
-#
-# Write out command line usage information to given filehandle.
-#
-
-sub genpng_print_usage(*)
-{
- local *HANDLE = $_[0];
-
- print(HANDLE <<END_OF_USAGE)
-Usage: $tool_name [OPTIONS] SOURCEFILE
-
-Create an overview image for a given source code file of either plain text
-or .gcov file format.
-
- -h, --help Print this help, then exit
- -v, --version Print version number, then exit
- -t, --tab-size TABSIZE Use TABSIZE spaces in place of tab
- -w, --width WIDTH Set width of output image to WIDTH pixel
- -o, --output-filename FILENAME Write image to FILENAME
-
-For more information see: $lcov_url
-END_OF_USAGE
- ;
-}
-
-
-#
-# check_and_load_module(module_name)
-#
-# Check whether a module by the given name is installed on this system
-# and make it known to the interpreter if available. Return undefined if it
-# is installed, an error message otherwise.
-#
-
-sub check_and_load_module($)
-{
- eval("use $_[0];");
- return $@;
-}
-
-
-#
-# genpng_process_file(filename, out_filename, width, tab_size)
-#
-
-sub genpng_process_file($$$$)
-{
- my $filename = $_[0];
- my $out_filename = $_[1];
- my $width = $_[2];
- my $tab_size = $_[3];
- local *HANDLE;
- my @source;
-
- open(HANDLE, "<$filename")
- or die("ERROR: cannot open $filename!\n");
-
- # Check for .gcov filename extension
- if ($filename =~ /^(.*).gcov$/)
- {
- # Assume gcov text format
- while (<HANDLE>)
- {
- if (/^\t\t(.*)$/)
- {
- # Uninstrumented line
- push(@source, ":$1");
- }
- elsif (/^ ###### (.*)$/)
- {
- # Line with zero execution count
- push(@source, "0:$1");
- }
- elsif (/^( *)(\d*) (.*)$/)
- {
- # Line with positive execution count
- push(@source, "$2:$3");
- }
- }
- }
- else
- {
- # Plain text file
- while (<HANDLE>) { push(@source, ":$_"); }
- }
- close(HANDLE);
-
- gen_png($out_filename, $width, $tab_size, @source);
-}
-
-
-#
-# gen_png(filename, width, tab_size, source)
-#
-# Write an overview PNG file to FILENAME. Source code is defined by SOURCE
-# which is a list of lines <count>:<source code> per source code line.
-# The output image will be made up of one pixel per character of source,
-# coloring will be done according to execution counts. WIDTH defines the
-# image width. TAB_SIZE specifies the number of spaces to use as replacement
-# string for tabulator signs in source code text.
-#
-# Die on error.
-#
-
-sub gen_png($$$@)
-{
- my $filename = shift(@_); # Filename for PNG file
- my $overview_width = shift(@_); # Imagewidth for image
- my $tab_size = shift(@_); # Replacement string for tab signs
- my @source = @_; # Source code as passed via argument 2
- my $height = scalar(@source); # Height as define by source size
- my $overview; # Source code overview image data
- my $col_plain_back; # Color for overview background
- my $col_plain_text; # Color for uninstrumented text
- my $col_cov_back; # Color for background of covered lines
- my $col_cov_text; # Color for text of covered lines
- my $col_nocov_back; # Color for background of lines which
- # were not covered (count == 0)
- my $col_nocov_text; # Color for test of lines which were not
- # covered (count == 0)
- my $col_hi_back; # Color for background of highlighted lines
- my $col_hi_text; # Color for text of highlighted lines
- my $line; # Current line during iteration
- my $row = 0; # Current row number during iteration
- my $column; # Current column number during iteration
- my $color_text; # Current text color during iteration
- my $color_back; # Current background color during iteration
- my $last_count; # Count of last processed line
- my $count; # Count of current line
- my $source; # Source code of current line
- my $replacement; # Replacement string for tabulator chars
- local *PNG_HANDLE; # Handle for output PNG file
-
- # Create image
- $overview = new GD::Image($overview_width, $height)
- or die("ERROR: cannot allocate overview image!\n");
-
- # Define colors
- $col_plain_back = $overview->colorAllocate(0xff, 0xff, 0xff);
- $col_plain_text = $overview->colorAllocate(0xaa, 0xaa, 0xaa);
- $col_cov_back = $overview->colorAllocate(0xaa, 0xa7, 0xef);
- $col_cov_text = $overview->colorAllocate(0x5d, 0x5d, 0xea);
- $col_nocov_back = $overview->colorAllocate(0xff, 0x00, 0x00);
- $col_nocov_text = $overview->colorAllocate(0xaa, 0x00, 0x00);
- $col_hi_back = $overview->colorAllocate(0x00, 0xff, 0x00);
- $col_hi_text = $overview->colorAllocate(0x00, 0xaa, 0x00);
-
- # Visualize each line
- foreach $line (@source)
- {
- # Replace tabs with spaces to keep consistent with source
- # code view
- while ($line =~ /^([^\t]*)(\t)/)
- {
- $replacement = " "x($tab_size - ((length($1) - 1) %
- $tab_size));
- $line =~ s/^([^\t]*)(\t)/$1$replacement/;
- }
-
- # Skip lines which do not follow the <count>:<line>
- # specification, otherwise $1 = count, $2 = source code
- if (!($line =~ /(\*?)(\d*):(.*)$/)) { next; }
- $count = $2;
- $source = $3;
-
- # Decide which color pair to use
-
- # If this line was not instrumented but the one before was,
- # take the color of that line to widen color areas in
- # resulting image
- if (($count eq "") && defined($last_count) &&
- ($last_count ne ""))
- {
- $count = $last_count;
- }
-
- if ($count eq "")
- {
- # Line was not instrumented
- $color_text = $col_plain_text;
- $color_back = $col_plain_back;
- }
- elsif ($count == 0)
- {
- # Line was instrumented but not executed
- $color_text = $col_nocov_text;
- $color_back = $col_nocov_back;
- }
- elsif ($1 eq "*")
- {
- # Line was highlighted
- $color_text = $col_hi_text;
- $color_back = $col_hi_back;
- }
- else
- {
- # Line was instrumented and executed
- $color_text = $col_cov_text;
- $color_back = $col_cov_back;
- }
-
- # Write one pixel for each source character
- $column = 0;
- foreach (split("", $source))
- {
- # Check for width
- if ($column >= $overview_width) { last; }
-
- if ($_ eq " ")
- {
- # Space
- $overview->setPixel($column++, $row,
- $color_back);
- }
- else
- {
- # Text
- $overview->setPixel($column++, $row,
- $color_text);
- }
- }
-
- # Fill rest of line
- while ($column < $overview_width)
- {
- $overview->setPixel($column++, $row, $color_back);
- }
-
- $last_count = $2;
-
- $row++;
- }
-
- # Write PNG file
- open (PNG_HANDLE, ">$filename")
- or die("ERROR: cannot write png file $filename!\n");
- binmode(*PNG_HANDLE);
- print(PNG_HANDLE $overview->png());
- close(PNG_HANDLE);
-}
-
-sub warn_handler($)
-{
- my ($msg) = @_;
-
- warn("$tool_name: $msg");
-}
-
-sub die_handler($)
-{
- my ($msg) = @_;
-
- die("$tool_name: $msg");
-}
diff --git a/3rdParty/LCov/lcov b/3rdParty/LCov/lcov
deleted file mode 100755
index 6304d75..0000000
--- a/3rdParty/LCov/lcov
+++ /dev/null
@@ -1,2699 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright (c) International Business Machines Corp., 2002,2007
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or (at
-# your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-#
-# lcov
-#
-# This is a wrapper script which provides a single interface for accessing
-# LCOV coverage data.
-#
-#
-# History:
-# 2002-08-29 created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>
-# IBM Lab Boeblingen
-# 2002-09-05 / Peter Oberparleiter: implemented --kernel-directory +
-# multiple directories
-# 2002-10-16 / Peter Oberparleiter: implemented --add-tracefile option
-# 2002-10-17 / Peter Oberparleiter: implemented --extract option
-# 2002-11-04 / Peter Oberparleiter: implemented --list option
-# 2003-03-07 / Paul Larson: Changed to make it work with the latest gcov
-# kernel patch. This will break it with older gcov-kernel
-# patches unless you change the value of $gcovmod in this script
-# 2003-04-07 / Peter Oberparleiter: fixed bug which resulted in an error
-# when trying to combine .info files containing data without
-# a test name
-# 2003-04-10 / Peter Oberparleiter: extended Paul's change so that LCOV
-# works both with the new and the old gcov-kernel patch
-# 2003-04-10 / Peter Oberparleiter: added $gcov_dir constant in anticipation
-# of a possible move of the gcov kernel directory to another
-# file system in a future version of the gcov-kernel patch
-# 2003-04-15 / Paul Larson: make info write to STDERR, not STDOUT
-# 2003-04-15 / Paul Larson: added --remove option
-# 2003-04-30 / Peter Oberparleiter: renamed --reset to --zerocounters
-# to remove naming ambiguity with --remove
-# 2003-04-30 / Peter Oberparleiter: adjusted help text to include --remove
-# 2003-06-27 / Peter Oberparleiter: implemented --diff
-# 2003-07-03 / Peter Oberparleiter: added line checksum support, added
-# --no-checksum
-# 2003-12-11 / Laurent Deniel: added --follow option
-# 2004-03-29 / Peter Oberparleiter: modified --diff option to better cope with
-# ambiguous patch file entries, modified --capture option to use
-# modprobe before insmod (needed for 2.6)
-# 2004-03-30 / Peter Oberparleiter: added --path option
-# 2004-08-09 / Peter Oberparleiter: added configuration file support
-# 2008-08-13 / Peter Oberparleiter: added function coverage support
-#
-
-use strict;
-use File::Basename;
-use Getopt::Long;
-
-
-# Global constants
-our $lcov_version = "LCOV version 1.7";
-our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
-our $tool_name = basename($0);
-
-# Names of the GCOV kernel module
-our @gcovmod = ("gcov-prof", "gcov-proc");
-
-# Directory containing gcov kernel files
-our $gcov_dir = "/proc/gcov";
-
-# The location of the insmod tool
-our $insmod_tool = "/sbin/insmod";
-
-# The location of the modprobe tool
-our $modprobe_tool = "/sbin/modprobe";
-
-# The location of the rmmod tool
-our $rmmod_tool = "/sbin/rmmod";
-
-# Where to create temporary directories
-our $tmp_dir = "/tmp";
-
-# How to prefix a temporary directory name
-our $tmp_prefix = "tmpdir";
-
-
-# Prototypes
-sub print_usage(*);
-sub check_options();
-sub userspace_reset();
-sub userspace_capture();
-sub kernel_reset();
-sub kernel_capture();
-sub add_traces();
-sub read_info_file($);
-sub get_info_entry($);
-sub set_info_entry($$$$$$$;$$$$);
-sub add_counts($$);
-sub merge_checksums($$$);
-sub combine_info_entries($$$);
-sub combine_info_files($$);
-sub write_info_file(*$);
-sub extract();
-sub remove();
-sub list();
-sub get_common_filename($$);
-sub read_diff($);
-sub diff();
-sub system_no_output($@);
-sub read_config($);
-sub apply_config($);
-sub info(@);
-sub unload_module($);
-sub check_and_load_kernel_module();
-sub create_temp_dir();
-sub transform_pattern($);
-sub warn_handler($);
-sub die_handler($);
-
-
-# Global variables & initialization
-our @directory; # Specifies where to get coverage data from
-our @kernel_directory; # If set, captures only from specified kernel subdirs
-our @add_tracefile; # If set, reads in and combines all files in list
-our $list; # If set, list contents of tracefile
-our $extract; # If set, extracts parts of tracefile
-our $remove; # If set, removes parts of tracefile
-our $diff; # If set, modifies tracefile according to diff
-our $reset; # If set, reset all coverage data to zero
-our $capture; # If set, capture data
-our $output_filename; # Name for file to write coverage data to
-our $test_name = ""; # Test case name
-our $quiet = ""; # If set, suppress information messages
-our $help; # Help option flag
-our $version; # Version option flag
-our $convert_filenames; # If set, convert filenames when applying diff
-our $strip; # If set, strip leading directories when applying diff
-our $need_unload; # If set, unload gcov kernel module
-our $temp_dir_name; # Name of temporary directory
-our $cwd = `pwd`; # Current working directory
-our $to_file; # If set, indicates that output is written to a file
-our $follow; # If set, indicates that find shall follow links
-our $diff_path = ""; # Path removed from tracefile when applying diff
-our $base_directory; # Base directory (cwd of gcc during compilation)
-our $checksum; # If set, calculate a checksum for each line
-our $no_checksum; # If set, don't calculate a checksum for each line
-our $compat_libtool; # If set, indicates that libtool mode is to be enabled
-our $no_compat_libtool; # If set, indicates that libtool mode is to be disabled
-our $gcov_tool;
-our $ignore_errors;
-our $initial;
-our $no_recursion = 0;
-our $maxdepth;
-our $config; # Configuration file contents
-chomp($cwd);
-our $tool_dir = dirname($0); # Directory where genhtml tool is installed
-
-
-#
-# Code entry point
-#
-
-$SIG{__WARN__} = \&warn_handler;
-$SIG{__DIE__} = \&die_handler;
-
-# Add current working directory if $tool_dir is not already an absolute path
-if (! ($tool_dir =~ /^\/(.*)$/))
-{
- $tool_dir = "$cwd/$tool_dir";
-}
-
-# Read configuration file if available
-if (-r $ENV{"HOME"}."/.lcovrc")
-{
- $config = read_config($ENV{"HOME"}."/.lcovrc");
-}
-elsif (-r "/etc/lcovrc")
-{
- $config = read_config("/etc/lcovrc");
-}
-
-if ($config)
-{
- # Copy configuration file values to variables
- apply_config({
- "lcov_gcov_dir" => \$gcov_dir,
- "lcov_insmod_tool" => \$insmod_tool,
- "lcov_modprobe_tool" => \$modprobe_tool,
- "lcov_rmmod_tool" => \$rmmod_tool,
- "lcov_tmp_dir" => \$tmp_dir});
-}
-
-# Parse command line options
-if (!GetOptions("directory|d|di=s" => \@directory,
- "add-tracefile=s" => \@add_tracefile,
- "list=s" => \$list,
- "kernel-directory=s" => \@kernel_directory,
- "extract=s" => \$extract,
- "remove=s" => \$remove,
- "diff=s" => \$diff,
- "convert-filenames" => \$convert_filenames,
- "strip=i" => \$strip,
- "capture|c" => \$capture,
- "output-file=s" => \$output_filename,
- "test-name=s" => \$test_name,
- "zerocounters" => \$reset,
- "quiet" => \$quiet,
- "help|?" => \$help,
- "version" => \$version,
- "follow" => \$follow,
- "path=s" => \$diff_path,
- "base-directory=s" => \$base_directory,
- "checksum" => \$checksum,
- "no-checksum" => \$no_checksum,
- "compat-libtool" => \$compat_libtool,
- "no-compat-libtool" => \$no_compat_libtool,
- "gcov-tool=s" => \$gcov_tool,
- "ignore-errors=s" => \$ignore_errors,
- "initial|i" => \$initial,
- "no-recursion" => \$no_recursion
- ))
-{
- print(STDERR "Use $tool_name --help to get usage information\n");
- exit(1);
-}
-else
-{
- # Merge options
- if (defined($no_checksum))
- {
- $checksum = ($no_checksum ? 0 : 1);
- $no_checksum = undef;
- }
-
- if (defined($no_compat_libtool))
- {
- $compat_libtool = ($no_compat_libtool ? 0 : 1);
- $no_compat_libtool = undef;
- }
-}
-
-# Check for help option
-if ($help)
-{
- print_usage(*STDOUT);
- exit(0);
-}
-
-# Check for version option
-if ($version)
-{
- print("$tool_name: $lcov_version\n");
- exit(0);
-}
-
-# Normalize --path text
-$diff_path =~ s/\/$//;
-
-if ($follow)
-{
- $follow = "-follow";
-}
-else
-{
- $follow = "";
-}
-
-if ($no_recursion)
-{
- $maxdepth = "-maxdepth 1";
-}
-else
-{
- $maxdepth = "";
-}
-
-# Check for valid options
-check_options();
-
-# Only --extract, --remove and --diff allow unnamed parameters
-if (@ARGV && !($extract || $remove || $diff))
-{
- die("Extra parameter found\n".
- "Use $tool_name --help to get usage information\n");
-}
-
-# Check for output filename
-$to_file = ($output_filename && ($output_filename ne "-"));
-
-if ($capture)
-{
- if (!$to_file)
- {
- # Option that tells geninfo to write to stdout
- $output_filename = "-";
- }
-}
-else
-{
- if ($initial)
- {
- die("Option --initial is only valid when capturing data (-c)\n".
- "Use $tool_name --help to get usage information\n");
- }
-}
-
-# Check for requested functionality
-if ($reset)
-{
- # Differentiate between user space and kernel reset
- if (@directory)
- {
- userspace_reset();
- }
- else
- {
- kernel_reset();
- }
-}
-elsif ($capture)
-{
- # Differentiate between user space and kernel
- if (@directory)
- {
- userspace_capture();
- }
- else
- {
- kernel_capture();
- }
-}
-elsif (@add_tracefile)
-{
- add_traces();
-}
-elsif ($remove)
-{
- remove();
-}
-elsif ($extract)
-{
- extract();
-}
-elsif ($list)
-{
- list();
-}
-elsif ($diff)
-{
- if (scalar(@ARGV) != 1)
- {
- die("ERROR: option --diff requires one additional argument!\n".
- "Use $tool_name --help to get usage information\n");
- }
- diff();
-}
-
-info("Done.\n");
-exit(0);
-
-#
-# print_usage(handle)
-#
-# Print usage information.
-#
-
-sub print_usage(*)
-{
- local *HANDLE = $_[0];
-
- print(HANDLE <<END_OF_USAGE);
-Usage: $tool_name [OPTIONS]
-
-Use lcov to collect coverage data from either the currently running Linux
-kernel or from a user space application. Specify the --directory option to
-get coverage data for a user space program.
-
-Misc:
- -h, --help Print this help, then exit
- -v, --version Print version number, then exit
- -q, --quiet Do not print progress messages
-
-Operation:
- -z, --zerocounters Reset all execution counts to zero
- -c, --capture Capture coverage data
- -a, --add-tracefile FILE Add contents of tracefiles
- -e, --extract FILE PATTERN Extract files matching PATTERN from FILE
- -r, --remove FILE PATTERN Remove files matching PATTERN from FILE
- -l, --list FILE List contents of tracefile FILE
- --diff FILE DIFF Transform tracefile FILE according to DIFF
-
-Options:
- -i, --initial Capture initial zero coverage data
- -t, --test-name NAME Specify test name to be stored with data
- -o, --output-file FILENAME Write data to FILENAME instead of stdout
- -d, --directory DIR Use .da files in DIR instead of kernel
- -f, --follow Follow links when searching .da files
- -k, --kernel-directory KDIR Capture kernel coverage data only from KDIR
- -b, --base-directory DIR Use DIR as base directory for relative paths
- --convert-filenames Convert filenames when applying diff
- --strip DEPTH Strip initial DEPTH directory levels in diff
- --path PATH Strip PATH from tracefile when applying diff
- --(no-)checksum Enable (disable) line checksumming
- --(no-)compat-libtool Enable (disable) libtool compatibility mode
- --gcov-tool TOOL Specify gcov tool location
- --ignore-errors ERRORS Continue after ERRORS (gcov, source)
- --no-recursion Exlude subdirectories from processing
-
-For more information see: $lcov_url
-END_OF_USAGE
- ;
-}
-
-
-#
-# check_options()
-#
-# Check for valid combination of command line options. Die on error.
-#
-
-sub check_options()
-{
- my $i = 0;
-
- # Count occurrence of mutually exclusive options
- $reset && $i++;
- $capture && $i++;
- @add_tracefile && $i++;
- $extract && $i++;
- $remove && $i++;
- $list && $i++;
- $diff && $i++;
-
- if ($i == 0)
- {
- die("Need one of the options -z, -c, -a, -e, -r, -l or ".
- "--diff\n".
- "Use $tool_name --help to get usage information\n");
- }
- elsif ($i > 1)
- {
- die("ERROR: only one of -z, -c, -a, -e, -r, -l or ".
- "--diff allowed!\n".
- "Use $tool_name --help to get usage information\n");
- }
-}
-
-
-#
-# userspace_reset()
-#
-# Reset coverage data found in DIRECTORY by deleting all contained .da files.
-#
-# Die on error.
-#
-
-sub userspace_reset()
-{
- my $current_dir;
- my @file_list;
-
- foreach $current_dir (@directory)
- {
- info("Deleting all .da files in $current_dir".
- ($no_recursion?"\n":" and subdirectories\n"));
- @file_list = `find "$current_dir" $maxdepth $follow -name \\*\\.da -o -name \\*\\.gcda -type f 2>/dev/null`;
- chomp(@file_list);
- foreach (@file_list)
- {
- unlink($_) or die("ERROR: cannot remove file $_!\n");
- }
- }
-}
-
-
-#
-# userspace_capture()
-#
-# Capture coverage data found in DIRECTORY and write it to OUTPUT_FILENAME
-# if specified, otherwise to STDOUT.
-#
-# Die on error.
-#
-
-sub userspace_capture()
-{
- my @param;
- my $file_list = join(" ", @directory);
-
- info("Capturing coverage data from $file_list\n");
- @param = ("$tool_dir/geninfo", @directory);
- if ($output_filename)
- {
- @param = (@param, "--output-filename", $output_filename);
- }
- if ($test_name)
- {
- @param = (@param, "--test-name", $test_name);
- }
- if ($follow)
- {
- @param = (@param, "--follow");
- }
- if ($quiet)
- {
- @param = (@param, "--quiet");
- }
- if (defined($checksum))
- {
- if ($checksum)
- {
- @param = (@param, "--checksum");
- }
- else
- {
- @param = (@param, "--no-checksum");
- }
- }
- if ($base_directory)
- {
- @param = (@param, "--base-directory", $base_directory);
- }
- if ($no_compat_libtool)
- {
- @param = (@param, "--no-compat-libtool");
- }
- elsif ($compat_libtool)
- {
- @param = (@param, "--compat-libtool");
- }
- if ($gcov_tool)
- {
- @param = (@param, "--gcov-tool", $gcov_tool);
- }
- if ($ignore_errors)
- {
- @param = (@param, "--ignore-errors", $ignore_errors);
- }
- if ($initial)
- {
- @param = (@param, "--initial");
- }
- if ($no_recursion)
- {
- @param = (@param, "--no-recursion");
- }
-
- system(@param);
- exit($? >> 8);
-}
-
-
-#
-# kernel_reset()
-#
-# Reset kernel coverage.
-#
-# Die on error.
-#
-
-sub kernel_reset()
-{
- local *HANDLE;
- check_and_load_kernel_module();
-
- info("Resetting kernel execution counters\n");
- open(HANDLE, ">$gcov_dir/vmlinux") or
- die("ERROR: cannot write to $gcov_dir/vmlinux!\n");
- print(HANDLE "0");
- close(HANDLE);
-
- # Unload module if we loaded it in the first place
- if ($need_unload)
- {
- unload_module($need_unload);
- }
-}
-
-
-#
-# kernel_capture()
-#
-# Capture kernel coverage data and write it to OUTPUT_FILENAME if specified,
-# otherwise stdout.
-#
-
-sub kernel_capture()
-{
- my @param;
-
- check_and_load_kernel_module();
-
- # Make sure the temporary directory is removed upon script termination
- END
- {
- if ($temp_dir_name)
- {
- stat($temp_dir_name);
- if (-r _)
- {
- info("Removing temporary directory ".
- "$temp_dir_name\n");
-
- # Remove temporary directory
- system("rm", "-rf", $temp_dir_name)
- and warn("WARNING: cannot remove ".
- "temporary directory ".
- "$temp_dir_name!\n");
- }
- }
- }
-
- # Get temporary directory
- $temp_dir_name = create_temp_dir();
-
- info("Copying kernel data to temporary directory $temp_dir_name\n");
-
- if (!@kernel_directory)
- {
- # Copy files from gcov kernel directory
- system("cp", "-dr", $gcov_dir, $temp_dir_name)
- and die("ERROR: cannot copy files from $gcov_dir!\n");
- }
- else
- {
- # Prefix list of kernel sub-directories with the gcov kernel
- # directory
- @kernel_directory = map("$gcov_dir/$_", @kernel_directory);
-
- # Copy files from gcov kernel directory
- system("cp", "-dr", @kernel_directory, $temp_dir_name)
- and die("ERROR: cannot copy files from ".
- join(" ", @kernel_directory)."!\n");
- }
-
- # Make directories writable
- system("find", $temp_dir_name, "-type", "d", "-exec", "chmod", "u+w",
- "{}", ";")
- and die("ERROR: cannot modify access rights for ".
- "$temp_dir_name!\n");
-
- # Make files writable
- system("find", $temp_dir_name, "-type", "f", "-exec", "chmod", "u+w",
- "{}", ";")
- and die("ERROR: cannot modify access rights for ".
- "$temp_dir_name!\n");
-
- # Capture data
- info("Capturing coverage data from $temp_dir_name\n");
- @param = ("$tool_dir/geninfo", $temp_dir_name);
- if ($output_filename)
- {
- @param = (@param, "--output-filename", $output_filename);
- }
- if ($test_name)
- {
- @param = (@param, "--test-name", $test_name);
- }
- if ($follow)
- {
- @param = (@param, "--follow");
- }
- if ($quiet)
- {
- @param = (@param, "--quiet");
- }
- if (defined($checksum))
- {
- if ($checksum)
- {
- @param = (@param, "--checksum");
- }
- else
- {
- @param = (@param, "--no-checksum");
- }
- }
- if ($base_directory)
- {
- @param = (@param, "--base-directory", $base_directory);
- }
- if ($no_compat_libtool)
- {
- @param = (@param, "--no-compat-libtool");
- }
- elsif ($compat_libtool)
- {
- @param = (@param, "--compat-libtool");
- }
- if ($gcov_tool)
- {
- @param = (@param, "--gcov-tool", $gcov_tool);
- }
- if ($ignore_errors)
- {
- @param = (@param, "--ignore-errors", $ignore_errors);
- }
- if ($initial)
- {
- @param = (@param, "--initial");
- }
- system(@param) and exit($? >> 8);
-
-
- # Unload module if we loaded it in the first place
- if ($need_unload)
- {
- unload_module($need_unload);
- }
-}
-
-
-#
-# info(printf_parameter)
-#
-# Use printf to write PRINTF_PARAMETER to stdout only when the $quiet flag
-# is not set.
-#
-
-sub info(@)
-{
- if (!$quiet)
- {
- # Print info string
- if ($to_file)
- {
- print(@_)
- }
- else
- {
- # Don't interfer with the .info output to STDOUT
- printf(STDERR @_);
- }
- }
-}
-
-
-#
-# Check if the gcov kernel module is loaded. If it is, exit, if not, try
-# to load it.
-#
-# Die on error.
-#
-
-sub check_and_load_kernel_module()
-{
- my $module_name;
-
- # Is it loaded already?
- stat("$gcov_dir");
- if (-r _) { return(); }
-
- info("Loading required gcov kernel module.\n");
-
- # Do we have access to the insmod tool?
- stat($insmod_tool);
- if (!-x _)
- {
- die("ERROR: need insmod tool ($insmod_tool) to access kernel ".
- "coverage data!\n");
- }
- # Do we have access to the modprobe tool?
- stat($modprobe_tool);
- if (!-x _)
- {
- die("ERROR: need modprobe tool ($modprobe_tool) to access ".
- "kernel coverage data!\n");
- }
-
- # Try some possibilities of where the gcov kernel module may be found
- foreach $module_name (@gcovmod)
- {
- # Try to load module from system wide module directory
- # /lib/modules
- if (system_no_output(3, $modprobe_tool, $module_name) == 0)
- {
- # Succeeded
- $need_unload = $module_name;
- return();
- }
-
- # Try to load linux 2.5/2.6 module from tool directory
- if (system_no_output(3, $insmod_tool,
- "$tool_dir/$module_name.ko") == 0)
- {
- # Succeeded
- $need_unload = $module_name;
- return();
- }
-
- # Try to load linux 2.4 module from tool directory
- if (system_no_output(3, $insmod_tool,
- "$tool_dir/$module_name.o") == 0)
- {
- # Succeeded
- $need_unload = $module_name;
- return();
- }
- }
-
- # Hm, loading failed - maybe we aren't root?
- if ($> != 0)
- {
- die("ERROR: need root access to load kernel module!\n");
- }
-
- die("ERROR: cannot load required gcov kernel module!\n");
-}
-
-
-#
-# unload_module()
-#
-# Unload the gcov kernel module.
-#
-
-sub unload_module($)
-{
- my $module = $_[0];
-
- info("Unloading kernel module $module\n");
-
- # Do we have access to the rmmod tool?
- stat($rmmod_tool);
- if (!-x _)
- {
- warn("WARNING: cannot execute rmmod tool at $rmmod_tool - ".
- "gcov module still loaded!\n");
- }
-
- # Unload gcov kernel module
- system_no_output(1, $rmmod_tool, $module)
- and warn("WARNING: cannot unload gcov kernel module ".
- "$module!\n");
-}
-
-
-#
-# create_temp_dir()
-#
-# Create a temporary directory and return its path.
-#
-# Die on error.
-#
-
-sub create_temp_dir()
-{
- my $dirname;
- my $number = sprintf("%d", rand(1000));
-
- # Endless loops are evil
- while ($number++ < 1000)
- {
- $dirname = "$tmp_dir/$tmp_prefix$number";
- stat($dirname);
- if (-e _) { next; }
-
- mkdir($dirname)
- or die("ERROR: cannot create temporary directory ".
- "$dirname!\n");
-
- return($dirname);
- }
-
- die("ERROR: cannot create temporary directory in $tmp_dir!\n");
-}
-
-
-#
-# read_info_file(info_filename)
-#
-# Read in the contents of the .info file specified by INFO_FILENAME. Data will
-# be returned as a reference to a hash containing the following mappings:
-#
-# %result: for each filename found in file -> \%data
-#
-# %data: "test" -> \%testdata
-# "sum" -> \%sumcount
-# "func" -> \%funcdata
-# "found" -> $lines_found (number of instrumented lines found in file)
-# "hit" -> $lines_hit (number of executed lines in file)
-# "check" -> \%checkdata
-# "testfnc" -> \%testfncdata
-# "sumfnc" -> \%sumfnccount
-#
-# %testdata : name of test affecting this file -> \%testcount
-# %testfncdata: name of test affecting this file -> \%testfnccount
-#
-# %testcount : line number -> execution count for a single test
-# %testfnccount: function name -> execution count for a single test
-# %sumcount : line number -> execution count for all tests
-# %sumfnccount : function name -> execution count for all tests
-# %funcdata : function name -> line number
-# %checkdata : line number -> checksum of source code line
-#
-# Note that .info file sections referring to the same file and test name
-# will automatically be combined by adding all execution counts.
-#
-# Note that if INFO_FILENAME ends with ".gz", it is assumed that the file
-# is compressed using GZIP. If available, GUNZIP will be used to decompress
-# this file.
-#
-# Die on error.
-#
-
-sub read_info_file($)
-{
- my $tracefile = $_[0]; # Name of tracefile
- my %result; # Resulting hash: file -> data
- my $data; # Data handle for current entry
- my $testdata; # " "
- my $testcount; # " "
- my $sumcount; # " "
- my $funcdata; # " "
- my $checkdata; # " "
- my $testfncdata;
- my $testfnccount;
- my $sumfnccount;
- my $line; # Current line read from .info file
- my $testname; # Current test name
- my $filename; # Current filename
- my $hitcount; # Count for lines hit
- my $count; # Execution count of current line
- my $negative; # If set, warn about negative counts
- my $changed_testname; # If set, warn about changed testname
- my $line_checksum; # Checksum of current line
- local *INFO_HANDLE; # Filehandle for .info file
-
- info("Reading tracefile $tracefile\n");
-
- # Check if file exists and is readable
- stat($_[0]);
- if (!(-r _))
- {
- die("ERROR: cannot read file $_[0]!\n");
- }
-
- # Check if this is really a plain file
- if (!(-f _))
- {
- die("ERROR: not a plain file: $_[0]!\n");
- }
-
- # Check for .gz extension
- if ($_[0] =~ /\.gz$/)
- {
- # Check for availability of GZIP tool
- system_no_output(1, "gunzip" ,"-h")
- and die("ERROR: gunzip command not available!\n");
-
- # Check integrity of compressed file
- system_no_output(1, "gunzip", "-t", $_[0])
- and die("ERROR: integrity check failed for ".
- "compressed file $_[0]!\n");
-
- # Open compressed file
- open(INFO_HANDLE, "gunzip -c $_[0]|")
- or die("ERROR: cannot start gunzip to decompress ".
- "file $_[0]!\n");
- }
- else
- {
- # Open decompressed file
- open(INFO_HANDLE, $_[0])
- or die("ERROR: cannot read file $_[0]!\n");
- }
-
- $testname = "";
- while (<INFO_HANDLE>)
- {
- chomp($_);
- $line = $_;
-
- # Switch statement
- foreach ($line)
- {
- /^TN:([^,]*)/ && do
- {
- # Test name information found
- $testname = defined($1) ? $1 : "";
- if ($testname =~ s/\W/_/g)
- {
- $changed_testname = 1;
- }
- last;
- };
-
- /^[SK]F:(.*)/ && do
- {
- # Filename information found
- # Retrieve data for new entry
- $filename = $1;
-
- $data = $result{$filename};
- ($testdata, $sumcount, $funcdata, $checkdata,
- $testfncdata, $sumfnccount) =
- get_info_entry($data);
-
- if (defined($testname))
- {
- $testcount = $testdata->{$testname};
- $testfnccount = $testfncdata->{$testname};
- }
- else
- {
- $testcount = {};
- $testfnccount = {};
- }
- last;
- };
-
- /^DA:(\d+),(-?\d+)(,[^,\s]+)?/ && do
- {
- # Fix negative counts
- $count = $2 < 0 ? 0 : $2;
- if ($2 < 0)
- {
- $negative = 1;
- }
- # Execution count found, add to structure
- # Add summary counts
- $sumcount->{$1} += $count;
-
- # Add test-specific counts
- if (defined($testname))
- {
- $testcount->{$1} += $count;
- }
-
- # Store line checksum if available
- if (defined($3))
- {
- $line_checksum = substr($3, 1);
-
- # Does it match a previous definition
- if (defined($checkdata->{$1}) &&
- ($checkdata->{$1} ne
- $line_checksum))
- {
- die("ERROR: checksum mismatch ".
- "at $filename:$1\n");
- }
-
- $checkdata->{$1} = $line_checksum;
- }
- last;
- };
-
- /^FN:(\d+),([^,]+)/ && do
- {
- # Function data found, add to structure
- $funcdata->{$2} = $1;
-
- # Also initialize function call data
- if (!defined($sumfnccount->{$2})) {
- $sumfnccount->{$2} = 0;
- }
- if (defined($testname))
- {
- if (!defined($testfnccount->{$2})) {
- $testfnccount->{$2} = 0;
- }
- }
- last;
- };
-
- /^FNDA:(\d+),([^,]+)/ && do
- {
- # Function call count found, add to structure
- # Add summary counts
- $sumfnccount->{$2} += $1;
-
- # Add test-specific counts
- if (defined($testname))
- {
- $testfnccount->{$2} += $1;
- }
- last;
- };
- /^end_of_record/ && do
- {
- # Found end of section marker
- if ($filename)
- {
- # Store current section data
- if (defined($testname))
- {
- $testdata->{$testname} =
- $testcount;
- $testfncdata->{$testname} =
- $testfnccount;
- }
-
- set_info_entry($data, $testdata,
- $sumcount, $funcdata,
- $checkdata, $testfncdata,
- $sumfnccount);
- $result{$filename} = $data;
- last;
- }
- };
-
- # default
- last;
- }
- }
- close(INFO_HANDLE);
-
- # Calculate hit and found values for lines and functions of each file
- foreach $filename (keys(%result))
- {
- $data = $result{$filename};
-
- ($testdata, $sumcount, undef, undef, $testfncdata,
- $sumfnccount) = get_info_entry($data);
-
- # Filter out empty files
- if (scalar(keys(%{$sumcount})) == 0)
- {
- delete($result{$filename});
- next;
- }
- # Filter out empty test cases
- foreach $testname (keys(%{$testdata}))
- {
- if (!defined($testdata->{$testname}) ||
- scalar(keys(%{$testdata->{$testname}})) == 0)
- {
- delete($testdata->{$testname});
- delete($testfncdata->{$testname});
- }
- }
-
- $data->{"found"} = scalar(keys(%{$sumcount}));
- $hitcount = 0;
-
- foreach (keys(%{$sumcount}))
- {
- if ($sumcount->{$_} > 0) { $hitcount++; }
- }
-
- $data->{"hit"} = $hitcount;
-
- # Get found/hit values for function call data
- $data->{"f_found"} = scalar(keys(%{$sumfnccount}));
- $hitcount = 0;
-
- foreach (keys(%{$sumfnccount})) {
- if ($sumfnccount->{$_} > 0) {
- $hitcount++;
- }
- }
- $data->{"f_hit"} = $hitcount;
- }
-
- if (scalar(keys(%result)) == 0)
- {
- die("ERROR: no valid records found in tracefile $tracefile\n");
- }
- if ($negative)
- {
- warn("WARNING: negative counts found in tracefile ".
- "$tracefile\n");
- }
- if ($changed_testname)
- {
- warn("WARNING: invalid characters removed from testname in ".
- "tracefile $tracefile\n");
- }
-
- return(\%result);
-}
-
-
-#
-# get_info_entry(hash_ref)
-#
-# Retrieve data from an entry of the structure generated by read_info_file().
-# Return a list of references to hashes:
-# (test data hash ref, sum count hash ref, funcdata hash ref, checkdata hash
-# ref, testfncdata hash ref, sumfnccount hash ref, lines found, lines hit,
-# functions found, functions hit)
-#
-
-sub get_info_entry($)
-{
- my $testdata_ref = $_[0]->{"test"};
- my $sumcount_ref = $_[0]->{"sum"};
- my $funcdata_ref = $_[0]->{"func"};
- my $checkdata_ref = $_[0]->{"check"};
- my $testfncdata = $_[0]->{"testfnc"};
- my $sumfnccount = $_[0]->{"sumfnc"};
- my $lines_found = $_[0]->{"found"};
- my $lines_hit = $_[0]->{"hit"};
- my $f_found = $_[0]->{"f_found"};
- my $f_hit = $_[0]->{"f_hit"};
-
- return ($testdata_ref, $sumcount_ref, $funcdata_ref, $checkdata_ref,
- $testfncdata, $sumfnccount, $lines_found, $lines_hit,
- $f_found, $f_hit);
-}
-
-
-#
-# set_info_entry(hash_ref, testdata_ref, sumcount_ref, funcdata_ref,
-# checkdata_ref, testfncdata_ref, sumfcncount_ref[,lines_found,
-# lines_hit, f_found, f_hit])
-#
-# Update the hash referenced by HASH_REF with the provided data references.
-#
-
-sub set_info_entry($$$$$$$;$$$$)
-{
- my $data_ref = $_[0];
-
- $data_ref->{"test"} = $_[1];
- $data_ref->{"sum"} = $_[2];
- $data_ref->{"func"} = $_[3];
- $data_ref->{"check"} = $_[4];
- $data_ref->{"testfnc"} = $_[5];
- $data_ref->{"sumfnc"} = $_[6];
-
- if (defined($_[7])) { $data_ref->{"found"} = $_[7]; }
- if (defined($_[8])) { $data_ref->{"hit"} = $_[8]; }
- if (defined($_[9])) { $data_ref->{"f_found"} = $_[9]; }
- if (defined($_[10])) { $data_ref->{"f_hit"} = $_[10]; }
-}
-
-
-#
-# add_counts(data1_ref, data2_ref)
-#
-# DATA1_REF and DATA2_REF are references to hashes containing a mapping
-#
-# line number -> execution count
-#
-# Return a list (RESULT_REF, LINES_FOUND, LINES_HIT) where RESULT_REF
-# is a reference to a hash containing the combined mapping in which
-# execution counts are added.
-#
-
-sub add_counts($$)
-{
- my %data1 = %{$_[0]}; # Hash 1
- my %data2 = %{$_[1]}; # Hash 2
- my %result; # Resulting hash
- my $line; # Current line iteration scalar
- my $data1_count; # Count of line in hash1
- my $data2_count; # Count of line in hash2
- my $found = 0; # Total number of lines found
- my $hit = 0; # Number of lines with a count > 0
-
- foreach $line (keys(%data1))
- {
- $data1_count = $data1{$line};
- $data2_count = $data2{$line};
-
- # Add counts if present in both hashes
- if (defined($data2_count)) { $data1_count += $data2_count; }
-
- # Store sum in %result
- $result{$line} = $data1_count;
-
- $found++;
- if ($data1_count > 0) { $hit++; }
- }
-
- # Add lines unique to data2
- foreach $line (keys(%data2))
- {
- # Skip lines already in data1
- if (defined($data1{$line})) { next; }
-
- # Copy count from data2
- $result{$line} = $data2{$line};
-
- $found++;
- if ($result{$line} > 0) { $hit++; }
- }
-
- return (\%result, $found, $hit);
-}
-
-
-#
-# merge_checksums(ref1, ref2, filename)
-#
-# REF1 and REF2 are references to hashes containing a mapping
-#
-# line number -> checksum
-#
-# Merge checksum lists defined in REF1 and REF2 and return reference to
-# resulting hash. Die if a checksum for a line is defined in both hashes
-# but does not match.
-#
-
-sub merge_checksums($$$)
-{
- my $ref1 = $_[0];
- my $ref2 = $_[1];
- my $filename = $_[2];
- my %result;
- my $line;
-
- foreach $line (keys(%{$ref1}))
- {
- if (defined($ref2->{$line}) &&
- ($ref1->{$line} ne $ref2->{$line}))
- {
- die("ERROR: checksum mismatch at $filename:$line\n");
- }
- $result{$line} = $ref1->{$line};
- }
-
- foreach $line (keys(%{$ref2}))
- {
- $result{$line} = $ref2->{$line};
- }
-
- return \%result;
-}
-
-
-#
-# merge_func_data(funcdata1, funcdata2, filename)
-#
-
-sub merge_func_data($$$)
-{
- my ($funcdata1, $funcdata2, $filename) = @_;
- my %result;
- my $func;
-
- %result = %{$funcdata1};
-
- foreach $func (keys(%{$funcdata2})) {
- my $line1 = $result{$func};
- my $line2 = $funcdata2->{$func};
-
- if (defined($line1) && ($line1 != $line2)) {
- warn("WARNING: function data mismatch at ".
- "$filename:$line2\n");
- next;
- }
- $result{$func} = $line2;
- }
-
- return \%result;
-}
-
-
-#
-# add_fnccount(fnccount1, fnccount2)
-#
-# Add function call count data. Return list (fnccount_added, f_found, f_hit)
-#
-
-sub add_fnccount($$)
-{
- my ($fnccount1, $fnccount2) = @_;
- my %result;
- my $f_found;
- my $f_hit;
- my $function;
-
- %result = %{$fnccount1};
- foreach $function (keys(%{$fnccount2})) {
- $result{$function} += $fnccount2->{$function};
- }
- $f_found = scalar(keys(%result));
- $f_hit = 0;
- foreach $function (keys(%result)) {
- if ($result{$function} > 0) {
- $f_hit++;
- }
- }
-
- return (\%result, $f_found, $f_hit);
-}
-
-#
-# add_testfncdata(testfncdata1, testfncdata2)
-#
-# Add function call count data for several tests. Return reference to
-# added_testfncdata.
-#
-
-sub add_testfncdata($$)
-{
- my ($testfncdata1, $testfncdata2) = @_;
- my %result;
- my $testname;
-
- foreach $testname (keys(%{$testfncdata1})) {
- if (defined($testfncdata2->{$testname})) {
- my $fnccount;
-
- # Function call count data for this testname exists
- # in both data sets: merge
- ($fnccount) = add_fnccount(
- $testfncdata1->{$testname},
- $testfncdata2->{$testname});
- $result{$testname} = $fnccount;
- next;
- }
- # Function call count data for this testname is unique to
- # data set 1: copy
- $result{$testname} = $testfncdata1->{$testname};
- }
-
- # Add count data for testnames unique to data set 2
- foreach $testname (keys(%{$testfncdata2})) {
- if (!defined($result{$testname})) {
- $result{$testname} = $testfncdata2->{$testname};
- }
- }
- return \%result;
-}
-
-#
-# combine_info_entries(entry_ref1, entry_ref2, filename)
-#
-# Combine .info data entry hashes referenced by ENTRY_REF1 and ENTRY_REF2.
-# Return reference to resulting hash.
-#
-
-sub combine_info_entries($$$)
-{
- my $entry1 = $_[0]; # Reference to hash containing first entry
- my $testdata1;
- my $sumcount1;
- my $funcdata1;
- my $checkdata1;
- my $testfncdata1;
- my $sumfnccount1;
-
- my $entry2 = $_[1]; # Reference to hash containing second entry
- my $testdata2;
- my $sumcount2;
- my $funcdata2;
- my $checkdata2;
- my $testfncdata2;
- my $sumfnccount2;
-
- my %result; # Hash containing combined entry
- my %result_testdata;
- my $result_sumcount = {};
- my $result_funcdata;
- my $result_testfncdata;
- my $result_sumfnccount;
- my $lines_found;
- my $lines_hit;
- my $f_found;
- my $f_hit;
-
- my $testname;
- my $filename = $_[2];
-
- # Retrieve data
- ($testdata1, $sumcount1, $funcdata1, $checkdata1, $testfncdata1,
- $sumfnccount1) = get_info_entry($entry1);
- ($testdata2, $sumcount2, $funcdata2, $checkdata2, $testfncdata2,
- $sumfnccount2) = get_info_entry($entry2);
-
- # Merge checksums
- $checkdata1 = merge_checksums($checkdata1, $checkdata2, $filename);
-
- # Combine funcdata
- $result_funcdata = merge_func_data($funcdata1, $funcdata2, $filename);
-
- # Combine function call count data
- $result_testfncdata = add_testfncdata($testfncdata1, $testfncdata2);
- ($result_sumfnccount, $f_found, $f_hit) =
- add_fnccount($sumfnccount1, $sumfnccount2);
-
- # Combine testdata
- foreach $testname (keys(%{$testdata1}))
- {
- if (defined($testdata2->{$testname}))
- {
- # testname is present in both entries, requires
- # combination
- ($result_testdata{$testname}) =
- add_counts($testdata1->{$testname},
- $testdata2->{$testname});
- }
- else
- {
- # testname only present in entry1, add to result
- $result_testdata{$testname} = $testdata1->{$testname};
- }
-
- # update sum count hash
- ($result_sumcount, $lines_found, $lines_hit) =
- add_counts($result_sumcount,
- $result_testdata{$testname});
- }
-
- foreach $testname (keys(%{$testdata2}))
- {
- # Skip testnames already covered by previous iteration
- if (defined($testdata1->{$testname})) { next; }
-
- # testname only present in entry2, add to result hash
- $result_testdata{$testname} = $testdata2->{$testname};
-
- # update sum count hash
- ($result_sumcount, $lines_found, $lines_hit) =
- add_counts($result_sumcount,
- $result_testdata{$testname});
- }
-
- # Calculate resulting sumcount
-
- # Store result
- set_info_entry(\%result, \%result_testdata, $result_sumcount,
- $result_funcdata, $checkdata1, $result_testfncdata,
- $result_sumfnccount, $lines_found, $lines_hit,
- $f_found, $f_hit);
-
- return(\%result);
-}
-
-
-#
-# combine_info_files(info_ref1, info_ref2)
-#
-# Combine .info data in hashes referenced by INFO_REF1 and INFO_REF2. Return
-# reference to resulting hash.
-#
-
-sub combine_info_files($$)
-{
- my %hash1 = %{$_[0]};
- my %hash2 = %{$_[1]};
- my $filename;
-
- foreach $filename (keys(%hash2))
- {
- if ($hash1{$filename})
- {
- # Entry already exists in hash1, combine them
- $hash1{$filename} =
- combine_info_entries($hash1{$filename},
- $hash2{$filename},
- $filename);
- }
- else
- {
- # Entry is unique in both hashes, simply add to
- # resulting hash
- $hash1{$filename} = $hash2{$filename};
- }
- }
-
- return(\%hash1);
-}
-
-
-#
-# add_traces()
-#
-
-sub add_traces()
-{
- my $total_trace;
- my $current_trace;
- my $tracefile;
- local *INFO_HANDLE;
-
- info("Combining tracefiles.\n");
-
- foreach $tracefile (@add_tracefile)
- {
- $current_trace = read_info_file($tracefile);
- if ($total_trace)
- {
- $total_trace = combine_info_files($total_trace,
- $current_trace);
- }
- else
- {
- $total_trace = $current_trace;
- }
- }
-
- # Write combined data
- if ($to_file)
- {
- info("Writing data to $output_filename\n");
- open(INFO_HANDLE, ">$output_filename")
- or die("ERROR: cannot write to $output_filename!\n");
- write_info_file(*INFO_HANDLE, $total_trace);
- close(*INFO_HANDLE);
- }
- else
- {
- write_info_file(*STDOUT, $total_trace);
- }
-}
-
-
-#
-# write_info_file(filehandle, data)
-#
-
-sub write_info_file(*$)
-{
- local *INFO_HANDLE = $_[0];
- my %data = %{$_[1]};
- my $source_file;
- my $entry;
- my $testdata;
- my $sumcount;
- my $funcdata;
- my $checkdata;
- my $testfncdata;
- my $sumfnccount;
- my $testname;
- my $line;
- my $func;
- my $testcount;
- my $testfnccount;
- my $found;
- my $hit;
- my $f_found;
- my $f_hit;
-
- foreach $source_file (keys(%data))
- {
- $entry = $data{$source_file};
- ($testdata, $sumcount, $funcdata, $checkdata, $testfncdata,
- $sumfnccount) = get_info_entry($entry);
- foreach $testname (keys(%{$testdata}))
- {
- $testcount = $testdata->{$testname};
- $testfnccount = $testfncdata->{$testname};
- $found = 0;
- $hit = 0;
-
- print(INFO_HANDLE "TN:$testname\n");
- print(INFO_HANDLE "SF:$source_file\n");
-
- # Write function related data
- foreach $func (
- sort({$funcdata->{$a} <=> $funcdata->{$b}}
- keys(%{$funcdata})))
- {
- print(INFO_HANDLE "FN:".$funcdata->{$func}.
- ",$func\n");
- }
- foreach $func (keys(%{$testfnccount})) {
- print(INFO_HANDLE "FNDA:".
- $testfnccount->{$func}.
- ",$func\n");
- }
- ($f_found, $f_hit) =
- get_func_found_and_hit($testfnccount);
- print(INFO_HANDLE "FNF:$f_found\n");
- print(INFO_HANDLE "FNH:$f_hit\n");
-
- # Write line related data
- foreach $line (sort({$a <=> $b} keys(%{$testcount})))
- {
- print(INFO_HANDLE "DA:$line,".
- $testcount->{$line}.
- (defined($checkdata->{$line}) &&
- $checksum ?
- ",".$checkdata->{$line} : "")."\n");
- $found++;
- if ($testcount->{$line} > 0)
- {
- $hit++;
- }
-
- }
- print(INFO_HANDLE "LF:$found\n");
- print(INFO_HANDLE "LH:$hit\n");
- print(INFO_HANDLE "end_of_record\n");
- }
- }
-}
-
-
-#
-# transform_pattern(pattern)
-#
-# Transform shell wildcard expression to equivalent PERL regular expression.
-# Return transformed pattern.
-#
-
-sub transform_pattern($)
-{
- my $pattern = $_[0];
-
- # Escape special chars
-
- $pattern =~ s/\\/\\\\/g;
- $pattern =~ s/\//\\\//g;
- $pattern =~ s/\^/\\\^/g;
- $pattern =~ s/\$/\\\$/g;
- $pattern =~ s/\(/\\\(/g;
- $pattern =~ s/\)/\\\)/g;
- $pattern =~ s/\[/\\\[/g;
- $pattern =~ s/\]/\\\]/g;
- $pattern =~ s/\{/\\\{/g;
- $pattern =~ s/\}/\\\}/g;
- $pattern =~ s/\./\\\./g;
- $pattern =~ s/\,/\\\,/g;
- $pattern =~ s/\|/\\\|/g;
- $pattern =~ s/\+/\\\+/g;
- $pattern =~ s/\!/\\\!/g;
-
- # Transform ? => (.) and * => (.*)
-
- $pattern =~ s/\*/\(\.\*\)/g;
- $pattern =~ s/\?/\(\.\)/g;
-
- return $pattern;
-}
-
-
-#
-# extract()
-#
-
-sub extract()
-{
- my $data = read_info_file($extract);
- my $filename;
- my $keep;
- my $pattern;
- my @pattern_list;
- my $extracted = 0;
- local *INFO_HANDLE;
-
- # Need perlreg expressions instead of shell pattern
- @pattern_list = map({ transform_pattern($_); } @ARGV);
-
- # Filter out files which do not match any pattern
- foreach $filename (sort(keys(%{$data})))
- {
- $keep = 0;
-
- foreach $pattern (@pattern_list)
- {
- $keep ||= ($filename =~ (/^$pattern$/));
- }
-
-
- if (!$keep)
- {
- delete($data->{$filename});
- }
- else
- {
- info("Extracting $filename\n"),
- $extracted++;
- }
- }
-
- # Write extracted data
- if ($to_file)
- {
- info("Extracted $extracted files\n");
- info("Writing data to $output_filename\n");
- open(INFO_HANDLE, ">$output_filename")
- or die("ERROR: cannot write to $output_filename!\n");
- write_info_file(*INFO_HANDLE, $data);
- close(*INFO_HANDLE);
- }
- else
- {
- write_info_file(*STDOUT, $data);
- }
-}
-
-
-#
-# remove()
-#
-
-sub remove()
-{
- my $data = read_info_file($remove);
- my $filename;
- my $match_found;
- my $pattern;
- my @pattern_list;
- my $removed = 0;
- local *INFO_HANDLE;
-
- # Need perlreg expressions instead of shell pattern
- @pattern_list = map({ transform_pattern($_); } @ARGV);
-
- # Filter out files that match the pattern
- foreach $filename (sort(keys(%{$data})))
- {
- $match_found = 0;
-
- foreach $pattern (@pattern_list)
- {
- $match_found ||= ($filename =~ (/$pattern$/));
- }
-
-
- if ($match_found)
- {
- delete($data->{$filename});
- info("Removing $filename\n"),
- $removed++;
- }
- }
-
- # Write data
- if ($to_file)
- {
- info("Deleted $removed files\n");
- info("Writing data to $output_filename\n");
- open(INFO_HANDLE, ">$output_filename")
- or die("ERROR: cannot write to $output_filename!\n");
- write_info_file(*INFO_HANDLE, $data);
- close(*INFO_HANDLE);
- }
- else
- {
- write_info_file(*STDOUT, $data);
- }
-}
-
-
-#
-# list()
-#
-
-sub list()
-{
- my $data = read_info_file($list);
- my $filename;
- my $found;
- my $hit;
- my $entry;
-
- info("Listing contents of $list:\n");
-
- # List all files
- foreach $filename (sort(keys(%{$data})))
- {
- $entry = $data->{$filename};
- (undef, undef, undef, undef, undef, undef, $found, $hit) =
- get_info_entry($entry);
- printf("$filename: $hit of $found lines hit\n");
- }
-}
-
-
-#
-# get_common_filename(filename1, filename2)
-#
-# Check for filename components which are common to FILENAME1 and FILENAME2.
-# Upon success, return
-#
-# (common, path1, path2)
-#
-# or 'undef' in case there are no such parts.
-#
-
-sub get_common_filename($$)
-{
- my @list1 = split("/", $_[0]);
- my @list2 = split("/", $_[1]);
- my @result;
-
- # Work in reverse order, i.e. beginning with the filename itself
- while (@list1 && @list2 && ($list1[$#list1] eq $list2[$#list2]))
- {
- unshift(@result, pop(@list1));
- pop(@list2);
- }
-
- # Did we find any similarities?
- if (scalar(@result) > 0)
- {
- return (join("/", @result), join("/", @list1),
- join("/", @list2));
- }
- else
- {
- return undef;
- }
-}
-
-
-#
-# strip_directories($path, $depth)
-#
-# Remove DEPTH leading directory levels from PATH.
-#
-
-sub strip_directories($$)
-{
- my $filename = $_[0];
- my $depth = $_[1];
- my $i;
-
- if (!defined($depth) || ($depth < 1))
- {
- return $filename;
- }
- for ($i = 0; $i < $depth; $i++)
- {
- $filename =~ s/^[^\/]*\/+(.*)$/$1/;
- }
- return $filename;
-}
-
-
-#
-# read_diff(filename)
-#
-# Read diff output from FILENAME to memory. The diff file has to follow the
-# format generated by 'diff -u'. Returns a list of hash references:
-#
-# (mapping, path mapping)
-#
-# mapping: filename -> reference to line hash
-# line hash: line number in new file -> corresponding line number in old file
-#
-# path mapping: filename -> old filename
-#
-# Die in case of error.
-#
-
-sub read_diff($)
-{
- my $diff_file = $_[0]; # Name of diff file
- my %diff; # Resulting mapping filename -> line hash
- my %paths; # Resulting mapping old path -> new path
- my $mapping; # Reference to current line hash
- my $line; # Contents of current line
- my $num_old; # Current line number in old file
- my $num_new; # Current line number in new file
- my $file_old; # Name of old file in diff section
- my $file_new; # Name of new file in diff section
- my $filename; # Name of common filename of diff section
- my $in_block = 0; # Non-zero while we are inside a diff block
- local *HANDLE; # File handle for reading the diff file
-
- info("Reading diff $diff_file\n");
-
- # Check if file exists and is readable
- stat($diff_file);
- if (!(-r _))
- {
- die("ERROR: cannot read file $diff_file!\n");
- }
-
- # Check if this is really a plain file
- if (!(-f _))
- {
- die("ERROR: not a plain file: $diff_file!\n");
- }
-
- # Check for .gz extension
- if ($diff_file =~ /\.gz$/)
- {
- # Check for availability of GZIP tool
- system_no_output(1, "gunzip", "-h")
- and die("ERROR: gunzip command not available!\n");
-
- # Check integrity of compressed file
- system_no_output(1, "gunzip", "-t", $diff_file)
- and die("ERROR: integrity check failed for ".
- "compressed file $diff_file!\n");
-
- # Open compressed file
- open(HANDLE, "gunzip -c $diff_file|")
- or die("ERROR: cannot start gunzip to decompress ".
- "file $_[0]!\n");
- }
- else
- {
- # Open decompressed file
- open(HANDLE, $diff_file)
- or die("ERROR: cannot read file $_[0]!\n");
- }
-
- # Parse diff file line by line
- while (<HANDLE>)
- {
- chomp($_);
- $line = $_;
-
- foreach ($line)
- {
- # Filename of old file:
- # --- <filename> <date>
- /^--- (\S+)/ && do
- {
- $file_old = strip_directories($1, $strip);
- last;
- };
- # Filename of new file:
- # +++ <filename> <date>
- /^\+\+\+ (\S+)/ && do
- {
- # Add last file to resulting hash
- if ($filename)
- {
- my %new_hash;
- $diff{$filename} = $mapping;
- $mapping = \%new_hash;
- }
- $file_new = strip_directories($1, $strip);
- $filename = $file_old;
- $paths{$filename} = $file_new;
- $num_old = 1;
- $num_new = 1;
- last;
- };
- # Start of diff block:
- # @@ -old_start,old_num, +new_start,new_num @@
- /^\@\@\s+-(\d+),(\d+)\s+\+(\d+),(\d+)\s+\@\@$/ && do
- {
- $in_block = 1;
- while ($num_old < $1)
- {
- $mapping->{$num_new} = $num_old;
- $num_old++;
- $num_new++;
- }
- last;
- };
- # Unchanged line
- # <line starts with blank>
- /^ / && do
- {
- if ($in_block == 0)
- {
- last;
- }
- $mapping->{$num_new} = $num_old;
- $num_old++;
- $num_new++;
- last;
- };
- # Line as seen in old file
- # <line starts with '-'>
- /^-/ && do
- {
- if ($in_block == 0)
- {
- last;
- }
- $num_old++;
- last;
- };
- # Line as seen in new file
- # <line starts with '+'>
- /^\+/ && do
- {
- if ($in_block == 0)
- {
- last;
- }
- $num_new++;
- last;
- };
- # Empty line
- /^$/ && do
- {
- if ($in_block == 0)
- {
- last;
- }
- $mapping->{$num_new} = $num_old;
- $num_old++;
- $num_new++;
- last;
- };
- }
- }
-
- close(HANDLE);
-
- # Add final diff file section to resulting hash
- if ($filename)
- {
- $diff{$filename} = $mapping;
- }
-
- if (!%diff)
- {
- die("ERROR: no valid diff data found in $diff_file!\n".
- "Make sure to use 'diff -u' when generating the diff ".
- "file.\n");
- }
- return (\%diff, \%paths);
-}
-
-
-#
-# apply_diff($count_data, $line_hash)
-#
-# Transform count data using a mapping of lines:
-#
-# $count_data: reference to hash: line number -> data
-# $line_hash: reference to hash: line number new -> line number old
-#
-# Return a reference to transformed count data.
-#
-
-sub apply_diff($$)
-{
- my $count_data = $_[0]; # Reference to data hash: line -> hash
- my $line_hash = $_[1]; # Reference to line hash: new line -> old line
- my %result; # Resulting hash
- my $last_new = 0; # Last new line number found in line hash
- my $last_old = 0; # Last old line number found in line hash
-
- # Iterate all new line numbers found in the diff
- foreach (sort({$a <=> $b} keys(%{$line_hash})))
- {
- $last_new = $_;
- $last_old = $line_hash->{$last_new};
-
- # Is there data associated with the corresponding old line?
- if (defined($count_data->{$line_hash->{$_}}))
- {
- # Copy data to new hash with a new line number
- $result{$_} = $count_data->{$line_hash->{$_}};
- }
- }
- # Transform all other lines which come after the last diff entry
- foreach (sort({$a <=> $b} keys(%{$count_data})))
- {
- if ($_ <= $last_old)
- {
- # Skip lines which were covered by line hash
- next;
- }
- # Copy data to new hash with an offset
- $result{$_ + ($last_new - $last_old)} = $count_data->{$_};
- }
-
- return \%result;
-}
-
-
-#
-# get_hash_max(hash_ref)
-#
-# Return the highest integer key from hash.
-#
-
-sub get_hash_max($)
-{
- my ($hash) = @_;
- my $max;
-
- foreach (keys(%{$hash})) {
- if (!defined($max)) {
- $max = $_;
- } elsif ($hash->{$_} > $max) {
- $max = $_;
- }
- }
- return $max;
-}
-
-sub get_hash_reverse($)
-{
- my ($hash) = @_;
- my %result;
-
- foreach (keys(%{$hash})) {
- $result{$hash->{$_}} = $_;
- }
-
- return \%result;
-}
-
-#
-# apply_diff_to_funcdata(funcdata, line_hash)
-#
-
-sub apply_diff_to_funcdata($$)
-{
- my ($funcdata, $linedata) = @_;
- my $last_new = get_hash_max($linedata);
- my $last_old = $linedata->{$last_new};
- my $func;
- my %result;
- my $line_diff = get_hash_reverse($linedata);
-
- foreach $func (keys(%{$funcdata})) {
- my $line = $funcdata->{$func};
-
- if (defined($line_diff->{$line})) {
- $result{$func} = $line_diff->{$line};
- } elsif ($line > $last_old) {
- $result{$func} = $line + $last_new - $last_old;
- }
- }
-
- return \%result;
-}
-
-
-#
-# get_line_hash($filename, $diff_data, $path_data)
-#
-# Find line hash in DIFF_DATA which matches FILENAME. On success, return list
-# line hash. or undef in case of no match. Die if more than one line hashes in
-# DIFF_DATA match.
-#
-
-sub get_line_hash($$$)
-{
- my $filename = $_[0];
- my $diff_data = $_[1];
- my $path_data = $_[2];
- my $conversion;
- my $old_path;
- my $new_path;
- my $diff_name;
- my $common;
- my $old_depth;
- my $new_depth;
-
- foreach (keys(%{$diff_data}))
- {
- # Try to match diff filename with filename
- if ($filename =~ /^\Q$diff_path\E\/$_$/)
- {
- if ($diff_name)
- {
- # Two files match, choose the more specific one
- # (the one with more path components)
- $old_depth = ($diff_name =~ tr/\///);
- $new_depth = (tr/\///);
- if ($old_depth == $new_depth)
- {
- die("ERROR: diff file contains ".
- "ambiguous entries for ".
- "$filename\n");
- }
- elsif ($new_depth > $old_depth)
- {
- $diff_name = $_;
- }
- }
- else
- {
- $diff_name = $_;
- }
- };
- }
- if ($diff_name)
- {
- # Get converted path
- if ($filename =~ /^(.*)$diff_name$/)
- {
- ($common, $old_path, $new_path) =
- get_common_filename($filename,
- $1.$path_data->{$diff_name});
- }
- return ($diff_data->{$diff_name}, $old_path, $new_path);
- }
- else
- {
- return undef;
- }
-}
-
-
-#
-# convert_paths(trace_data, path_conversion_data)
-#
-# Rename all paths in TRACE_DATA which show up in PATH_CONVERSION_DATA.
-#
-
-sub convert_paths($$)
-{
- my $trace_data = $_[0];
- my $path_conversion_data = $_[1];
- my $filename;
- my $new_path;
-
- if (scalar(keys(%{$path_conversion_data})) == 0)
- {
- info("No path conversion data available.\n");
- return;
- }
-
- # Expand path conversion list
- foreach $filename (keys(%{$path_conversion_data}))
- {
- $new_path = $path_conversion_data->{$filename};
- while (($filename =~ s/^(.*)\/[^\/]+$/$1/) &&
- ($new_path =~ s/^(.*)\/[^\/]+$/$1/) &&
- ($filename ne $new_path))
- {
- $path_conversion_data->{$filename} = $new_path;
- }
- }
-
- # Adjust paths
- FILENAME: foreach $filename (keys(%{$trace_data}))
- {
- # Find a path in our conversion table that matches, starting
- # with the longest path
- foreach (sort({length($b) <=> length($a)}
- keys(%{$path_conversion_data})))
- {
- # Is this path a prefix of our filename?
- if (!($filename =~ /^$_(.*)$/))
- {
- next;
- }
- $new_path = $path_conversion_data->{$_}.$1;
-
- # Make sure not to overwrite an existing entry under
- # that path name
- if ($trace_data->{$new_path})
- {
- # Need to combine entries
- $trace_data->{$new_path} =
- combine_info_entries(
- $trace_data->{$filename},
- $trace_data->{$new_path},
- $filename);
- }
- else
- {
- # Simply rename entry
- $trace_data->{$new_path} =
- $trace_data->{$filename};
- }
- delete($trace_data->{$filename});
- next FILENAME;
- }
- info("No conversion available for filename $filename\n");
- }
-}
-
-#
-# sub adjust_fncdata(funcdata, testfncdata, sumfnccount)
-#
-# Remove function call count data from testfncdata and sumfnccount which
-# is no longer present in funcdata.
-#
-
-sub adjust_fncdata($$$)
-{
- my ($funcdata, $testfncdata, $sumfnccount) = @_;
- my $testname;
- my $func;
- my $f_found;
- my $f_hit;
-
- # Remove count data in testfncdata for functions which are no longer
- # in funcdata
- foreach $testname (%{$testfncdata}) {
- my $fnccount = $testfncdata->{$testname};
-
- foreach $func (%{$fnccount}) {
- if (!defined($funcdata->{$func})) {
- delete($fnccount->{$func});
- }
- }
- }
- # Remove count data in sumfnccount for functions which are no longer
- # in funcdata
- foreach $func (%{$sumfnccount}) {
- if (!defined($funcdata->{$func})) {
- delete($sumfnccount->{$func});
- }
- }
-}
-
-#
-# get_func_found_and_hit(sumfnccount)
-#
-# Return (f_found, f_hit) for sumfnccount
-#
-
-sub get_func_found_and_hit($)
-{
- my ($sumfnccount) = @_;
- my $function;
- my $f_found;
- my $f_hit;
-
- $f_found = scalar(keys(%{$sumfnccount}));
- $f_hit = 0;
- foreach $function (keys(%{$sumfnccount})) {
- if ($sumfnccount->{$function} > 0) {
- $f_hit++;
- }
- }
- return ($f_found, $f_hit);
-}
-
-#
-# diff()
-#
-
-sub diff()
-{
- my $trace_data = read_info_file($diff);
- my $diff_data;
- my $path_data;
- my $old_path;
- my $new_path;
- my %path_conversion_data;
- my $filename;
- my $line_hash;
- my $new_name;
- my $entry;
- my $testdata;
- my $testname;
- my $sumcount;
- my $funcdata;
- my $checkdata;
- my $testfncdata;
- my $sumfnccount;
- my $found;
- my $hit;
- my $f_found;
- my $f_hit;
- my $converted = 0;
- my $unchanged = 0;
- local *INFO_HANDLE;
-
- ($diff_data, $path_data) = read_diff($ARGV[0]);
-
- foreach $filename (sort(keys(%{$trace_data})))
- {
- # Find a diff section corresponding to this file
- ($line_hash, $old_path, $new_path) =
- get_line_hash($filename, $diff_data, $path_data);
- if (!$line_hash)
- {
- # There's no diff section for this file
- $unchanged++;
- next;
- }
- $converted++;
- if ($old_path && $new_path && ($old_path ne $new_path))
- {
- $path_conversion_data{$old_path} = $new_path;
- }
- # Check for deleted files
- if (scalar(keys(%{$line_hash})) == 0)
- {
- info("Removing $filename\n");
- delete($trace_data->{$filename});
- next;
- }
- info("Converting $filename\n");
- $entry = $trace_data->{$filename};
- ($testdata, $sumcount, $funcdata, $checkdata, $testfncdata,
- $sumfnccount) = get_info_entry($entry);
- # Convert test data
- foreach $testname (keys(%{$testdata}))
- {
- $testdata->{$testname} =
- apply_diff($testdata->{$testname}, $line_hash);
- # Remove empty sets of test data
- if (scalar(keys(%{$testdata->{$testname}})) == 0)
- {
- delete($testdata->{$testname});
- delete($testfncdata->{$testname});
- }
- }
- # Rename test data to indicate conversion
- foreach $testname (keys(%{$testdata}))
- {
- # Skip testnames which already contain an extension
- if ($testname =~ /,[^,]+$/)
- {
- next;
- }
- # Check for name conflict
- if (defined($testdata->{$testname.",diff"}))
- {
- # Add counts
- ($testdata->{$testname}) = add_counts(
- $testdata->{$testname},
- $testdata->{$testname.",diff"});
- delete($testdata->{$testname.",diff"});
- # Add function call counts
- ($testfncdata->{$testname}) = add_fnccount(
- $testfncdata->{$testname},
- $testfncdata->{$testname.",diff"});
- delete($testfncdata->{$testname.",diff"});
- }
- # Move test data to new testname
- $testdata->{$testname.",diff"} = $testdata->{$testname};
- delete($testdata->{$testname});
- # Move function call count data to new testname
- $testfncdata->{$testname.",diff"} =
- $testfncdata->{$testname};
- delete($testfncdata->{$testname});
- }
- # Convert summary of test data
- $sumcount = apply_diff($sumcount, $line_hash);
- # Convert function data
- $funcdata = apply_diff_to_funcdata($funcdata, $line_hash);
- # Convert checksum data
- $checkdata = apply_diff($checkdata, $line_hash);
- # Convert function call count data
- adjust_fncdata($funcdata, $testfncdata, $sumfnccount);
- ($f_found, $f_hit) = get_func_found_and_hit($sumfnccount);
- # Update found/hit numbers
- $found = 0;
- $hit = 0;
- foreach (keys(%{$sumcount}))
- {
- $found++;
- if ($sumcount->{$_} > 0)
- {
- $hit++;
- }
- }
- if ($found > 0)
- {
- # Store converted entry
- set_info_entry($entry, $testdata, $sumcount, $funcdata,
- $checkdata, $testfncdata, $sumfnccount,
- $found, $hit, $f_found, $f_hit);
- }
- else
- {
- # Remove empty data set
- delete($trace_data->{$filename});
- }
- }
-
- # Convert filenames as well if requested
- if ($convert_filenames)
- {
- convert_paths($trace_data, \%path_conversion_data);
- }
-
- info("$converted entr".($converted != 1 ? "ies" : "y")." converted, ".
- "$unchanged entr".($unchanged != 1 ? "ies" : "y")." left ".
- "unchanged.\n");
-
- # Write data
- if ($to_file)
- {
- info("Writing data to $output_filename\n");
- open(INFO_HANDLE, ">$output_filename")
- or die("ERROR: cannot write to $output_filename!\n");
- write_info_file(*INFO_HANDLE, $trace_data);
- close(*INFO_HANDLE);
- }
- else
- {
- write_info_file(*STDOUT, $trace_data);
- }
-}
-
-
-#
-# system_no_output(mode, parameters)
-#
-# Call an external program using PARAMETERS while suppressing depending on
-# the value of MODE:
-#
-# MODE & 1: suppress STDOUT
-# MODE & 2: suppress STDERR
-#
-# Return 0 on success, non-zero otherwise.
-#
-
-sub system_no_output($@)
-{
- my $mode = shift;
- my $result;
- local *OLD_STDERR;
- local *OLD_STDOUT;
-
- # Save old stdout and stderr handles
- ($mode & 1) && open(OLD_STDOUT, ">>&STDOUT");
- ($mode & 2) && open(OLD_STDERR, ">>&STDERR");
-
- # Redirect to /dev/null
- ($mode & 1) && open(STDOUT, ">/dev/null");
- ($mode & 2) && open(STDERR, ">/dev/null");
-
- system(@_);
- $result = $?;
-
- # Close redirected handles
- ($mode & 1) && close(STDOUT);
- ($mode & 2) && close(STDERR);
-
- # Restore old handles
- ($mode & 1) && open(STDOUT, ">>&OLD_STDOUT");
- ($mode & 2) && open(STDERR, ">>&OLD_STDERR");
-
- return $result;
-}
-
-
-#
-# read_config(filename)
-#
-# Read configuration file FILENAME and return a reference to a hash containing
-# all valid key=value pairs found.
-#
-
-sub read_config($)
-{
- my $filename = $_[0];
- my %result;
- my $key;
- my $value;
- local *HANDLE;
-
- if (!open(HANDLE, "<$filename"))
- {
- warn("WARNING: cannot read configuration file $filename\n");
- return undef;
- }
- while (<HANDLE>)
- {
- chomp;
- # Skip comments
- s/#.*//;
- # Remove leading blanks
- s/^\s+//;
- # Remove trailing blanks
- s/\s+$//;
- next unless length;
- ($key, $value) = split(/\s*=\s*/, $_, 2);
- if (defined($key) && defined($value))
- {
- $result{$key} = $value;
- }
- else
- {
- warn("WARNING: malformed statement in line $. ".
- "of configuration file $filename\n");
- }
- }
- close(HANDLE);
- return \%result;
-}
-
-
-#
-# apply_config(REF)
-#
-# REF is a reference to a hash containing the following mapping:
-#
-# key_string => var_ref
-#
-# where KEY_STRING is a keyword and VAR_REF is a reference to an associated
-# variable. If the global configuration hash CONFIG contains a value for
-# keyword KEY_STRING, VAR_REF will be assigned the value for that keyword.
-#
-
-sub apply_config($)
-{
- my $ref = $_[0];
-
- foreach (keys(%{$ref}))
- {
- if (defined($config->{$_}))
- {
- ${$ref->{$_}} = $config->{$_};
- }
- }
-}
-
-sub warn_handler($)
-{
- my ($msg) = @_;
-
- warn("$tool_name: $msg");
-}
-
-sub die_handler($)
-{
- my ($msg) = @_;
-
- die("$tool_name: $msg");
-}
diff --git a/3rdParty/LibIDN b/3rdParty/LibIDN
new file mode 160000
+Subproject 5a4274b7eb5923c2b8e6c1aee279a47c8e05662
diff --git a/3rdParty/LibIDN/SConscript b/3rdParty/LibIDN/SConscript
deleted file mode 100644
index fa8f870..0000000
--- a/3rdParty/LibIDN/SConscript
+++ /dev/null
@@ -1,45 +0,0 @@
-Import(["env", "conf_env"])
-
-env["LIBIDN_FLAGS"] = {
- "CPPDEFINES": ["IDNA_STATIC"],
- "CPPPATH": [Dir("src")],
- "LIBPATH": [Dir(".")],
- "LIBS": ["IDN"],
- }
-
-myenv = env.Clone()
-
-# Remove warn flags
-myenv.Replace(CCFLAGS = [flag for flag in env["CCFLAGS"] if flag not in ["-W", "-Wall"]])
-
-# Check for strcasecmp() or replacement
-conf = Configure(conf_env)
-if not conf.CheckFunc('strcasecmp') :
- if conf.CheckFunc("stricmp") :
- myenv.Append(CPPDEFINES = [("strcasecmp", "stricmp")])
- else :
- print "Error: Cannot find strcasecmp() or stricmp()"
- Exit(1)
-if not conf.CheckFunc('strncasecmp') :
- if conf.CheckFunc("strnicmp") :
- myenv.Append(CPPDEFINES = [("strncasecmp", "strnicmp")])
- else :
- print "Error: Cannot find strncasecmp() or strnicmp()"
- Exit(1)
-conf.Finish()
-
-myenv.Append(CPPDEFINES = "IDNA_STATIC")
-myenv.Append(CPPPATH = ["src", "stubs"])
-if myenv["PLATFORM"] == "win32" :
- myenv.Append(CPPPATH = "stubs/win32")
- env["LIBIDN_FLAGS"]["CPPPATH"] += [Dir("stubs/win32")]
-
-myenv.StaticLibrary("IDN", [
- "src/stringprep.c",
- "src/profiles.c",
- "src/rfc3454.c",
- "src/punycode.c",
- "src/idna.c",
- "src/toutf8.c",
- "src/nfkc.c"
- ])
diff --git a/3rdParty/LibIDN/src/gunicomp.h b/3rdParty/LibIDN/src/gunicomp.h
deleted file mode 100644
index b5fa880..0000000
--- a/3rdParty/LibIDN/src/gunicomp.h
+++ /dev/null
@@ -1,661 +0,0 @@
-/* This file is automatically generated. DO NOT EDIT!
- Instead, edit gen-unicode-tables.pl and re-run. */
-
-#define COMPOSE_FIRST_START 1
-#define COMPOSE_FIRST_SINGLE_START 147
-#define COMPOSE_SECOND_START 357
-#define COMPOSE_SECOND_SINGLE_START 388
-
-#define COMPOSE_TABLE_LAST 48
-
-static const guint16 compose_data[][256] = {
- { /* page 0, index 0 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 148, 149, 0, 0, 1, 2, 3, 4, 5,
- 150, 6, 7, 8, 151, 9, 10, 11, 12, 13, 14, 0, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 152, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 0, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 153, 154,
- 50, 155, 0, 0, 51, 0, 0, 0, 0, 156, 0, 0, 0, 0, 52, 53, 157, 0, 158, 0,
- 0, 0, 54, 0, 0, 0, 0, 0, 55, 0, 159, 160, 56, 161, 0, 0, 57, 0, 0, 0, 0,
- 162, 0, 0, 0, 0, 58, 59, 163, 0, 164, 0, 0, 0, 60, 0, 0, 0
- },
- { /* page 1, index 1 */
- 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 166, 0,
- 0, 0, 0, 167, 168, 0, 0, 0, 0, 0, 0, 169, 170, 171, 172, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
- 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, 174,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0
- },
- { /* page 2, index 2 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 0, 0, 0,
- 181, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 3, index 3 */
- 357, 358, 359, 360, 361, 0, 362, 363, 364, 365, 366, 367, 368, 0, 0, 369,
- 0, 370, 0, 371, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374,
- 375, 376, 377, 378, 379, 0, 0, 0, 0, 380, 381, 0, 382, 383, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0,
- 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 184, 0, 0, 0, 76, 0, 0, 0, 77, 0,
- 0, 185, 0, 186, 0, 0, 78, 0, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 82,
- 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 86, 87, 0, 0, 187, 0, 0, 0, 88, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 4, index 4 */
- 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 189, 0, 90,
- 91, 190, 92, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 93, 0, 0, 0, 193, 0, 0, 0,
- 194, 0, 195, 0, 0, 94, 0, 0, 196, 0, 95, 96, 197, 97, 0, 198, 0, 0, 0,
- 199, 0, 0, 0, 0, 98, 0, 0, 0, 200, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0,
- 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 207, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 6, index 5 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 388, 389, 390, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0,
- 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 9, index 6 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0,
- 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391,
- 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 11, index 7 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0,
- 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 395, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 396, 0, 0, 0, 0, 0, 0, 0, 102, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 12, index 8 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221,
- 0, 0, 398, 0, 0, 0, 103, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399,
- 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 13, index 9 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 104,
- 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 105, 0, 0, 224, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 16, index 10 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 30, index 11 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 226, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 229, 0, 0,
- 0, 0, 0, 0, 230, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 107, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 233, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 235, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 31, index 12 */
- 108, 109, 236, 237, 238, 239, 240, 241, 110, 111, 242, 243, 244, 245,
- 246, 247, 112, 113, 0, 0, 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, 0, 0, 116,
- 117, 248, 249, 250, 251, 252, 253, 118, 119, 254, 255, 256, 257, 258,
- 259, 120, 121, 0, 0, 0, 0, 0, 0, 122, 123, 0, 0, 0, 0, 0, 0, 124, 125, 0,
- 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 0, 0, 0, 128, 129, 0, 0, 0, 0, 0, 0, 0,
- 130, 0, 0, 0, 0, 0, 0, 131, 132, 260, 261, 262, 263, 264, 265, 133, 134,
- 266, 267, 268, 269, 270, 271, 272, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0,
- 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0,
- 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 136, 0
- },
- { /* page 33, index 13 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 278, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0,
- 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 34, index 14 */
- 0, 0, 0, 284, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 290,
- 0, 291, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 295, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 297, 298, 0, 0, 299, 300, 0, 0, 301, 302, 303, 304, 0, 0, 0, 0,
- 305, 306, 0, 0, 307, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, 313, 0, 314,
- 0, 0, 0, 0, 0, 0, 315, 316, 317, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 48, index 15 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0,
- 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0,
- 328, 0, 329, 0, 330, 0, 331, 0, 0, 332, 0, 333, 0, 334, 0, 0, 0, 0, 0, 0,
- 137, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 387,
- 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 338, 0, 339,
- 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348,
- 0, 0, 349, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 144,
- 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 352, 353, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0
- }
-};
-
-static const gint16 compose_table[COMPOSE_TABLE_LAST + 1] = {
- 0 /* page 0 */,
- 1 /* page 1 */,
- 2 /* page 2 */,
- 3 /* page 3 */,
- 4 /* page 4 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 5 /* page 6 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 6 /* page 9 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 7 /* page 11 */,
- 8 /* page 12 */,
- 9 /* page 13 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 10 /* page 16 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 11 /* page 30 */,
- 12 /* page 31 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 13 /* page 33 */,
- 14 /* page 34 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 15 /* page 48 */
-};
-
-static const guint16 compose_first_single[][2] = {
- { 0x0338, 0x226e },
- { 0x0338, 0x2260 },
- { 0x0338, 0x226f },
- { 0x0307, 0x1e1e },
- { 0x0302, 0x0134 },
- { 0x0307, 0x1e1f },
- { 0x0304, 0x01de },
- { 0x0301, 0x01fa },
- { 0x0301, 0x1e08 },
- { 0x0301, 0x1e2e },
- { 0x0304, 0x022a },
- { 0x0301, 0x01fe },
- { 0x0304, 0x01df },
- { 0x0301, 0x01fb },
- { 0x0301, 0x1e09 },
- { 0x0301, 0x1e2f },
- { 0x0304, 0x022b },
- { 0x0301, 0x01ff },
- { 0x0307, 0x1e64 },
- { 0x0307, 0x1e65 },
- { 0x0307, 0x1e66 },
- { 0x0307, 0x1e67 },
- { 0x0301, 0x1e78 },
- { 0x0301, 0x1e79 },
- { 0x0308, 0x1e7a },
- { 0x0308, 0x1e7b },
- { 0x0307, 0x1e9b },
- { 0x030c, 0x01ee },
- { 0x0304, 0x01ec },
- { 0x0304, 0x01ed },
- { 0x0304, 0x01e0 },
- { 0x0304, 0x01e1 },
- { 0x0306, 0x1e1c },
- { 0x0306, 0x1e1d },
- { 0x0304, 0x0230 },
- { 0x0304, 0x0231 },
- { 0x030c, 0x01ef },
- { 0x0314, 0x1fec },
- { 0x0345, 0x1fb4 },
- { 0x0345, 0x1fc4 },
- { 0x0345, 0x1ff4 },
- { 0x0308, 0x0407 },
- { 0x0301, 0x0403 },
- { 0x0308, 0x04de },
- { 0x0301, 0x040c },
- { 0x0308, 0x04e6 },
- { 0x0308, 0x04f4 },
- { 0x0308, 0x04f8 },
- { 0x0308, 0x04ec },
- { 0x0301, 0x0453 },
- { 0x0308, 0x04df },
- { 0x0301, 0x045c },
- { 0x0308, 0x04e7 },
- { 0x0308, 0x04f5 },
- { 0x0308, 0x04f9 },
- { 0x0308, 0x04ed },
- { 0x0308, 0x0457 },
- { 0x030f, 0x0476 },
- { 0x030f, 0x0477 },
- { 0x0308, 0x04da },
- { 0x0308, 0x04db },
- { 0x0308, 0x04ea },
- { 0x0308, 0x04eb },
- { 0x0654, 0x0624 },
- { 0x0654, 0x0626 },
- { 0x0654, 0x06c2 },
- { 0x0654, 0x06d3 },
- { 0x0654, 0x06c0 },
- { 0x093c, 0x0929 },
- { 0x093c, 0x0931 },
- { 0x093c, 0x0934 },
- { 0x0bd7, 0x0b94 },
- { 0x0bbe, 0x0bcb },
- { 0x0c56, 0x0c48 },
- { 0x0cd5, 0x0cc0 },
- { 0x0cd5, 0x0ccb },
- { 0x0d3e, 0x0d4b },
- { 0x0dca, 0x0ddd },
- { 0x102e, 0x1026 },
- { 0x0304, 0x1e38 },
- { 0x0304, 0x1e39 },
- { 0x0304, 0x1e5c },
- { 0x0304, 0x1e5d },
- { 0x0307, 0x1e68 },
- { 0x0307, 0x1e69 },
- { 0x0302, 0x1ec6 },
- { 0x0302, 0x1ec7 },
- { 0x0302, 0x1ed8 },
- { 0x0302, 0x1ed9 },
- { 0x0345, 0x1f82 },
- { 0x0345, 0x1f83 },
- { 0x0345, 0x1f84 },
- { 0x0345, 0x1f85 },
- { 0x0345, 0x1f86 },
- { 0x0345, 0x1f87 },
- { 0x0345, 0x1f8a },
- { 0x0345, 0x1f8b },
- { 0x0345, 0x1f8c },
- { 0x0345, 0x1f8d },
- { 0x0345, 0x1f8e },
- { 0x0345, 0x1f8f },
- { 0x0345, 0x1f92 },
- { 0x0345, 0x1f93 },
- { 0x0345, 0x1f94 },
- { 0x0345, 0x1f95 },
- { 0x0345, 0x1f96 },
- { 0x0345, 0x1f97 },
- { 0x0345, 0x1f9a },
- { 0x0345, 0x1f9b },
- { 0x0345, 0x1f9c },
- { 0x0345, 0x1f9d },
- { 0x0345, 0x1f9e },
- { 0x0345, 0x1f9f },
- { 0x0345, 0x1fa2 },
- { 0x0345, 0x1fa3 },
- { 0x0345, 0x1fa4 },
- { 0x0345, 0x1fa5 },
- { 0x0345, 0x1fa6 },
- { 0x0345, 0x1fa7 },
- { 0x0345, 0x1faa },
- { 0x0345, 0x1fab },
- { 0x0345, 0x1fac },
- { 0x0345, 0x1fad },
- { 0x0345, 0x1fae },
- { 0x0345, 0x1faf },
- { 0x0345, 0x1fb2 },
- { 0x0345, 0x1fc2 },
- { 0x0345, 0x1ff2 },
- { 0x0345, 0x1fb7 },
- { 0x0345, 0x1fc7 },
- { 0x0345, 0x1ff7 },
- { 0x0338, 0x219a },
- { 0x0338, 0x219b },
- { 0x0338, 0x21ae },
- { 0x0338, 0x21cd },
- { 0x0338, 0x21cf },
- { 0x0338, 0x21ce },
- { 0x0338, 0x2204 },
- { 0x0338, 0x2209 },
- { 0x0338, 0x220c },
- { 0x0338, 0x2224 },
- { 0x0338, 0x2226 },
- { 0x0338, 0x2241 },
- { 0x0338, 0x2244 },
- { 0x0338, 0x2247 },
- { 0x0338, 0x2249 },
- { 0x0338, 0x226d },
- { 0x0338, 0x2262 },
- { 0x0338, 0x2270 },
- { 0x0338, 0x2271 },
- { 0x0338, 0x2274 },
- { 0x0338, 0x2275 },
- { 0x0338, 0x2278 },
- { 0x0338, 0x2279 },
- { 0x0338, 0x2280 },
- { 0x0338, 0x2281 },
- { 0x0338, 0x22e0 },
- { 0x0338, 0x22e1 },
- { 0x0338, 0x2284 },
- { 0x0338, 0x2285 },
- { 0x0338, 0x2288 },
- { 0x0338, 0x2289 },
- { 0x0338, 0x22e2 },
- { 0x0338, 0x22e3 },
- { 0x0338, 0x22ac },
- { 0x0338, 0x22ad },
- { 0x0338, 0x22ae },
- { 0x0338, 0x22af },
- { 0x0338, 0x22ea },
- { 0x0338, 0x22eb },
- { 0x0338, 0x22ec },
- { 0x0338, 0x22ed },
- { 0x3099, 0x3094 },
- { 0x3099, 0x304c },
- { 0x3099, 0x304e },
- { 0x3099, 0x3050 },
- { 0x3099, 0x3052 },
- { 0x3099, 0x3054 },
- { 0x3099, 0x3056 },
- { 0x3099, 0x3058 },
- { 0x3099, 0x305a },
- { 0x3099, 0x305c },
- { 0x3099, 0x305e },
- { 0x3099, 0x3060 },
- { 0x3099, 0x3062 },
- { 0x3099, 0x3065 },
- { 0x3099, 0x3067 },
- { 0x3099, 0x3069 },
- { 0x3099, 0x309e },
- { 0x3099, 0x30f4 },
- { 0x3099, 0x30ac },
- { 0x3099, 0x30ae },
- { 0x3099, 0x30b0 },
- { 0x3099, 0x30b2 },
- { 0x3099, 0x30b4 },
- { 0x3099, 0x30b6 },
- { 0x3099, 0x30b8 },
- { 0x3099, 0x30ba },
- { 0x3099, 0x30bc },
- { 0x3099, 0x30be },
- { 0x3099, 0x30c0 },
- { 0x3099, 0x30c2 },
- { 0x3099, 0x30c5 },
- { 0x3099, 0x30c7 },
- { 0x3099, 0x30c9 },
- { 0x3099, 0x30f7 },
- { 0x3099, 0x30f8 },
- { 0x3099, 0x30f9 },
- { 0x3099, 0x30fa },
- { 0x3099, 0x30fe }
-};
-static const guint16 compose_second_single[][2] = {
- { 0x0627, 0x0622 },
- { 0x0627, 0x0623 },
- { 0x0627, 0x0625 },
- { 0x09c7, 0x09cb },
- { 0x09c7, 0x09cc },
- { 0x0b47, 0x0b4b },
- { 0x0b47, 0x0b48 },
- { 0x0b47, 0x0b4c },
- { 0x0bc6, 0x0bca },
- { 0x0bc6, 0x0bcc },
- { 0x0cc6, 0x0cca },
- { 0x0cc6, 0x0cc7 },
- { 0x0cc6, 0x0cc8 },
- { 0x0d46, 0x0d4a },
- { 0x0d46, 0x0d4c },
- { 0x0dd9, 0x0dda },
- { 0x0dd9, 0x0ddc },
- { 0x0dd9, 0x0dde }
-};
-static const guint16 compose_array[146][31] = {
- { 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x0100, 0x0102, 0x0226, 0x00c4, 0x1ea2, 0x00c5, 0, 0x01cd, 0x0200, 0x0202, 0, 0, 0, 0x1ea0, 0, 0x1e00, 0, 0, 0x0104, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0x1e02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e04, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e06, 0, 0, 0, 0 },
- { 0, 0x0106, 0x0108, 0, 0, 0, 0x010a, 0, 0, 0, 0, 0x010c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00c7, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0x1e0a, 0, 0, 0, 0, 0x010e, 0, 0, 0, 0, 0, 0x1e0c, 0, 0, 0, 0x1e10, 0, 0x1e12, 0, 0, 0x1e0e, 0, 0, 0, 0 },
- { 0x00c8, 0x00c9, 0x00ca, 0x1ebc, 0x0112, 0x0114, 0x0116, 0x00cb, 0x1eba, 0, 0, 0x011a, 0x0204, 0x0206, 0, 0, 0, 0x1eb8, 0, 0, 0, 0x0228, 0x0118, 0x1e18, 0, 0x1e1a, 0, 0, 0, 0, 0 },
- { 0, 0x01f4, 0x011c, 0, 0x1e20, 0x011e, 0x0120, 0, 0, 0, 0, 0x01e6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0122, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0x0124, 0, 0, 0, 0x1e22, 0x1e26, 0, 0, 0, 0x021e, 0, 0, 0, 0, 0, 0x1e24, 0, 0, 0, 0x1e28, 0, 0, 0x1e2a, 0, 0, 0, 0, 0, 0 },
- { 0x00cc, 0x00cd, 0x00ce, 0x0128, 0x012a, 0x012c, 0x0130, 0x00cf, 0x1ec8, 0, 0, 0x01cf, 0x0208, 0x020a, 0, 0, 0, 0x1eca, 0, 0, 0, 0, 0x012e, 0, 0, 0x1e2c, 0, 0, 0, 0, 0 },
- { 0, 0x1e30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01e8, 0, 0, 0, 0, 0, 0x1e32, 0, 0, 0, 0x0136, 0, 0, 0, 0, 0x1e34, 0, 0, 0, 0 },
- { 0, 0x0139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x013d, 0, 0, 0, 0, 0, 0x1e36, 0, 0, 0, 0x013b, 0, 0x1e3c, 0, 0, 0x1e3a, 0, 0, 0, 0 },
- { 0, 0x1e3e, 0, 0, 0, 0, 0x1e40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x01f8, 0x0143, 0, 0x00d1, 0, 0, 0x1e44, 0, 0, 0, 0, 0x0147, 0, 0, 0, 0, 0, 0x1e46, 0, 0, 0, 0x0145, 0, 0x1e4a, 0, 0, 0x1e48, 0, 0, 0, 0 },
- { 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x014c, 0x014e, 0x022e, 0x00d6, 0x1ece, 0, 0x0150, 0x01d1, 0x020c, 0x020e, 0, 0, 0x01a0, 0x1ecc, 0, 0, 0, 0, 0x01ea, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x1e54, 0, 0, 0, 0, 0x1e56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x0154, 0, 0, 0, 0, 0x1e58, 0, 0, 0, 0, 0x0158, 0x0210, 0x0212, 0, 0, 0, 0x1e5a, 0, 0, 0, 0x0156, 0, 0, 0, 0, 0x1e5e, 0, 0, 0, 0 },
- { 0, 0x015a, 0x015c, 0, 0, 0, 0x1e60, 0, 0, 0, 0, 0x0160, 0, 0, 0, 0, 0, 0x1e62, 0, 0, 0x0218, 0x015e, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0x1e6a, 0, 0, 0, 0, 0x0164, 0, 0, 0, 0, 0, 0x1e6c, 0, 0, 0x021a, 0x0162, 0, 0x1e70, 0, 0, 0x1e6e, 0, 0, 0, 0 },
- { 0x00d9, 0x00da, 0x00db, 0x0168, 0x016a, 0x016c, 0, 0x00dc, 0x1ee6, 0x016e, 0x0170, 0x01d3, 0x0214, 0x0216, 0, 0, 0x01af, 0x1ee4, 0x1e72, 0, 0, 0, 0x0172, 0x1e76, 0, 0x1e74, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0x1e7c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e7e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1e80, 0x1e82, 0x0174, 0, 0, 0, 0x1e86, 0x1e84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0x1e8a, 0x1e8c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ef2, 0x00dd, 0x0176, 0x1ef8, 0x0232, 0, 0x1e8e, 0x0178, 0x1ef6, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x0179, 0x1e90, 0, 0, 0, 0x017b, 0, 0, 0, 0, 0x017d, 0, 0, 0, 0, 0, 0x1e92, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e94, 0, 0, 0, 0 },
- { 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x0101, 0x0103, 0x0227, 0x00e4, 0x1ea3, 0x00e5, 0, 0x01ce, 0x0201, 0x0203, 0, 0, 0, 0x1ea1, 0, 0x1e01, 0, 0, 0x0105, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0x1e03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e05, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e07, 0, 0, 0, 0 },
- { 0, 0x0107, 0x0109, 0, 0, 0, 0x010b, 0, 0, 0, 0, 0x010d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00e7, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0x1e0b, 0, 0, 0, 0, 0x010f, 0, 0, 0, 0, 0, 0x1e0d, 0, 0, 0, 0x1e11, 0, 0x1e13, 0, 0, 0x1e0f, 0, 0, 0, 0 },
- { 0x00e8, 0x00e9, 0x00ea, 0x1ebd, 0x0113, 0x0115, 0x0117, 0x00eb, 0x1ebb, 0, 0, 0x011b, 0x0205, 0x0207, 0, 0, 0, 0x1eb9, 0, 0, 0, 0x0229, 0x0119, 0x1e19, 0, 0x1e1b, 0, 0, 0, 0, 0 },
- { 0, 0x01f5, 0x011d, 0, 0x1e21, 0x011f, 0x0121, 0, 0, 0, 0, 0x01e7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0123, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0x0125, 0, 0, 0, 0x1e23, 0x1e27, 0, 0, 0, 0x021f, 0, 0, 0, 0, 0, 0x1e25, 0, 0, 0, 0x1e29, 0, 0, 0x1e2b, 0, 0x1e96, 0, 0, 0, 0 },
- { 0x00ec, 0x00ed, 0x00ee, 0x0129, 0x012b, 0x012d, 0, 0x00ef, 0x1ec9, 0, 0, 0x01d0, 0x0209, 0x020b, 0, 0, 0, 0x1ecb, 0, 0, 0, 0, 0x012f, 0, 0, 0x1e2d, 0, 0, 0, 0, 0 },
- { 0, 0, 0x0135, 0, 0, 0, 0, 0, 0, 0, 0, 0x01f0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x1e31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01e9, 0, 0, 0, 0, 0, 0x1e33, 0, 0, 0, 0x0137, 0, 0, 0, 0, 0x1e35, 0, 0, 0, 0 },
- { 0, 0x013a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x013e, 0, 0, 0, 0, 0, 0x1e37, 0, 0, 0, 0x013c, 0, 0x1e3d, 0, 0, 0x1e3b, 0, 0, 0, 0 },
- { 0, 0x1e3f, 0, 0, 0, 0, 0x1e41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x01f9, 0x0144, 0, 0x00f1, 0, 0, 0x1e45, 0, 0, 0, 0, 0x0148, 0, 0, 0, 0, 0, 0x1e47, 0, 0, 0, 0x0146, 0, 0x1e4b, 0, 0, 0x1e49, 0, 0, 0, 0 },
- { 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x014d, 0x014f, 0x022f, 0x00f6, 0x1ecf, 0, 0x0151, 0x01d2, 0x020d, 0x020f, 0, 0, 0x01a1, 0x1ecd, 0, 0, 0, 0, 0x01eb, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x1e55, 0, 0, 0, 0, 0x1e57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x0155, 0, 0, 0, 0, 0x1e59, 0, 0, 0, 0, 0x0159, 0x0211, 0x0213, 0, 0, 0, 0x1e5b, 0, 0, 0, 0x0157, 0, 0, 0, 0, 0x1e5f, 0, 0, 0, 0 },
- { 0, 0x015b, 0x015d, 0, 0, 0, 0x1e61, 0, 0, 0, 0, 0x0161, 0, 0, 0, 0, 0, 0x1e63, 0, 0, 0x0219, 0x015f, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0x1e6b, 0x1e97, 0, 0, 0, 0x0165, 0, 0, 0, 0, 0, 0x1e6d, 0, 0, 0x021b, 0x0163, 0, 0x1e71, 0, 0, 0x1e6f, 0, 0, 0, 0 },
- { 0x00f9, 0x00fa, 0x00fb, 0x0169, 0x016b, 0x016d, 0, 0x00fc, 0x1ee7, 0x016f, 0x0171, 0x01d4, 0x0215, 0x0217, 0, 0, 0x01b0, 0x1ee5, 0x1e73, 0, 0, 0, 0x0173, 0x1e77, 0, 0x1e75, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0x1e7d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e7f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1e81, 0x1e83, 0x0175, 0, 0, 0, 0x1e87, 0x1e85, 0, 0x1e98, 0, 0, 0, 0, 0, 0, 0, 0x1e89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0x1e8b, 0x1e8d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ef3, 0x00fd, 0x0177, 0x1ef9, 0x0233, 0, 0x1e8f, 0x00ff, 0x1ef7, 0x1e99, 0, 0, 0, 0, 0, 0, 0, 0x1ef5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x017a, 0x1e91, 0, 0, 0, 0x017c, 0, 0, 0, 0, 0x017e, 0, 0, 0, 0, 0, 0x1e93, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e95, 0, 0, 0, 0 },
- { 0x1fed, 0x0385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fc1, 0, 0, 0 },
- { 0x1ea6, 0x1ea4, 0, 0x1eaa, 0, 0, 0, 0, 0x1ea8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x01fc, 0, 0, 0x01e2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ec0, 0x1ebe, 0, 0x1ec4, 0, 0, 0, 0, 0x1ec2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ed2, 0x1ed0, 0, 0x1ed6, 0, 0, 0, 0, 0x1ed4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x1e4c, 0, 0, 0x022c, 0, 0, 0x1e4e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x01db, 0x01d7, 0, 0, 0x01d5, 0, 0, 0, 0, 0, 0, 0x01d9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ea7, 0x1ea5, 0, 0x1eab, 0, 0, 0, 0, 0x1ea9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x01fd, 0, 0, 0x01e3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ec1, 0x1ebf, 0, 0x1ec5, 0, 0, 0, 0, 0x1ec3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ed3, 0x1ed1, 0, 0x1ed7, 0, 0, 0, 0, 0x1ed5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0x1e4d, 0, 0, 0x022d, 0, 0, 0x1e4f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x01dc, 0x01d8, 0, 0, 0x01d6, 0, 0, 0, 0, 0, 0, 0x01da, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1eb0, 0x1eae, 0, 0x1eb4, 0, 0, 0, 0, 0x1eb2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1eb1, 0x1eaf, 0, 0x1eb5, 0, 0, 0, 0, 0x1eb3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1e14, 0x1e16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1e15, 0x1e17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1e50, 0x1e52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1e51, 0x1e53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1edc, 0x1eda, 0, 0x1ee0, 0, 0, 0, 0, 0x1ede, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ee2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1edd, 0x1edb, 0, 0x1ee1, 0, 0, 0, 0, 0x1edf, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ee3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1eea, 0x1ee8, 0, 0x1eee, 0, 0, 0, 0, 0x1eec, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1eeb, 0x1ee9, 0, 0x1eef, 0, 0, 0, 0, 0x1eed, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1fba, 0x0386, 0, 0, 0x1fb9, 0x1fb8, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f08, 0x1f09, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fbc, 0, 0 },
- { 0x1fc8, 0x0388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f18, 0x1f19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1fca, 0x0389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f28, 0x1f29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fcc, 0, 0 },
- { 0x1fda, 0x038a, 0, 0, 0x1fd9, 0x1fd8, 0, 0x03aa, 0, 0, 0, 0, 0, 0, 0x1f38, 0x1f39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ff8, 0x038c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f48, 0x1f49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1fea, 0x038e, 0, 0, 0x1fe9, 0x1fe8, 0, 0x03ab, 0, 0, 0, 0, 0, 0, 0, 0x1f59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1ffa, 0x038f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f68, 0x1f69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ffc, 0, 0 },
- { 0x1f70, 0x03ac, 0, 0, 0x1fb1, 0x1fb0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f00, 0x1f01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fb6, 0x1fb3, 0, 0 },
- { 0x1f72, 0x03ad, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f10, 0x1f11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f74, 0x03ae, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f20, 0x1f21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fc6, 0x1fc3, 0, 0 },
- { 0x1f76, 0x03af, 0, 0, 0x1fd1, 0x1fd0, 0, 0x03ca, 0, 0, 0, 0, 0, 0, 0x1f30, 0x1f31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fd6, 0, 0, 0 },
- { 0x1f78, 0x03cc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f40, 0x1f41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe4, 0x1fe5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f7a, 0x03cd, 0, 0, 0x1fe1, 0x1fe0, 0, 0x03cb, 0, 0, 0, 0, 0, 0, 0x1f50, 0x1f51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe6, 0, 0, 0 },
- { 0x1f7c, 0x03ce, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f60, 0x1f61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ff6, 0x1ff3, 0, 0 },
- { 0x1fd2, 0x0390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fd7, 0, 0, 0 },
- { 0x1fe2, 0x03b0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe7, 0, 0, 0 },
- { 0, 0x03d3, 0, 0, 0, 0, 0, 0x03d4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0x04d0, 0, 0x04d2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x0400, 0, 0, 0, 0, 0x04d6, 0, 0x0401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0x04c1, 0, 0x04dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x040d, 0, 0, 0, 0x04e2, 0x0419, 0, 0x04e4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0x04ee, 0x040e, 0, 0x04f0, 0, 0, 0x04f2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0x04d1, 0, 0x04d3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x0450, 0, 0, 0, 0, 0x04d7, 0, 0x0451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0x04c2, 0, 0x04dd, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x045d, 0, 0, 0, 0x04e3, 0x0439, 0, 0x04e5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0x04ef, 0x045e, 0, 0x04f1, 0, 0, 0x04f3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0x1eac, 0, 0, 0x1eb6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0x1ead, 0, 0, 0x1eb7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f02, 0x1f04, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f06, 0x1f80, 0, 0 },
- { 0x1f03, 0x1f05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f07, 0x1f81, 0, 0 },
- { 0x1f0a, 0x1f0c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f0e, 0x1f88, 0, 0 },
- { 0x1f0b, 0x1f0d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f0f, 0x1f89, 0, 0 },
- { 0x1f12, 0x1f14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f13, 0x1f15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f1a, 0x1f1c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f1b, 0x1f1d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f22, 0x1f24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f26, 0x1f90, 0, 0 },
- { 0x1f23, 0x1f25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f27, 0x1f91, 0, 0 },
- { 0x1f2a, 0x1f2c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f2e, 0x1f98, 0, 0 },
- { 0x1f2b, 0x1f2d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f2f, 0x1f99, 0, 0 },
- { 0x1f32, 0x1f34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f36, 0, 0, 0 },
- { 0x1f33, 0x1f35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f37, 0, 0, 0 },
- { 0x1f3a, 0x1f3c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f3e, 0, 0, 0 },
- { 0x1f3b, 0x1f3d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f3f, 0, 0, 0 },
- { 0x1f42, 0x1f44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f43, 0x1f45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f4a, 0x1f4c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f4b, 0x1f4d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x1f52, 0x1f54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f56, 0, 0, 0 },
- { 0x1f53, 0x1f55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f57, 0, 0, 0 },
- { 0x1f5b, 0x1f5d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f5f, 0, 0, 0 },
- { 0x1f62, 0x1f64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f66, 0x1fa0, 0, 0 },
- { 0x1f63, 0x1f65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f67, 0x1fa1, 0, 0 },
- { 0x1f6a, 0x1f6c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f6e, 0x1fa8, 0, 0 },
- { 0x1f6b, 0x1f6d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f6f, 0x1fa9, 0, 0 },
- { 0x1fcd, 0x1fce, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fcf, 0, 0, 0 },
- { 0x1fdd, 0x1fde, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fdf, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3070, 0x3071 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3073, 0x3074 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3076, 0x3077 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3079, 0x307a },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x307c, 0x307d },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d0, 0x30d1 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d3, 0x30d4 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d6, 0x30d7 },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d9, 0x30da },
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30dc, 0x30dd }
-};
diff --git a/3rdParty/LibIDN/src/gunidecomp.h b/3rdParty/LibIDN/src/gunidecomp.h
deleted file mode 100644
index 1c48c21..0000000
--- a/3rdParty/LibIDN/src/gunidecomp.h
+++ /dev/null
@@ -1,10363 +0,0 @@
-/* This file is automatically generated. DO NOT EDIT!
- Instead, edit gen-unicode-tables.pl and re-run. */
-
-#ifndef DECOMP_H
-#define DECOMP_H
-
-#define G_UNICODE_LAST_CHAR 0x10ffff
-
-#define G_UNICODE_MAX_TABLE_INDEX (0x110000 / 256)
-
-#define G_UNICODE_LAST_CHAR_PART1 0x2FAFF
-
-#define G_UNICODE_LAST_PAGE_PART1 762
-
-#define G_UNICODE_NOT_PRESENT_OFFSET 65535
-
-static const guchar cclass_data[][256] = {
- { /* page 3, index 0 */
- 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 232, 220, 220, 220, 220, 232, 216,
- 220, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, 202, 202, 220,
- 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 1, 1, 220,
- 220, 220, 220, 230, 230, 230, 230, 230, 230, 230, 230, 240, 230, 220,
- 220, 220, 230, 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 234, 234, 233, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0
- },
- { /* page 4, index 1 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 5, index 2 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 220, 230, 230, 230, 230, 220, 230, 230, 230, 222, 220, 230, 230, 230,
- 230, 230, 230, 0, 220, 220, 220, 220, 220, 230, 230, 220, 230, 230, 222,
- 228, 230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 21, 22, 0, 23,
- 0, 24, 25, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 6, index 3 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, 230, 230, 220,
- 230, 0, 0, 230, 230, 0, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 7, index 4 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 230, 220, 230, 230, 220, 230, 230, 220, 220, 220, 230, 220, 220, 230,
- 220, 230, 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 9, index 5 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 10, index 6 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 11, index 7 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 12, index 8 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 13, index 9 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 14, index 10 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 15, index 11 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 0,
- 132, 0, 0, 0, 0, 0, 130, 130, 130, 130, 0, 0, 130, 0, 230, 230, 9, 0,
- 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0
- },
- { /* page 16, index 12 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 23, index 13 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 24, index 14 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 32, index 15 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 1, 1, 230, 230,
- 230, 230, 1, 1, 1, 230, 230, 0, 0, 0, 0, 230, 0, 0, 0, 1, 1, 230, 220,
- 230, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 48, index 16 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 228, 232, 222,
- 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 251, index 17 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 254, index 18 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- },
- { /* page 465, index 19 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0, 0, 0, 226, 216, 216, 216, 216, 216,
- 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 220, 0, 0,
- 230, 230, 230, 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0
- }
-};
-
-static const gint16 combining_class_table_part1[763] = {
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 /* page 3 */,
- 1 /* page 4 */,
- 2 /* page 5 */,
- 3 /* page 6 */,
- 4 /* page 7 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 5 /* page 9 */,
- 6 /* page 10 */,
- 7 /* page 11 */,
- 8 /* page 12 */,
- 9 /* page 13 */,
- 10 /* page 14 */,
- 11 /* page 15 */,
- 12 /* page 16 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 13 /* page 23 */,
- 14 /* page 24 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 15 /* page 32 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 16 /* page 48 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 17 /* page 251 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 18 /* page 254 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 19 /* page 465 */,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX
-};
-
-static const gint16 combining_class_table_part2[768] = {
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX,
- 0 + G_UNICODE_MAX_TABLE_INDEX
-};
-
-typedef struct
-{
- gunichar ch;
- guint16 canon_offset;
- guint16 compat_offset;
-} decomposition;
-
-static const decomposition decomp_table[] =
-{
- { 0x00a0, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x00a8, G_UNICODE_NOT_PRESENT_OFFSET, 2 },
- { 0x00aa, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x00af, G_UNICODE_NOT_PRESENT_OFFSET, 8 },
- { 0x00b2, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0x00b3, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0x00b4, G_UNICODE_NOT_PRESENT_OFFSET, 16 },
- { 0x00b5, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
- { 0x00b8, G_UNICODE_NOT_PRESENT_OFFSET, 23 },
- { 0x00b9, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0x00ba, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x00bc, G_UNICODE_NOT_PRESENT_OFFSET, 31 },
- { 0x00bd, G_UNICODE_NOT_PRESENT_OFFSET, 37 },
- { 0x00be, G_UNICODE_NOT_PRESENT_OFFSET, 43 },
- { 0x00c0, 49, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00c1, 53, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00c2, 57, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00c3, 61, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00c4, 65, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00c5, 69, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00c7, 73, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00c8, 77, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00c9, 81, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00ca, 85, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00cb, 89, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00cc, 93, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00cd, 97, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00ce, 101, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00cf, 105, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00d1, 109, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00d2, 113, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00d3, 117, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00d4, 121, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00d5, 125, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00d6, 129, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00d9, 133, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00da, 137, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00db, 141, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00dc, 145, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00dd, 149, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e0, 153, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e1, 157, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e2, 161, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e3, 165, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e4, 169, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e5, 173, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e7, 177, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e8, 181, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00e9, 185, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00ea, 189, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00eb, 193, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00ec, 197, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00ed, 201, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00ee, 205, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00ef, 209, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00f1, 213, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00f2, 217, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00f3, 221, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00f4, 225, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00f5, 229, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00f6, 233, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00f9, 237, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00fa, 241, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00fb, 245, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00fc, 249, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00fd, 253, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x00ff, 257, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0100, 261, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0101, 265, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0102, 269, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0103, 273, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0104, 277, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0105, 281, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0106, 285, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0107, 289, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0108, 293, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0109, 297, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x010a, 301, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x010b, 305, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x010c, 309, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x010d, 313, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x010e, 317, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x010f, 321, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0112, 325, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0113, 329, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0114, 333, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0115, 337, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0116, 341, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0117, 345, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0118, 349, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0119, 353, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x011a, 357, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x011b, 361, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x011c, 365, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x011d, 369, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x011e, 373, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x011f, 377, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0120, 381, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0121, 385, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0122, 389, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0123, 393, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0124, 397, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0125, 401, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0128, 405, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0129, 409, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x012a, 413, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x012b, 417, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x012c, 421, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x012d, 425, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x012e, 429, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x012f, 433, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0130, 437, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0132, G_UNICODE_NOT_PRESENT_OFFSET, 441 },
- { 0x0133, G_UNICODE_NOT_PRESENT_OFFSET, 444 },
- { 0x0134, 447, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0135, 451, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0136, 455, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0137, 459, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0139, 463, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x013a, 467, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x013b, 471, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x013c, 475, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x013d, 479, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x013e, 483, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x013f, G_UNICODE_NOT_PRESENT_OFFSET, 487 },
- { 0x0140, G_UNICODE_NOT_PRESENT_OFFSET, 491 },
- { 0x0143, 495, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0144, 499, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0145, 503, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0146, 507, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0147, 511, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0148, 515, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0149, G_UNICODE_NOT_PRESENT_OFFSET, 519 },
- { 0x014c, 523, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x014d, 527, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x014e, 531, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x014f, 535, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0150, 539, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0151, 543, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0154, 547, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0155, 551, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0156, 555, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0157, 559, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0158, 563, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0159, 567, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x015a, 571, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x015b, 575, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x015c, 579, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x015d, 583, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x015e, 587, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x015f, 591, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0160, 595, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0161, 599, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0162, 603, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0163, 607, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0164, 611, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0165, 615, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0168, 619, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0169, 623, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x016a, 627, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x016b, 631, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x016c, 635, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x016d, 639, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x016e, 643, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x016f, 647, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0170, 651, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0171, 655, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0172, 659, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0173, 663, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0174, 667, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0175, 671, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0176, 675, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0177, 679, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0178, 683, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0179, 687, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x017a, 691, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x017b, 695, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x017c, 699, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x017d, 703, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x017e, 707, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x017f, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x01a0, 713, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01a1, 717, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01af, 721, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01b0, 725, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01c4, G_UNICODE_NOT_PRESENT_OFFSET, 729 },
- { 0x01c5, G_UNICODE_NOT_PRESENT_OFFSET, 734 },
- { 0x01c6, G_UNICODE_NOT_PRESENT_OFFSET, 739 },
- { 0x01c7, G_UNICODE_NOT_PRESENT_OFFSET, 744 },
- { 0x01c8, G_UNICODE_NOT_PRESENT_OFFSET, 747 },
- { 0x01c9, G_UNICODE_NOT_PRESENT_OFFSET, 750 },
- { 0x01ca, G_UNICODE_NOT_PRESENT_OFFSET, 753 },
- { 0x01cb, G_UNICODE_NOT_PRESENT_OFFSET, 756 },
- { 0x01cc, G_UNICODE_NOT_PRESENT_OFFSET, 759 },
- { 0x01cd, 762, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01ce, 766, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01cf, 770, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d0, 774, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d1, 778, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d2, 782, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d3, 786, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d4, 790, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d5, 794, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d6, 800, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d7, 806, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d8, 812, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01d9, 818, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01da, 824, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01db, 830, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01dc, 836, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01de, 842, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01df, 848, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01e0, 854, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01e1, 860, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01e2, 866, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01e3, 871, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01e6, 876, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01e7, 880, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01e8, 884, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01e9, 888, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01ea, 892, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01eb, 896, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01ec, 900, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01ed, 906, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01ee, 912, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01ef, 917, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01f0, 922, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01f1, G_UNICODE_NOT_PRESENT_OFFSET, 926 },
- { 0x01f2, G_UNICODE_NOT_PRESENT_OFFSET, 929 },
- { 0x01f3, G_UNICODE_NOT_PRESENT_OFFSET, 932 },
- { 0x01f4, 935, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01f5, 939, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01f8, 943, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01f9, 947, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01fa, 951, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01fb, 957, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01fc, 963, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01fd, 968, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01fe, 973, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x01ff, 978, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0200, 983, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0201, 987, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0202, 991, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0203, 995, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0204, 999, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0205, 1003, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0206, 1007, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0207, 1011, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0208, 1015, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0209, 1019, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x020a, 1023, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x020b, 1027, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x020c, 1031, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x020d, 1035, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x020e, 1039, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x020f, 1043, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0210, 1047, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0211, 1051, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0212, 1055, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0213, 1059, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0214, 1063, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0215, 1067, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0216, 1071, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0217, 1075, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0218, 1079, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0219, 1083, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x021a, 1087, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x021b, 1091, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x021e, 1095, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x021f, 1099, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0226, 1103, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0227, 1107, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0228, 1111, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0229, 1115, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x022a, 1119, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x022b, 1125, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x022c, 1131, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x022d, 1137, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x022e, 1143, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x022f, 1147, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0230, 1151, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0231, 1157, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0232, 1163, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0233, 1167, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x02b0, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x02b1, G_UNICODE_NOT_PRESENT_OFFSET, 1173 },
- { 0x02b2, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x02b3, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x02b4, G_UNICODE_NOT_PRESENT_OFFSET, 1180 },
- { 0x02b5, G_UNICODE_NOT_PRESENT_OFFSET, 1183 },
- { 0x02b6, G_UNICODE_NOT_PRESENT_OFFSET, 1186 },
- { 0x02b7, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x02b8, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x02d8, G_UNICODE_NOT_PRESENT_OFFSET, 1193 },
- { 0x02d9, G_UNICODE_NOT_PRESENT_OFFSET, 1197 },
- { 0x02da, G_UNICODE_NOT_PRESENT_OFFSET, 1201 },
- { 0x02db, G_UNICODE_NOT_PRESENT_OFFSET, 1205 },
- { 0x02dc, G_UNICODE_NOT_PRESENT_OFFSET, 1209 },
- { 0x02dd, G_UNICODE_NOT_PRESENT_OFFSET, 1213 },
- { 0x02e0, G_UNICODE_NOT_PRESENT_OFFSET, 1217 },
- { 0x02e1, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x02e2, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x02e3, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x02e4, G_UNICODE_NOT_PRESENT_OFFSET, 1224 },
- { 0x0340, 1227, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0341, 1230, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0343, 1233, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0344, 1236, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0374, 1241, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x037a, G_UNICODE_NOT_PRESENT_OFFSET, 1244 },
- { 0x037e, 1248, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0384, G_UNICODE_NOT_PRESENT_OFFSET, 16 },
- { 0x0385, 1250, 1255 },
- { 0x0386, 1261, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0387, 1266, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0388, 1269, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0389, 1274, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x038a, 1279, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x038c, 1284, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x038e, 1289, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x038f, 1294, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0390, 1299, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03aa, 1306, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03ab, 1311, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03ac, 1316, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03ad, 1321, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03ae, 1326, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03af, 1331, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03b0, 1336, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03ca, 1343, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03cb, 1348, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03cc, 1353, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03cd, 1358, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03ce, 1363, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x03d0, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
- { 0x03d1, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x03d2, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
- { 0x03d3, 1377, 1289 },
- { 0x03d4, 1382, 1311 },
- { 0x03d5, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x03d6, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x03f0, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x03f1, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x03f2, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
- { 0x03f4, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x03f5, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x0400, 1408, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0401, 1413, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0403, 1418, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0407, 1423, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x040c, 1428, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x040d, 1433, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x040e, 1438, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0419, 1443, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0439, 1448, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0450, 1453, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0451, 1458, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0453, 1463, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0457, 1468, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x045c, 1473, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x045d, 1478, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x045e, 1483, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0476, 1488, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0477, 1493, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04c1, 1498, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04c2, 1503, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04d0, 1508, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04d1, 1513, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04d2, 1518, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04d3, 1523, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04d6, 1528, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04d7, 1533, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04da, 1538, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04db, 1543, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04dc, 1548, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04dd, 1553, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04de, 1558, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04df, 1563, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04e2, 1568, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04e3, 1573, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04e4, 1578, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04e5, 1583, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04e6, 1588, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04e7, 1593, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04ea, 1598, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04eb, 1603, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04ec, 1608, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04ed, 1613, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04ee, 1618, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04ef, 1623, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04f0, 1628, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04f1, 1633, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04f2, 1638, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04f3, 1643, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04f4, 1648, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04f5, 1653, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04f8, 1658, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x04f9, 1663, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0587, G_UNICODE_NOT_PRESENT_OFFSET, 1668 },
- { 0x0622, 1673, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0623, 1678, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0624, 1683, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0625, 1688, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0626, 1693, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0675, G_UNICODE_NOT_PRESENT_OFFSET, 1698 },
- { 0x0676, G_UNICODE_NOT_PRESENT_OFFSET, 1703 },
- { 0x0677, G_UNICODE_NOT_PRESENT_OFFSET, 1708 },
- { 0x0678, G_UNICODE_NOT_PRESENT_OFFSET, 1713 },
- { 0x06c0, 1718, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x06c2, 1723, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x06d3, 1728, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0929, 1733, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0931, 1740, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0934, 1747, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0958, 1754, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0959, 1761, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x095a, 1768, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x095b, 1775, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x095c, 1782, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x095d, 1789, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x095e, 1796, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x095f, 1803, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x09cb, 1810, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x09cc, 1817, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x09dc, 1824, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x09dd, 1831, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x09df, 1838, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0a33, 1845, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0a36, 1852, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0a59, 1859, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0a5a, 1866, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0a5b, 1873, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0a5e, 1880, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0b48, 1887, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0b4b, 1894, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0b4c, 1901, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0b5c, 1908, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0b5d, 1915, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0b94, 1922, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0bca, 1929, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0bcb, 1936, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0bcc, 1943, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0c48, 1950, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0cc0, 1957, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0cc7, 1964, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0cc8, 1971, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0cca, 1978, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0ccb, 1985, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0d4a, 1995, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0d4b, 2002, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0d4c, 2009, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0dda, 2016, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0ddc, 2023, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0ddd, 2030, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0dde, 2040, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0e33, G_UNICODE_NOT_PRESENT_OFFSET, 2047 },
- { 0x0eb3, G_UNICODE_NOT_PRESENT_OFFSET, 2054 },
- { 0x0edc, G_UNICODE_NOT_PRESENT_OFFSET, 2061 },
- { 0x0edd, G_UNICODE_NOT_PRESENT_OFFSET, 2068 },
- { 0x0f0c, G_UNICODE_NOT_PRESENT_OFFSET, 2075 },
- { 0x0f43, 2079, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f4d, 2086, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f52, 2093, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f57, 2100, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f5c, 2107, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f69, 2114, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f73, 2121, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f75, 2128, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f76, 2135, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f77, G_UNICODE_NOT_PRESENT_OFFSET, 2142 },
- { 0x0f78, 2152, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f79, G_UNICODE_NOT_PRESENT_OFFSET, 2159 },
- { 0x0f81, 2169, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f93, 2176, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0f9d, 2183, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0fa2, 2190, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0fa7, 2197, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0fac, 2204, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x0fb9, 2211, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1026, 2218, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e00, 2225, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e01, 2229, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e02, 2233, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e03, 2237, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e04, 2241, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e05, 2245, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e06, 2249, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e07, 2253, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e08, 2257, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e09, 2263, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e0a, 2269, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e0b, 2273, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e0c, 2277, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e0d, 2281, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e0e, 2285, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e0f, 2289, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e10, 2293, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e11, 2297, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e12, 2301, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e13, 2305, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e14, 2309, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e15, 2315, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e16, 2321, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e17, 2327, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e18, 2333, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e19, 2337, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e1a, 2341, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e1b, 2345, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e1c, 2349, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e1d, 2355, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e1e, 2361, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e1f, 2365, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e20, 2369, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e21, 2373, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e22, 2377, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e23, 2381, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e24, 2385, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e25, 2389, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e26, 2393, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e27, 2397, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e28, 2401, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e29, 2405, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e2a, 2409, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e2b, 2413, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e2c, 2417, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e2d, 2421, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e2e, 2425, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e2f, 2431, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e30, 2437, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e31, 2441, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e32, 2445, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e33, 2449, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e34, 2453, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e35, 2457, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e36, 2461, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e37, 2465, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e38, 2469, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e39, 2475, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e3a, 2481, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e3b, 2485, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e3c, 2489, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e3d, 2493, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e3e, 2497, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e3f, 2501, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e40, 2505, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e41, 2509, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e42, 2513, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e43, 2517, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e44, 2521, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e45, 2525, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e46, 2529, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e47, 2533, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e48, 2537, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e49, 2541, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e4a, 2545, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e4b, 2549, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e4c, 2553, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e4d, 2559, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e4e, 2565, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e4f, 2571, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e50, 2577, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e51, 2583, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e52, 2589, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e53, 2595, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e54, 2601, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e55, 2605, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e56, 2609, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e57, 2613, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e58, 2617, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e59, 2621, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e5a, 2625, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e5b, 2629, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e5c, 2633, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e5d, 2639, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e5e, 2645, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e5f, 2649, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e60, 2653, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e61, 2657, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e62, 2661, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e63, 2665, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e64, 2669, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e65, 2675, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e66, 2681, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e67, 2687, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e68, 2693, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e69, 2699, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e6a, 2705, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e6b, 2709, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e6c, 2713, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e6d, 2717, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e6e, 2721, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e6f, 2725, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e70, 2729, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e71, 2733, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e72, 2737, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e73, 2741, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e74, 2745, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e75, 2749, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e76, 2753, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e77, 2757, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e78, 2761, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e79, 2767, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e7a, 2773, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e7b, 2779, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e7c, 2785, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e7d, 2789, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e7e, 2793, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e7f, 2797, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e80, 2801, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e81, 2805, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e82, 2809, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e83, 2813, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e84, 2817, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e85, 2821, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e86, 2825, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e87, 2829, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e88, 2833, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e89, 2837, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e8a, 2841, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e8b, 2845, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e8c, 2849, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e8d, 2853, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e8e, 2857, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e8f, 2861, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e90, 2865, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e91, 2869, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e92, 2873, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e93, 2877, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e94, 2881, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e95, 2885, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e96, 2889, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e97, 2893, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e98, 2897, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e99, 2901, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1e9a, G_UNICODE_NOT_PRESENT_OFFSET, 2905 },
- { 0x1e9b, 2909, 2657 },
- { 0x1ea0, 2914, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea1, 2918, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea2, 2922, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea3, 2926, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea4, 2930, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea5, 2936, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea6, 2942, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea7, 2948, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea8, 2954, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ea9, 2960, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eaa, 2966, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eab, 2972, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eac, 2978, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ead, 2984, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eae, 2990, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eaf, 2996, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb0, 3002, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb1, 3008, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb2, 3014, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb3, 3020, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb4, 3026, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb5, 3032, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb6, 3038, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb7, 3044, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb8, 3050, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eb9, 3054, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eba, 3058, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ebb, 3062, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ebc, 3066, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ebd, 3070, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ebe, 3074, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ebf, 3080, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec0, 3086, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec1, 3092, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec2, 3098, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec3, 3104, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec4, 3110, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec5, 3116, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec6, 3122, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec7, 3128, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec8, 3134, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ec9, 3138, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eca, 3142, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ecb, 3146, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ecc, 3150, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ecd, 3154, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ece, 3158, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ecf, 3162, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed0, 3166, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed1, 3172, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed2, 3178, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed3, 3184, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed4, 3190, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed5, 3196, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed6, 3202, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed7, 3208, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed8, 3214, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ed9, 3220, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eda, 3226, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1edb, 3232, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1edc, 3238, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1edd, 3244, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ede, 3250, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1edf, 3256, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee0, 3262, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee1, 3268, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee2, 3274, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee3, 3280, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee4, 3286, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee5, 3290, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee6, 3294, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee7, 3298, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee8, 3302, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ee9, 3308, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eea, 3314, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eeb, 3320, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eec, 3326, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eed, 3332, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eee, 3338, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1eef, 3344, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef0, 3350, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef1, 3356, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef2, 3362, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef3, 3366, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef4, 3370, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef5, 3374, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef6, 3378, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef7, 3382, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef8, 3386, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ef9, 3390, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f00, 3394, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f01, 3399, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f02, 3404, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f03, 3411, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f04, 3418, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f05, 3425, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f06, 3432, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f07, 3439, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f08, 3446, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f09, 3451, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f0a, 3456, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f0b, 3463, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f0c, 3470, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f0d, 3477, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f0e, 3484, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f0f, 3491, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f10, 3498, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f11, 3503, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f12, 3508, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f13, 3515, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f14, 3522, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f15, 3529, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f18, 3536, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f19, 3541, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f1a, 3546, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f1b, 3553, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f1c, 3560, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f1d, 3567, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f20, 3574, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f21, 3579, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f22, 3584, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f23, 3591, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f24, 3598, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f25, 3605, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f26, 3612, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f27, 3619, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f28, 3626, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f29, 3631, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f2a, 3636, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f2b, 3643, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f2c, 3650, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f2d, 3657, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f2e, 3664, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f2f, 3671, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f30, 3678, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f31, 3683, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f32, 3688, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f33, 3695, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f34, 3702, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f35, 3709, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f36, 3716, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f37, 3723, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f38, 3730, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f39, 3735, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f3a, 3740, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f3b, 3747, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f3c, 3754, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f3d, 3761, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f3e, 3768, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f3f, 3775, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f40, 3782, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f41, 3787, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f42, 3792, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f43, 3799, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f44, 3806, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f45, 3813, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f48, 3820, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f49, 3825, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f4a, 3830, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f4b, 3837, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f4c, 3844, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f4d, 3851, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f50, 3858, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f51, 3863, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f52, 3868, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f53, 3875, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f54, 3882, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f55, 3889, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f56, 3896, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f57, 3903, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f59, 3910, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f5b, 3915, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f5d, 3922, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f5f, 3929, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f60, 3936, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f61, 3941, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f62, 3946, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f63, 3953, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f64, 3960, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f65, 3967, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f66, 3974, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f67, 3981, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f68, 3988, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f69, 3993, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f6a, 3998, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f6b, 4005, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f6c, 4012, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f6d, 4019, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f6e, 4026, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f6f, 4033, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f70, 4040, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f71, 1316, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f72, 4045, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f73, 1321, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f74, 4050, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f75, 1326, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f76, 4055, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f77, 1331, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f78, 4060, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f79, 1353, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f7a, 4065, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f7b, 1358, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f7c, 4070, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f7d, 1363, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f80, 4075, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f81, 4082, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f82, 4089, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f83, 4098, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f84, 4107, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f85, 4116, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f86, 4125, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f87, 4134, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f88, 4143, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f89, 4150, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f8a, 4157, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f8b, 4166, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f8c, 4175, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f8d, 4184, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f8e, 4193, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f8f, 4202, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f90, 4211, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f91, 4218, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f92, 4225, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f93, 4234, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f94, 4243, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f95, 4252, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f96, 4261, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f97, 4270, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f98, 4279, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f99, 4286, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f9a, 4293, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f9b, 4302, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f9c, 4311, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f9d, 4320, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f9e, 4329, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1f9f, 4338, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa0, 4347, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa1, 4354, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa2, 4361, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa3, 4370, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa4, 4379, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa5, 4388, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa6, 4397, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa7, 4406, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa8, 4415, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fa9, 4422, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1faa, 4429, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fab, 4438, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fac, 4447, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fad, 4456, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fae, 4465, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1faf, 4474, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb0, 4483, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb1, 4488, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb2, 4493, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb3, 4500, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb4, 4505, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb6, 4512, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb7, 4517, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb8, 4524, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fb9, 4529, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fba, 4534, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fbb, 1261, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fbc, 4539, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fbd, G_UNICODE_NOT_PRESENT_OFFSET, 4544 },
- { 0x1fbe, 4548, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fbf, G_UNICODE_NOT_PRESENT_OFFSET, 4544 },
- { 0x1fc0, G_UNICODE_NOT_PRESENT_OFFSET, 4551 },
- { 0x1fc1, 4555, 4560 },
- { 0x1fc2, 4566, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fc3, 4573, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fc4, 4578, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fc6, 4585, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fc7, 4590, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fc8, 4597, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fc9, 1269, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fca, 4602, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fcb, 1274, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fcc, 4607, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fcd, 4612, 4618 },
- { 0x1fce, 4624, 4630 },
- { 0x1fcf, 4636, 4642 },
- { 0x1fd0, 4648, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fd1, 4653, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fd2, 4658, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fd3, 1299, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fd6, 4665, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fd7, 4670, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fd8, 4677, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fd9, 4682, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fda, 4687, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fdb, 1279, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fdd, 4692, 4698 },
- { 0x1fde, 4704, 4710 },
- { 0x1fdf, 4716, 4722 },
- { 0x1fe0, 4728, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe1, 4733, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe2, 4738, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe3, 1336, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe4, 4745, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe5, 4750, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe6, 4755, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe7, 4760, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe8, 4767, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fe9, 4772, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fea, 4777, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1feb, 1289, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fec, 4782, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1fed, 4787, 4792 },
- { 0x1fee, 1250, 1255 },
- { 0x1fef, 4798, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ff2, 4800, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ff3, 4807, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ff4, 4812, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ff6, 4819, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ff7, 4824, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ff8, 4831, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ff9, 1284, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ffa, 4836, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ffb, 1294, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ffc, 4841, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1ffd, 4846, 16 },
- { 0x1ffe, G_UNICODE_NOT_PRESENT_OFFSET, 4849 },
- { 0x2000, 4853, 0 },
- { 0x2001, 4857, 0 },
- { 0x2002, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2003, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2004, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2005, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2006, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2007, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2008, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2009, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x200a, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2011, G_UNICODE_NOT_PRESENT_OFFSET, 4861 },
- { 0x2017, G_UNICODE_NOT_PRESENT_OFFSET, 4865 },
- { 0x2024, G_UNICODE_NOT_PRESENT_OFFSET, 4869 },
- { 0x2025, G_UNICODE_NOT_PRESENT_OFFSET, 4871 },
- { 0x2026, G_UNICODE_NOT_PRESENT_OFFSET, 4874 },
- { 0x202f, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2033, G_UNICODE_NOT_PRESENT_OFFSET, 4878 },
- { 0x2034, G_UNICODE_NOT_PRESENT_OFFSET, 4885 },
- { 0x2036, G_UNICODE_NOT_PRESENT_OFFSET, 4895 },
- { 0x2037, G_UNICODE_NOT_PRESENT_OFFSET, 4902 },
- { 0x203c, G_UNICODE_NOT_PRESENT_OFFSET, 4912 },
- { 0x203e, G_UNICODE_NOT_PRESENT_OFFSET, 4915 },
- { 0x2047, G_UNICODE_NOT_PRESENT_OFFSET, 4919 },
- { 0x2048, G_UNICODE_NOT_PRESENT_OFFSET, 4922 },
- { 0x2049, G_UNICODE_NOT_PRESENT_OFFSET, 4925 },
- { 0x2057, G_UNICODE_NOT_PRESENT_OFFSET, 4928 },
- { 0x205f, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x2070, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0x2071, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x2074, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0x2075, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0x2076, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0x2077, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0x2078, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0x2079, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0x207a, G_UNICODE_NOT_PRESENT_OFFSET, 4957 },
- { 0x207b, G_UNICODE_NOT_PRESENT_OFFSET, 4959 },
- { 0x207c, G_UNICODE_NOT_PRESENT_OFFSET, 4963 },
- { 0x207d, G_UNICODE_NOT_PRESENT_OFFSET, 4965 },
- { 0x207e, G_UNICODE_NOT_PRESENT_OFFSET, 4967 },
- { 0x207f, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x2080, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0x2081, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0x2082, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0x2083, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0x2084, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0x2085, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0x2086, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0x2087, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0x2088, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0x2089, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0x208a, G_UNICODE_NOT_PRESENT_OFFSET, 4957 },
- { 0x208b, G_UNICODE_NOT_PRESENT_OFFSET, 4959 },
- { 0x208c, G_UNICODE_NOT_PRESENT_OFFSET, 4963 },
- { 0x208d, G_UNICODE_NOT_PRESENT_OFFSET, 4965 },
- { 0x208e, G_UNICODE_NOT_PRESENT_OFFSET, 4967 },
- { 0x20a8, G_UNICODE_NOT_PRESENT_OFFSET, 4971 },
- { 0x2100, G_UNICODE_NOT_PRESENT_OFFSET, 4974 },
- { 0x2101, G_UNICODE_NOT_PRESENT_OFFSET, 4978 },
- { 0x2102, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x2103, G_UNICODE_NOT_PRESENT_OFFSET, 4984 },
- { 0x2105, G_UNICODE_NOT_PRESENT_OFFSET, 4988 },
- { 0x2106, G_UNICODE_NOT_PRESENT_OFFSET, 4992 },
- { 0x2107, G_UNICODE_NOT_PRESENT_OFFSET, 4996 },
- { 0x2109, G_UNICODE_NOT_PRESENT_OFFSET, 4999 },
- { 0x210a, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x210b, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x210c, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x210d, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x210e, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x210f, G_UNICODE_NOT_PRESENT_OFFSET, 5007 },
- { 0x2110, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x2111, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x2112, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x2113, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x2115, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x2116, G_UNICODE_NOT_PRESENT_OFFSET, 5016 },
- { 0x2119, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x211a, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x211b, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x211c, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x211d, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x2120, G_UNICODE_NOT_PRESENT_OFFSET, 5025 },
- { 0x2121, G_UNICODE_NOT_PRESENT_OFFSET, 5028 },
- { 0x2122, G_UNICODE_NOT_PRESENT_OFFSET, 5032 },
- { 0x2124, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x2126, 5037, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2128, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x212a, 5040, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x212b, 69, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x212c, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x212d, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x212f, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x2130, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x2131, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x2133, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x2134, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x2135, G_UNICODE_NOT_PRESENT_OFFSET, 5052 },
- { 0x2136, G_UNICODE_NOT_PRESENT_OFFSET, 5055 },
- { 0x2137, G_UNICODE_NOT_PRESENT_OFFSET, 5058 },
- { 0x2138, G_UNICODE_NOT_PRESENT_OFFSET, 5061 },
- { 0x2139, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x213d, G_UNICODE_NOT_PRESENT_OFFSET, 5064 },
- { 0x213e, G_UNICODE_NOT_PRESENT_OFFSET, 5067 },
- { 0x213f, G_UNICODE_NOT_PRESENT_OFFSET, 5070 },
- { 0x2140, G_UNICODE_NOT_PRESENT_OFFSET, 5073 },
- { 0x2145, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x2146, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x2147, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x2148, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x2149, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x2153, G_UNICODE_NOT_PRESENT_OFFSET, 5081 },
- { 0x2154, G_UNICODE_NOT_PRESENT_OFFSET, 5087 },
- { 0x2155, G_UNICODE_NOT_PRESENT_OFFSET, 5093 },
- { 0x2156, G_UNICODE_NOT_PRESENT_OFFSET, 5099 },
- { 0x2157, G_UNICODE_NOT_PRESENT_OFFSET, 5105 },
- { 0x2158, G_UNICODE_NOT_PRESENT_OFFSET, 5111 },
- { 0x2159, G_UNICODE_NOT_PRESENT_OFFSET, 5117 },
- { 0x215a, G_UNICODE_NOT_PRESENT_OFFSET, 5123 },
- { 0x215b, G_UNICODE_NOT_PRESENT_OFFSET, 5129 },
- { 0x215c, G_UNICODE_NOT_PRESENT_OFFSET, 5135 },
- { 0x215d, G_UNICODE_NOT_PRESENT_OFFSET, 5141 },
- { 0x215e, G_UNICODE_NOT_PRESENT_OFFSET, 5147 },
- { 0x215f, G_UNICODE_NOT_PRESENT_OFFSET, 5153 },
- { 0x2160, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x2161, G_UNICODE_NOT_PRESENT_OFFSET, 5158 },
- { 0x2162, G_UNICODE_NOT_PRESENT_OFFSET, 5161 },
- { 0x2163, G_UNICODE_NOT_PRESENT_OFFSET, 5165 },
- { 0x2164, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x2165, G_UNICODE_NOT_PRESENT_OFFSET, 5170 },
- { 0x2166, G_UNICODE_NOT_PRESENT_OFFSET, 5173 },
- { 0x2167, G_UNICODE_NOT_PRESENT_OFFSET, 5177 },
- { 0x2168, G_UNICODE_NOT_PRESENT_OFFSET, 5182 },
- { 0x2169, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x216a, G_UNICODE_NOT_PRESENT_OFFSET, 5187 },
- { 0x216b, G_UNICODE_NOT_PRESENT_OFFSET, 5190 },
- { 0x216c, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x216d, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x216e, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x216f, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x2170, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x2171, G_UNICODE_NOT_PRESENT_OFFSET, 5194 },
- { 0x2172, G_UNICODE_NOT_PRESENT_OFFSET, 5197 },
- { 0x2173, G_UNICODE_NOT_PRESENT_OFFSET, 5201 },
- { 0x2174, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x2175, G_UNICODE_NOT_PRESENT_OFFSET, 5206 },
- { 0x2176, G_UNICODE_NOT_PRESENT_OFFSET, 5209 },
- { 0x2177, G_UNICODE_NOT_PRESENT_OFFSET, 5213 },
- { 0x2178, G_UNICODE_NOT_PRESENT_OFFSET, 5218 },
- { 0x2179, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x217a, G_UNICODE_NOT_PRESENT_OFFSET, 5221 },
- { 0x217b, G_UNICODE_NOT_PRESENT_OFFSET, 5224 },
- { 0x217c, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x217d, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x217e, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x217f, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x219a, 5232, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x219b, 5238, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x21ae, 5244, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x21cd, 5250, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x21ce, 5256, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x21cf, 5262, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2204, 5268, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2209, 5274, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x220c, 5280, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2224, 5286, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2226, 5292, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x222c, G_UNICODE_NOT_PRESENT_OFFSET, 5298 },
- { 0x222d, G_UNICODE_NOT_PRESENT_OFFSET, 5305 },
- { 0x222f, G_UNICODE_NOT_PRESENT_OFFSET, 5315 },
- { 0x2230, G_UNICODE_NOT_PRESENT_OFFSET, 5322 },
- { 0x2241, 5332, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2244, 5338, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2247, 5344, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2249, 5350, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2260, 5356, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2262, 5360, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x226d, 5366, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x226e, 5372, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x226f, 5376, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2270, 5380, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2271, 5386, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2274, 5392, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2275, 5398, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2278, 5404, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2279, 5410, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2280, 5416, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2281, 5422, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2284, 5428, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2285, 5434, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2288, 5440, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2289, 5446, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22ac, 5452, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22ad, 5458, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22ae, 5464, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22af, 5470, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22e0, 5476, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22e1, 5482, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22e2, 5488, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22e3, 5494, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22ea, 5500, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22eb, 5506, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22ec, 5512, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x22ed, 5518, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2329, 5524, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x232a, 5528, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2460, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0x2461, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0x2462, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0x2463, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0x2464, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0x2465, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0x2466, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0x2467, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0x2468, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0x2469, G_UNICODE_NOT_PRESENT_OFFSET, 5532 },
- { 0x246a, G_UNICODE_NOT_PRESENT_OFFSET, 5535 },
- { 0x246b, G_UNICODE_NOT_PRESENT_OFFSET, 5538 },
- { 0x246c, G_UNICODE_NOT_PRESENT_OFFSET, 5541 },
- { 0x246d, G_UNICODE_NOT_PRESENT_OFFSET, 5544 },
- { 0x246e, G_UNICODE_NOT_PRESENT_OFFSET, 5547 },
- { 0x246f, G_UNICODE_NOT_PRESENT_OFFSET, 5550 },
- { 0x2470, G_UNICODE_NOT_PRESENT_OFFSET, 5553 },
- { 0x2471, G_UNICODE_NOT_PRESENT_OFFSET, 5556 },
- { 0x2472, G_UNICODE_NOT_PRESENT_OFFSET, 5559 },
- { 0x2473, G_UNICODE_NOT_PRESENT_OFFSET, 5562 },
- { 0x2474, G_UNICODE_NOT_PRESENT_OFFSET, 5565 },
- { 0x2475, G_UNICODE_NOT_PRESENT_OFFSET, 5569 },
- { 0x2476, G_UNICODE_NOT_PRESENT_OFFSET, 5573 },
- { 0x2477, G_UNICODE_NOT_PRESENT_OFFSET, 5577 },
- { 0x2478, G_UNICODE_NOT_PRESENT_OFFSET, 5581 },
- { 0x2479, G_UNICODE_NOT_PRESENT_OFFSET, 5585 },
- { 0x247a, G_UNICODE_NOT_PRESENT_OFFSET, 5589 },
- { 0x247b, G_UNICODE_NOT_PRESENT_OFFSET, 5593 },
- { 0x247c, G_UNICODE_NOT_PRESENT_OFFSET, 5597 },
- { 0x247d, G_UNICODE_NOT_PRESENT_OFFSET, 5601 },
- { 0x247e, G_UNICODE_NOT_PRESENT_OFFSET, 5606 },
- { 0x247f, G_UNICODE_NOT_PRESENT_OFFSET, 5611 },
- { 0x2480, G_UNICODE_NOT_PRESENT_OFFSET, 5616 },
- { 0x2481, G_UNICODE_NOT_PRESENT_OFFSET, 5621 },
- { 0x2482, G_UNICODE_NOT_PRESENT_OFFSET, 5626 },
- { 0x2483, G_UNICODE_NOT_PRESENT_OFFSET, 5631 },
- { 0x2484, G_UNICODE_NOT_PRESENT_OFFSET, 5636 },
- { 0x2485, G_UNICODE_NOT_PRESENT_OFFSET, 5641 },
- { 0x2486, G_UNICODE_NOT_PRESENT_OFFSET, 5646 },
- { 0x2487, G_UNICODE_NOT_PRESENT_OFFSET, 5651 },
- { 0x2488, G_UNICODE_NOT_PRESENT_OFFSET, 5656 },
- { 0x2489, G_UNICODE_NOT_PRESENT_OFFSET, 5659 },
- { 0x248a, G_UNICODE_NOT_PRESENT_OFFSET, 5662 },
- { 0x248b, G_UNICODE_NOT_PRESENT_OFFSET, 5665 },
- { 0x248c, G_UNICODE_NOT_PRESENT_OFFSET, 5668 },
- { 0x248d, G_UNICODE_NOT_PRESENT_OFFSET, 5671 },
- { 0x248e, G_UNICODE_NOT_PRESENT_OFFSET, 5674 },
- { 0x248f, G_UNICODE_NOT_PRESENT_OFFSET, 5677 },
- { 0x2490, G_UNICODE_NOT_PRESENT_OFFSET, 5680 },
- { 0x2491, G_UNICODE_NOT_PRESENT_OFFSET, 5683 },
- { 0x2492, G_UNICODE_NOT_PRESENT_OFFSET, 5687 },
- { 0x2493, G_UNICODE_NOT_PRESENT_OFFSET, 5691 },
- { 0x2494, G_UNICODE_NOT_PRESENT_OFFSET, 5695 },
- { 0x2495, G_UNICODE_NOT_PRESENT_OFFSET, 5699 },
- { 0x2496, G_UNICODE_NOT_PRESENT_OFFSET, 5703 },
- { 0x2497, G_UNICODE_NOT_PRESENT_OFFSET, 5707 },
- { 0x2498, G_UNICODE_NOT_PRESENT_OFFSET, 5711 },
- { 0x2499, G_UNICODE_NOT_PRESENT_OFFSET, 5715 },
- { 0x249a, G_UNICODE_NOT_PRESENT_OFFSET, 5719 },
- { 0x249b, G_UNICODE_NOT_PRESENT_OFFSET, 5723 },
- { 0x249c, G_UNICODE_NOT_PRESENT_OFFSET, 5727 },
- { 0x249d, G_UNICODE_NOT_PRESENT_OFFSET, 5731 },
- { 0x249e, G_UNICODE_NOT_PRESENT_OFFSET, 5735 },
- { 0x249f, G_UNICODE_NOT_PRESENT_OFFSET, 5739 },
- { 0x24a0, G_UNICODE_NOT_PRESENT_OFFSET, 5743 },
- { 0x24a1, G_UNICODE_NOT_PRESENT_OFFSET, 5747 },
- { 0x24a2, G_UNICODE_NOT_PRESENT_OFFSET, 5751 },
- { 0x24a3, G_UNICODE_NOT_PRESENT_OFFSET, 5755 },
- { 0x24a4, G_UNICODE_NOT_PRESENT_OFFSET, 5759 },
- { 0x24a5, G_UNICODE_NOT_PRESENT_OFFSET, 5763 },
- { 0x24a6, G_UNICODE_NOT_PRESENT_OFFSET, 5767 },
- { 0x24a7, G_UNICODE_NOT_PRESENT_OFFSET, 5771 },
- { 0x24a8, G_UNICODE_NOT_PRESENT_OFFSET, 5775 },
- { 0x24a9, G_UNICODE_NOT_PRESENT_OFFSET, 5779 },
- { 0x24aa, G_UNICODE_NOT_PRESENT_OFFSET, 5783 },
- { 0x24ab, G_UNICODE_NOT_PRESENT_OFFSET, 5787 },
- { 0x24ac, G_UNICODE_NOT_PRESENT_OFFSET, 5791 },
- { 0x24ad, G_UNICODE_NOT_PRESENT_OFFSET, 5795 },
- { 0x24ae, G_UNICODE_NOT_PRESENT_OFFSET, 5799 },
- { 0x24af, G_UNICODE_NOT_PRESENT_OFFSET, 5803 },
- { 0x24b0, G_UNICODE_NOT_PRESENT_OFFSET, 5807 },
- { 0x24b1, G_UNICODE_NOT_PRESENT_OFFSET, 5811 },
- { 0x24b2, G_UNICODE_NOT_PRESENT_OFFSET, 5815 },
- { 0x24b3, G_UNICODE_NOT_PRESENT_OFFSET, 5819 },
- { 0x24b4, G_UNICODE_NOT_PRESENT_OFFSET, 5823 },
- { 0x24b5, G_UNICODE_NOT_PRESENT_OFFSET, 5827 },
- { 0x24b6, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x24b7, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x24b8, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x24b9, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x24ba, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x24bb, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x24bc, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x24bd, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x24be, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x24bf, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x24c0, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x24c1, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x24c2, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x24c3, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x24c4, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x24c5, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x24c6, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x24c7, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x24c8, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x24c9, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x24ca, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x24cb, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x24cc, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x24cd, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x24ce, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x24cf, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x24d0, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x24d1, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x24d2, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x24d3, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x24d4, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x24d5, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x24d6, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x24d7, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x24d8, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x24d9, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x24da, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x24db, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x24dc, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x24dd, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x24de, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x24df, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x24e0, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x24e1, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x24e2, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x24e3, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x24e4, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x24e5, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x24e6, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x24e7, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x24e8, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x24e9, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x24ea, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0x2a0c, G_UNICODE_NOT_PRESENT_OFFSET, 5865 },
- { 0x2a74, G_UNICODE_NOT_PRESENT_OFFSET, 5878 },
- { 0x2a75, G_UNICODE_NOT_PRESENT_OFFSET, 5882 },
- { 0x2a76, G_UNICODE_NOT_PRESENT_OFFSET, 5885 },
- { 0x2adc, 5889, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2e9f, G_UNICODE_NOT_PRESENT_OFFSET, 5895 },
- { 0x2ef3, G_UNICODE_NOT_PRESENT_OFFSET, 5899 },
- { 0x2f00, G_UNICODE_NOT_PRESENT_OFFSET, 5903 },
- { 0x2f01, G_UNICODE_NOT_PRESENT_OFFSET, 5907 },
- { 0x2f02, G_UNICODE_NOT_PRESENT_OFFSET, 5911 },
- { 0x2f03, G_UNICODE_NOT_PRESENT_OFFSET, 5915 },
- { 0x2f04, G_UNICODE_NOT_PRESENT_OFFSET, 5919 },
- { 0x2f05, G_UNICODE_NOT_PRESENT_OFFSET, 5923 },
- { 0x2f06, G_UNICODE_NOT_PRESENT_OFFSET, 5927 },
- { 0x2f07, G_UNICODE_NOT_PRESENT_OFFSET, 5931 },
- { 0x2f08, G_UNICODE_NOT_PRESENT_OFFSET, 5935 },
- { 0x2f09, G_UNICODE_NOT_PRESENT_OFFSET, 5939 },
- { 0x2f0a, G_UNICODE_NOT_PRESENT_OFFSET, 5943 },
- { 0x2f0b, G_UNICODE_NOT_PRESENT_OFFSET, 5947 },
- { 0x2f0c, G_UNICODE_NOT_PRESENT_OFFSET, 5951 },
- { 0x2f0d, G_UNICODE_NOT_PRESENT_OFFSET, 5955 },
- { 0x2f0e, G_UNICODE_NOT_PRESENT_OFFSET, 5959 },
- { 0x2f0f, G_UNICODE_NOT_PRESENT_OFFSET, 5963 },
- { 0x2f10, G_UNICODE_NOT_PRESENT_OFFSET, 5967 },
- { 0x2f11, G_UNICODE_NOT_PRESENT_OFFSET, 5971 },
- { 0x2f12, G_UNICODE_NOT_PRESENT_OFFSET, 5975 },
- { 0x2f13, G_UNICODE_NOT_PRESENT_OFFSET, 5979 },
- { 0x2f14, G_UNICODE_NOT_PRESENT_OFFSET, 5983 },
- { 0x2f15, G_UNICODE_NOT_PRESENT_OFFSET, 5987 },
- { 0x2f16, G_UNICODE_NOT_PRESENT_OFFSET, 5991 },
- { 0x2f17, G_UNICODE_NOT_PRESENT_OFFSET, 5995 },
- { 0x2f18, G_UNICODE_NOT_PRESENT_OFFSET, 5999 },
- { 0x2f19, G_UNICODE_NOT_PRESENT_OFFSET, 6003 },
- { 0x2f1a, G_UNICODE_NOT_PRESENT_OFFSET, 6007 },
- { 0x2f1b, G_UNICODE_NOT_PRESENT_OFFSET, 6011 },
- { 0x2f1c, G_UNICODE_NOT_PRESENT_OFFSET, 6015 },
- { 0x2f1d, G_UNICODE_NOT_PRESENT_OFFSET, 6019 },
- { 0x2f1e, G_UNICODE_NOT_PRESENT_OFFSET, 6023 },
- { 0x2f1f, G_UNICODE_NOT_PRESENT_OFFSET, 6027 },
- { 0x2f20, G_UNICODE_NOT_PRESENT_OFFSET, 6031 },
- { 0x2f21, G_UNICODE_NOT_PRESENT_OFFSET, 6035 },
- { 0x2f22, G_UNICODE_NOT_PRESENT_OFFSET, 6039 },
- { 0x2f23, G_UNICODE_NOT_PRESENT_OFFSET, 6043 },
- { 0x2f24, G_UNICODE_NOT_PRESENT_OFFSET, 6047 },
- { 0x2f25, G_UNICODE_NOT_PRESENT_OFFSET, 6051 },
- { 0x2f26, G_UNICODE_NOT_PRESENT_OFFSET, 6055 },
- { 0x2f27, G_UNICODE_NOT_PRESENT_OFFSET, 6059 },
- { 0x2f28, G_UNICODE_NOT_PRESENT_OFFSET, 6063 },
- { 0x2f29, G_UNICODE_NOT_PRESENT_OFFSET, 6067 },
- { 0x2f2a, G_UNICODE_NOT_PRESENT_OFFSET, 6071 },
- { 0x2f2b, G_UNICODE_NOT_PRESENT_OFFSET, 6075 },
- { 0x2f2c, G_UNICODE_NOT_PRESENT_OFFSET, 6079 },
- { 0x2f2d, G_UNICODE_NOT_PRESENT_OFFSET, 6083 },
- { 0x2f2e, G_UNICODE_NOT_PRESENT_OFFSET, 6087 },
- { 0x2f2f, G_UNICODE_NOT_PRESENT_OFFSET, 6091 },
- { 0x2f30, G_UNICODE_NOT_PRESENT_OFFSET, 6095 },
- { 0x2f31, G_UNICODE_NOT_PRESENT_OFFSET, 6099 },
- { 0x2f32, G_UNICODE_NOT_PRESENT_OFFSET, 6103 },
- { 0x2f33, G_UNICODE_NOT_PRESENT_OFFSET, 6107 },
- { 0x2f34, G_UNICODE_NOT_PRESENT_OFFSET, 6111 },
- { 0x2f35, G_UNICODE_NOT_PRESENT_OFFSET, 6115 },
- { 0x2f36, G_UNICODE_NOT_PRESENT_OFFSET, 6119 },
- { 0x2f37, G_UNICODE_NOT_PRESENT_OFFSET, 6123 },
- { 0x2f38, G_UNICODE_NOT_PRESENT_OFFSET, 6127 },
- { 0x2f39, G_UNICODE_NOT_PRESENT_OFFSET, 6131 },
- { 0x2f3a, G_UNICODE_NOT_PRESENT_OFFSET, 6135 },
- { 0x2f3b, G_UNICODE_NOT_PRESENT_OFFSET, 6139 },
- { 0x2f3c, G_UNICODE_NOT_PRESENT_OFFSET, 6143 },
- { 0x2f3d, G_UNICODE_NOT_PRESENT_OFFSET, 6147 },
- { 0x2f3e, G_UNICODE_NOT_PRESENT_OFFSET, 6151 },
- { 0x2f3f, G_UNICODE_NOT_PRESENT_OFFSET, 6155 },
- { 0x2f40, G_UNICODE_NOT_PRESENT_OFFSET, 6159 },
- { 0x2f41, G_UNICODE_NOT_PRESENT_OFFSET, 6163 },
- { 0x2f42, G_UNICODE_NOT_PRESENT_OFFSET, 6167 },
- { 0x2f43, G_UNICODE_NOT_PRESENT_OFFSET, 6171 },
- { 0x2f44, G_UNICODE_NOT_PRESENT_OFFSET, 6175 },
- { 0x2f45, G_UNICODE_NOT_PRESENT_OFFSET, 6179 },
- { 0x2f46, G_UNICODE_NOT_PRESENT_OFFSET, 6183 },
- { 0x2f47, G_UNICODE_NOT_PRESENT_OFFSET, 6187 },
- { 0x2f48, G_UNICODE_NOT_PRESENT_OFFSET, 6191 },
- { 0x2f49, G_UNICODE_NOT_PRESENT_OFFSET, 6195 },
- { 0x2f4a, G_UNICODE_NOT_PRESENT_OFFSET, 6199 },
- { 0x2f4b, G_UNICODE_NOT_PRESENT_OFFSET, 6203 },
- { 0x2f4c, G_UNICODE_NOT_PRESENT_OFFSET, 6207 },
- { 0x2f4d, G_UNICODE_NOT_PRESENT_OFFSET, 6211 },
- { 0x2f4e, G_UNICODE_NOT_PRESENT_OFFSET, 6215 },
- { 0x2f4f, G_UNICODE_NOT_PRESENT_OFFSET, 6219 },
- { 0x2f50, G_UNICODE_NOT_PRESENT_OFFSET, 6223 },
- { 0x2f51, G_UNICODE_NOT_PRESENT_OFFSET, 6227 },
- { 0x2f52, G_UNICODE_NOT_PRESENT_OFFSET, 6231 },
- { 0x2f53, G_UNICODE_NOT_PRESENT_OFFSET, 6235 },
- { 0x2f54, G_UNICODE_NOT_PRESENT_OFFSET, 6239 },
- { 0x2f55, G_UNICODE_NOT_PRESENT_OFFSET, 6243 },
- { 0x2f56, G_UNICODE_NOT_PRESENT_OFFSET, 6247 },
- { 0x2f57, G_UNICODE_NOT_PRESENT_OFFSET, 6251 },
- { 0x2f58, G_UNICODE_NOT_PRESENT_OFFSET, 6255 },
- { 0x2f59, G_UNICODE_NOT_PRESENT_OFFSET, 6259 },
- { 0x2f5a, G_UNICODE_NOT_PRESENT_OFFSET, 6263 },
- { 0x2f5b, G_UNICODE_NOT_PRESENT_OFFSET, 6267 },
- { 0x2f5c, G_UNICODE_NOT_PRESENT_OFFSET, 6271 },
- { 0x2f5d, G_UNICODE_NOT_PRESENT_OFFSET, 6275 },
- { 0x2f5e, G_UNICODE_NOT_PRESENT_OFFSET, 6279 },
- { 0x2f5f, G_UNICODE_NOT_PRESENT_OFFSET, 6283 },
- { 0x2f60, G_UNICODE_NOT_PRESENT_OFFSET, 6287 },
- { 0x2f61, G_UNICODE_NOT_PRESENT_OFFSET, 6291 },
- { 0x2f62, G_UNICODE_NOT_PRESENT_OFFSET, 6295 },
- { 0x2f63, G_UNICODE_NOT_PRESENT_OFFSET, 6299 },
- { 0x2f64, G_UNICODE_NOT_PRESENT_OFFSET, 6303 },
- { 0x2f65, G_UNICODE_NOT_PRESENT_OFFSET, 6307 },
- { 0x2f66, G_UNICODE_NOT_PRESENT_OFFSET, 6311 },
- { 0x2f67, G_UNICODE_NOT_PRESENT_OFFSET, 6315 },
- { 0x2f68, G_UNICODE_NOT_PRESENT_OFFSET, 6319 },
- { 0x2f69, G_UNICODE_NOT_PRESENT_OFFSET, 6323 },
- { 0x2f6a, G_UNICODE_NOT_PRESENT_OFFSET, 6327 },
- { 0x2f6b, G_UNICODE_NOT_PRESENT_OFFSET, 6331 },
- { 0x2f6c, G_UNICODE_NOT_PRESENT_OFFSET, 6335 },
- { 0x2f6d, G_UNICODE_NOT_PRESENT_OFFSET, 6339 },
- { 0x2f6e, G_UNICODE_NOT_PRESENT_OFFSET, 6343 },
- { 0x2f6f, G_UNICODE_NOT_PRESENT_OFFSET, 6347 },
- { 0x2f70, G_UNICODE_NOT_PRESENT_OFFSET, 6351 },
- { 0x2f71, G_UNICODE_NOT_PRESENT_OFFSET, 6355 },
- { 0x2f72, G_UNICODE_NOT_PRESENT_OFFSET, 6359 },
- { 0x2f73, G_UNICODE_NOT_PRESENT_OFFSET, 6363 },
- { 0x2f74, G_UNICODE_NOT_PRESENT_OFFSET, 6367 },
- { 0x2f75, G_UNICODE_NOT_PRESENT_OFFSET, 6371 },
- { 0x2f76, G_UNICODE_NOT_PRESENT_OFFSET, 6375 },
- { 0x2f77, G_UNICODE_NOT_PRESENT_OFFSET, 6379 },
- { 0x2f78, G_UNICODE_NOT_PRESENT_OFFSET, 6383 },
- { 0x2f79, G_UNICODE_NOT_PRESENT_OFFSET, 6387 },
- { 0x2f7a, G_UNICODE_NOT_PRESENT_OFFSET, 6391 },
- { 0x2f7b, G_UNICODE_NOT_PRESENT_OFFSET, 6395 },
- { 0x2f7c, G_UNICODE_NOT_PRESENT_OFFSET, 6399 },
- { 0x2f7d, G_UNICODE_NOT_PRESENT_OFFSET, 6403 },
- { 0x2f7e, G_UNICODE_NOT_PRESENT_OFFSET, 6407 },
- { 0x2f7f, G_UNICODE_NOT_PRESENT_OFFSET, 6411 },
- { 0x2f80, G_UNICODE_NOT_PRESENT_OFFSET, 6415 },
- { 0x2f81, G_UNICODE_NOT_PRESENT_OFFSET, 6419 },
- { 0x2f82, G_UNICODE_NOT_PRESENT_OFFSET, 6423 },
- { 0x2f83, G_UNICODE_NOT_PRESENT_OFFSET, 6427 },
- { 0x2f84, G_UNICODE_NOT_PRESENT_OFFSET, 6431 },
- { 0x2f85, G_UNICODE_NOT_PRESENT_OFFSET, 6435 },
- { 0x2f86, G_UNICODE_NOT_PRESENT_OFFSET, 6439 },
- { 0x2f87, G_UNICODE_NOT_PRESENT_OFFSET, 6443 },
- { 0x2f88, G_UNICODE_NOT_PRESENT_OFFSET, 6447 },
- { 0x2f89, G_UNICODE_NOT_PRESENT_OFFSET, 6451 },
- { 0x2f8a, G_UNICODE_NOT_PRESENT_OFFSET, 6455 },
- { 0x2f8b, G_UNICODE_NOT_PRESENT_OFFSET, 6459 },
- { 0x2f8c, G_UNICODE_NOT_PRESENT_OFFSET, 6463 },
- { 0x2f8d, G_UNICODE_NOT_PRESENT_OFFSET, 6467 },
- { 0x2f8e, G_UNICODE_NOT_PRESENT_OFFSET, 6471 },
- { 0x2f8f, G_UNICODE_NOT_PRESENT_OFFSET, 6475 },
- { 0x2f90, G_UNICODE_NOT_PRESENT_OFFSET, 6479 },
- { 0x2f91, G_UNICODE_NOT_PRESENT_OFFSET, 6483 },
- { 0x2f92, G_UNICODE_NOT_PRESENT_OFFSET, 6487 },
- { 0x2f93, G_UNICODE_NOT_PRESENT_OFFSET, 6491 },
- { 0x2f94, G_UNICODE_NOT_PRESENT_OFFSET, 6495 },
- { 0x2f95, G_UNICODE_NOT_PRESENT_OFFSET, 6499 },
- { 0x2f96, G_UNICODE_NOT_PRESENT_OFFSET, 6503 },
- { 0x2f97, G_UNICODE_NOT_PRESENT_OFFSET, 6507 },
- { 0x2f98, G_UNICODE_NOT_PRESENT_OFFSET, 6511 },
- { 0x2f99, G_UNICODE_NOT_PRESENT_OFFSET, 6515 },
- { 0x2f9a, G_UNICODE_NOT_PRESENT_OFFSET, 6519 },
- { 0x2f9b, G_UNICODE_NOT_PRESENT_OFFSET, 6523 },
- { 0x2f9c, G_UNICODE_NOT_PRESENT_OFFSET, 6527 },
- { 0x2f9d, G_UNICODE_NOT_PRESENT_OFFSET, 6531 },
- { 0x2f9e, G_UNICODE_NOT_PRESENT_OFFSET, 6535 },
- { 0x2f9f, G_UNICODE_NOT_PRESENT_OFFSET, 6539 },
- { 0x2fa0, G_UNICODE_NOT_PRESENT_OFFSET, 6543 },
- { 0x2fa1, G_UNICODE_NOT_PRESENT_OFFSET, 6547 },
- { 0x2fa2, G_UNICODE_NOT_PRESENT_OFFSET, 6551 },
- { 0x2fa3, G_UNICODE_NOT_PRESENT_OFFSET, 6555 },
- { 0x2fa4, G_UNICODE_NOT_PRESENT_OFFSET, 6559 },
- { 0x2fa5, G_UNICODE_NOT_PRESENT_OFFSET, 6563 },
- { 0x2fa6, G_UNICODE_NOT_PRESENT_OFFSET, 6567 },
- { 0x2fa7, G_UNICODE_NOT_PRESENT_OFFSET, 6571 },
- { 0x2fa8, G_UNICODE_NOT_PRESENT_OFFSET, 6575 },
- { 0x2fa9, G_UNICODE_NOT_PRESENT_OFFSET, 6579 },
- { 0x2faa, G_UNICODE_NOT_PRESENT_OFFSET, 6583 },
- { 0x2fab, G_UNICODE_NOT_PRESENT_OFFSET, 6587 },
- { 0x2fac, G_UNICODE_NOT_PRESENT_OFFSET, 6591 },
- { 0x2fad, G_UNICODE_NOT_PRESENT_OFFSET, 6595 },
- { 0x2fae, G_UNICODE_NOT_PRESENT_OFFSET, 6599 },
- { 0x2faf, G_UNICODE_NOT_PRESENT_OFFSET, 6603 },
- { 0x2fb0, G_UNICODE_NOT_PRESENT_OFFSET, 6607 },
- { 0x2fb1, G_UNICODE_NOT_PRESENT_OFFSET, 6611 },
- { 0x2fb2, G_UNICODE_NOT_PRESENT_OFFSET, 6615 },
- { 0x2fb3, G_UNICODE_NOT_PRESENT_OFFSET, 6619 },
- { 0x2fb4, G_UNICODE_NOT_PRESENT_OFFSET, 6623 },
- { 0x2fb5, G_UNICODE_NOT_PRESENT_OFFSET, 6627 },
- { 0x2fb6, G_UNICODE_NOT_PRESENT_OFFSET, 6631 },
- { 0x2fb7, G_UNICODE_NOT_PRESENT_OFFSET, 6635 },
- { 0x2fb8, G_UNICODE_NOT_PRESENT_OFFSET, 6639 },
- { 0x2fb9, G_UNICODE_NOT_PRESENT_OFFSET, 6643 },
- { 0x2fba, G_UNICODE_NOT_PRESENT_OFFSET, 6647 },
- { 0x2fbb, G_UNICODE_NOT_PRESENT_OFFSET, 6651 },
- { 0x2fbc, G_UNICODE_NOT_PRESENT_OFFSET, 6655 },
- { 0x2fbd, G_UNICODE_NOT_PRESENT_OFFSET, 6659 },
- { 0x2fbe, G_UNICODE_NOT_PRESENT_OFFSET, 6663 },
- { 0x2fbf, G_UNICODE_NOT_PRESENT_OFFSET, 6667 },
- { 0x2fc0, G_UNICODE_NOT_PRESENT_OFFSET, 6671 },
- { 0x2fc1, G_UNICODE_NOT_PRESENT_OFFSET, 6675 },
- { 0x2fc2, G_UNICODE_NOT_PRESENT_OFFSET, 6679 },
- { 0x2fc3, G_UNICODE_NOT_PRESENT_OFFSET, 6683 },
- { 0x2fc4, G_UNICODE_NOT_PRESENT_OFFSET, 6687 },
- { 0x2fc5, G_UNICODE_NOT_PRESENT_OFFSET, 6691 },
- { 0x2fc6, G_UNICODE_NOT_PRESENT_OFFSET, 6695 },
- { 0x2fc7, G_UNICODE_NOT_PRESENT_OFFSET, 6699 },
- { 0x2fc8, G_UNICODE_NOT_PRESENT_OFFSET, 6703 },
- { 0x2fc9, G_UNICODE_NOT_PRESENT_OFFSET, 6707 },
- { 0x2fca, G_UNICODE_NOT_PRESENT_OFFSET, 6711 },
- { 0x2fcb, G_UNICODE_NOT_PRESENT_OFFSET, 6715 },
- { 0x2fcc, G_UNICODE_NOT_PRESENT_OFFSET, 6719 },
- { 0x2fcd, G_UNICODE_NOT_PRESENT_OFFSET, 6723 },
- { 0x2fce, G_UNICODE_NOT_PRESENT_OFFSET, 6727 },
- { 0x2fcf, G_UNICODE_NOT_PRESENT_OFFSET, 6731 },
- { 0x2fd0, G_UNICODE_NOT_PRESENT_OFFSET, 6735 },
- { 0x2fd1, G_UNICODE_NOT_PRESENT_OFFSET, 6739 },
- { 0x2fd2, G_UNICODE_NOT_PRESENT_OFFSET, 6743 },
- { 0x2fd3, G_UNICODE_NOT_PRESENT_OFFSET, 6747 },
- { 0x2fd4, G_UNICODE_NOT_PRESENT_OFFSET, 6751 },
- { 0x2fd5, G_UNICODE_NOT_PRESENT_OFFSET, 6755 },
- { 0x3000, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
- { 0x3036, G_UNICODE_NOT_PRESENT_OFFSET, 6759 },
- { 0x3038, G_UNICODE_NOT_PRESENT_OFFSET, 5995 },
- { 0x3039, G_UNICODE_NOT_PRESENT_OFFSET, 6763 },
- { 0x303a, G_UNICODE_NOT_PRESENT_OFFSET, 6767 },
- { 0x304c, 6771, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x304e, 6778, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3050, 6785, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3052, 6792, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3054, 6799, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3056, 6806, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3058, 6813, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x305a, 6820, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x305c, 6827, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x305e, 6834, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3060, 6841, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3062, 6848, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3065, 6855, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3067, 6862, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3069, 6869, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3070, 6876, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3071, 6883, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3073, 6890, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3074, 6897, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3076, 6904, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3077, 6911, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3079, 6918, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x307a, 6925, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x307c, 6932, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x307d, 6939, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x3094, 6946, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x309b, G_UNICODE_NOT_PRESENT_OFFSET, 6953 },
- { 0x309c, G_UNICODE_NOT_PRESENT_OFFSET, 6958 },
- { 0x309e, 6963, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x309f, G_UNICODE_NOT_PRESENT_OFFSET, 6970 },
- { 0x30ac, 6977, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30ae, 6984, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30b0, 6991, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30b2, 6998, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30b4, 7005, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30b6, 7012, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30b8, 7019, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30ba, 7026, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30bc, 7033, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30be, 7040, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30c0, 7047, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30c2, 7054, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30c5, 7061, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30c7, 7068, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30c9, 7075, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30d0, 7082, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30d1, 7089, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30d3, 7096, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30d4, 7103, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30d6, 7110, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30d7, 7117, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30d9, 7124, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30da, 7131, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30dc, 7138, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30dd, 7145, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30f4, 7152, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30f7, 7159, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30f8, 7166, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30f9, 7173, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30fa, 7180, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30fe, 7187, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x30ff, G_UNICODE_NOT_PRESENT_OFFSET, 7194 },
- { 0x3131, G_UNICODE_NOT_PRESENT_OFFSET, 7201 },
- { 0x3132, G_UNICODE_NOT_PRESENT_OFFSET, 7205 },
- { 0x3133, G_UNICODE_NOT_PRESENT_OFFSET, 7209 },
- { 0x3134, G_UNICODE_NOT_PRESENT_OFFSET, 7213 },
- { 0x3135, G_UNICODE_NOT_PRESENT_OFFSET, 7217 },
- { 0x3136, G_UNICODE_NOT_PRESENT_OFFSET, 7221 },
- { 0x3137, G_UNICODE_NOT_PRESENT_OFFSET, 7225 },
- { 0x3138, G_UNICODE_NOT_PRESENT_OFFSET, 7229 },
- { 0x3139, G_UNICODE_NOT_PRESENT_OFFSET, 7233 },
- { 0x313a, G_UNICODE_NOT_PRESENT_OFFSET, 7237 },
- { 0x313b, G_UNICODE_NOT_PRESENT_OFFSET, 7241 },
- { 0x313c, G_UNICODE_NOT_PRESENT_OFFSET, 7245 },
- { 0x313d, G_UNICODE_NOT_PRESENT_OFFSET, 7249 },
- { 0x313e, G_UNICODE_NOT_PRESENT_OFFSET, 7253 },
- { 0x313f, G_UNICODE_NOT_PRESENT_OFFSET, 7257 },
- { 0x3140, G_UNICODE_NOT_PRESENT_OFFSET, 7261 },
- { 0x3141, G_UNICODE_NOT_PRESENT_OFFSET, 7265 },
- { 0x3142, G_UNICODE_NOT_PRESENT_OFFSET, 7269 },
- { 0x3143, G_UNICODE_NOT_PRESENT_OFFSET, 7273 },
- { 0x3144, G_UNICODE_NOT_PRESENT_OFFSET, 7277 },
- { 0x3145, G_UNICODE_NOT_PRESENT_OFFSET, 7281 },
- { 0x3146, G_UNICODE_NOT_PRESENT_OFFSET, 7285 },
- { 0x3147, G_UNICODE_NOT_PRESENT_OFFSET, 7289 },
- { 0x3148, G_UNICODE_NOT_PRESENT_OFFSET, 7293 },
- { 0x3149, G_UNICODE_NOT_PRESENT_OFFSET, 7297 },
- { 0x314a, G_UNICODE_NOT_PRESENT_OFFSET, 7301 },
- { 0x314b, G_UNICODE_NOT_PRESENT_OFFSET, 7305 },
- { 0x314c, G_UNICODE_NOT_PRESENT_OFFSET, 7309 },
- { 0x314d, G_UNICODE_NOT_PRESENT_OFFSET, 7313 },
- { 0x314e, G_UNICODE_NOT_PRESENT_OFFSET, 7317 },
- { 0x314f, G_UNICODE_NOT_PRESENT_OFFSET, 7321 },
- { 0x3150, G_UNICODE_NOT_PRESENT_OFFSET, 7325 },
- { 0x3151, G_UNICODE_NOT_PRESENT_OFFSET, 7329 },
- { 0x3152, G_UNICODE_NOT_PRESENT_OFFSET, 7333 },
- { 0x3153, G_UNICODE_NOT_PRESENT_OFFSET, 7337 },
- { 0x3154, G_UNICODE_NOT_PRESENT_OFFSET, 7341 },
- { 0x3155, G_UNICODE_NOT_PRESENT_OFFSET, 7345 },
- { 0x3156, G_UNICODE_NOT_PRESENT_OFFSET, 7349 },
- { 0x3157, G_UNICODE_NOT_PRESENT_OFFSET, 7353 },
- { 0x3158, G_UNICODE_NOT_PRESENT_OFFSET, 7357 },
- { 0x3159, G_UNICODE_NOT_PRESENT_OFFSET, 7361 },
- { 0x315a, G_UNICODE_NOT_PRESENT_OFFSET, 7365 },
- { 0x315b, G_UNICODE_NOT_PRESENT_OFFSET, 7369 },
- { 0x315c, G_UNICODE_NOT_PRESENT_OFFSET, 7373 },
- { 0x315d, G_UNICODE_NOT_PRESENT_OFFSET, 7377 },
- { 0x315e, G_UNICODE_NOT_PRESENT_OFFSET, 7381 },
- { 0x315f, G_UNICODE_NOT_PRESENT_OFFSET, 7385 },
- { 0x3160, G_UNICODE_NOT_PRESENT_OFFSET, 7389 },
- { 0x3161, G_UNICODE_NOT_PRESENT_OFFSET, 7393 },
- { 0x3162, G_UNICODE_NOT_PRESENT_OFFSET, 7397 },
- { 0x3163, G_UNICODE_NOT_PRESENT_OFFSET, 7401 },
- { 0x3164, G_UNICODE_NOT_PRESENT_OFFSET, 7405 },
- { 0x3165, G_UNICODE_NOT_PRESENT_OFFSET, 7409 },
- { 0x3166, G_UNICODE_NOT_PRESENT_OFFSET, 7413 },
- { 0x3167, G_UNICODE_NOT_PRESENT_OFFSET, 7417 },
- { 0x3168, G_UNICODE_NOT_PRESENT_OFFSET, 7421 },
- { 0x3169, G_UNICODE_NOT_PRESENT_OFFSET, 7425 },
- { 0x316a, G_UNICODE_NOT_PRESENT_OFFSET, 7429 },
- { 0x316b, G_UNICODE_NOT_PRESENT_OFFSET, 7433 },
- { 0x316c, G_UNICODE_NOT_PRESENT_OFFSET, 7437 },
- { 0x316d, G_UNICODE_NOT_PRESENT_OFFSET, 7441 },
- { 0x316e, G_UNICODE_NOT_PRESENT_OFFSET, 7445 },
- { 0x316f, G_UNICODE_NOT_PRESENT_OFFSET, 7449 },
- { 0x3170, G_UNICODE_NOT_PRESENT_OFFSET, 7453 },
- { 0x3171, G_UNICODE_NOT_PRESENT_OFFSET, 7457 },
- { 0x3172, G_UNICODE_NOT_PRESENT_OFFSET, 7461 },
- { 0x3173, G_UNICODE_NOT_PRESENT_OFFSET, 7465 },
- { 0x3174, G_UNICODE_NOT_PRESENT_OFFSET, 7469 },
- { 0x3175, G_UNICODE_NOT_PRESENT_OFFSET, 7473 },
- { 0x3176, G_UNICODE_NOT_PRESENT_OFFSET, 7477 },
- { 0x3177, G_UNICODE_NOT_PRESENT_OFFSET, 7481 },
- { 0x3178, G_UNICODE_NOT_PRESENT_OFFSET, 7485 },
- { 0x3179, G_UNICODE_NOT_PRESENT_OFFSET, 7489 },
- { 0x317a, G_UNICODE_NOT_PRESENT_OFFSET, 7493 },
- { 0x317b, G_UNICODE_NOT_PRESENT_OFFSET, 7497 },
- { 0x317c, G_UNICODE_NOT_PRESENT_OFFSET, 7501 },
- { 0x317d, G_UNICODE_NOT_PRESENT_OFFSET, 7505 },
- { 0x317e, G_UNICODE_NOT_PRESENT_OFFSET, 7509 },
- { 0x317f, G_UNICODE_NOT_PRESENT_OFFSET, 7513 },
- { 0x3180, G_UNICODE_NOT_PRESENT_OFFSET, 7517 },
- { 0x3181, G_UNICODE_NOT_PRESENT_OFFSET, 7521 },
- { 0x3182, G_UNICODE_NOT_PRESENT_OFFSET, 7525 },
- { 0x3183, G_UNICODE_NOT_PRESENT_OFFSET, 7529 },
- { 0x3184, G_UNICODE_NOT_PRESENT_OFFSET, 7533 },
- { 0x3185, G_UNICODE_NOT_PRESENT_OFFSET, 7537 },
- { 0x3186, G_UNICODE_NOT_PRESENT_OFFSET, 7541 },
- { 0x3187, G_UNICODE_NOT_PRESENT_OFFSET, 7545 },
- { 0x3188, G_UNICODE_NOT_PRESENT_OFFSET, 7549 },
- { 0x3189, G_UNICODE_NOT_PRESENT_OFFSET, 7553 },
- { 0x318a, G_UNICODE_NOT_PRESENT_OFFSET, 7557 },
- { 0x318b, G_UNICODE_NOT_PRESENT_OFFSET, 7561 },
- { 0x318c, G_UNICODE_NOT_PRESENT_OFFSET, 7565 },
- { 0x318d, G_UNICODE_NOT_PRESENT_OFFSET, 7569 },
- { 0x318e, G_UNICODE_NOT_PRESENT_OFFSET, 7573 },
- { 0x3192, G_UNICODE_NOT_PRESENT_OFFSET, 5903 },
- { 0x3193, G_UNICODE_NOT_PRESENT_OFFSET, 5927 },
- { 0x3194, G_UNICODE_NOT_PRESENT_OFFSET, 7577 },
- { 0x3195, G_UNICODE_NOT_PRESENT_OFFSET, 7581 },
- { 0x3196, G_UNICODE_NOT_PRESENT_OFFSET, 7585 },
- { 0x3197, G_UNICODE_NOT_PRESENT_OFFSET, 7589 },
- { 0x3198, G_UNICODE_NOT_PRESENT_OFFSET, 7593 },
- { 0x3199, G_UNICODE_NOT_PRESENT_OFFSET, 7597 },
- { 0x319a, G_UNICODE_NOT_PRESENT_OFFSET, 5919 },
- { 0x319b, G_UNICODE_NOT_PRESENT_OFFSET, 7601 },
- { 0x319c, G_UNICODE_NOT_PRESENT_OFFSET, 7605 },
- { 0x319d, G_UNICODE_NOT_PRESENT_OFFSET, 7609 },
- { 0x319e, G_UNICODE_NOT_PRESENT_OFFSET, 7613 },
- { 0x319f, G_UNICODE_NOT_PRESENT_OFFSET, 5935 },
- { 0x3200, G_UNICODE_NOT_PRESENT_OFFSET, 7617 },
- { 0x3201, G_UNICODE_NOT_PRESENT_OFFSET, 7623 },
- { 0x3202, G_UNICODE_NOT_PRESENT_OFFSET, 7629 },
- { 0x3203, G_UNICODE_NOT_PRESENT_OFFSET, 7635 },
- { 0x3204, G_UNICODE_NOT_PRESENT_OFFSET, 7641 },
- { 0x3205, G_UNICODE_NOT_PRESENT_OFFSET, 7647 },
- { 0x3206, G_UNICODE_NOT_PRESENT_OFFSET, 7653 },
- { 0x3207, G_UNICODE_NOT_PRESENT_OFFSET, 7659 },
- { 0x3208, G_UNICODE_NOT_PRESENT_OFFSET, 7665 },
- { 0x3209, G_UNICODE_NOT_PRESENT_OFFSET, 7671 },
- { 0x320a, G_UNICODE_NOT_PRESENT_OFFSET, 7677 },
- { 0x320b, G_UNICODE_NOT_PRESENT_OFFSET, 7683 },
- { 0x320c, G_UNICODE_NOT_PRESENT_OFFSET, 7689 },
- { 0x320d, G_UNICODE_NOT_PRESENT_OFFSET, 7695 },
- { 0x320e, G_UNICODE_NOT_PRESENT_OFFSET, 7701 },
- { 0x320f, G_UNICODE_NOT_PRESENT_OFFSET, 7710 },
- { 0x3210, G_UNICODE_NOT_PRESENT_OFFSET, 7719 },
- { 0x3211, G_UNICODE_NOT_PRESENT_OFFSET, 7728 },
- { 0x3212, G_UNICODE_NOT_PRESENT_OFFSET, 7737 },
- { 0x3213, G_UNICODE_NOT_PRESENT_OFFSET, 7746 },
- { 0x3214, G_UNICODE_NOT_PRESENT_OFFSET, 7755 },
- { 0x3215, G_UNICODE_NOT_PRESENT_OFFSET, 7764 },
- { 0x3216, G_UNICODE_NOT_PRESENT_OFFSET, 7773 },
- { 0x3217, G_UNICODE_NOT_PRESENT_OFFSET, 7782 },
- { 0x3218, G_UNICODE_NOT_PRESENT_OFFSET, 7791 },
- { 0x3219, G_UNICODE_NOT_PRESENT_OFFSET, 7800 },
- { 0x321a, G_UNICODE_NOT_PRESENT_OFFSET, 7809 },
- { 0x321b, G_UNICODE_NOT_PRESENT_OFFSET, 7818 },
- { 0x321c, G_UNICODE_NOT_PRESENT_OFFSET, 7827 },
- { 0x3220, G_UNICODE_NOT_PRESENT_OFFSET, 7836 },
- { 0x3221, G_UNICODE_NOT_PRESENT_OFFSET, 7842 },
- { 0x3222, G_UNICODE_NOT_PRESENT_OFFSET, 7848 },
- { 0x3223, G_UNICODE_NOT_PRESENT_OFFSET, 7854 },
- { 0x3224, G_UNICODE_NOT_PRESENT_OFFSET, 7860 },
- { 0x3225, G_UNICODE_NOT_PRESENT_OFFSET, 7866 },
- { 0x3226, G_UNICODE_NOT_PRESENT_OFFSET, 7872 },
- { 0x3227, G_UNICODE_NOT_PRESENT_OFFSET, 7878 },
- { 0x3228, G_UNICODE_NOT_PRESENT_OFFSET, 7884 },
- { 0x3229, G_UNICODE_NOT_PRESENT_OFFSET, 7890 },
- { 0x322a, G_UNICODE_NOT_PRESENT_OFFSET, 7896 },
- { 0x322b, G_UNICODE_NOT_PRESENT_OFFSET, 7902 },
- { 0x322c, G_UNICODE_NOT_PRESENT_OFFSET, 7908 },
- { 0x322d, G_UNICODE_NOT_PRESENT_OFFSET, 7914 },
- { 0x322e, G_UNICODE_NOT_PRESENT_OFFSET, 7920 },
- { 0x322f, G_UNICODE_NOT_PRESENT_OFFSET, 7926 },
- { 0x3230, G_UNICODE_NOT_PRESENT_OFFSET, 7932 },
- { 0x3231, G_UNICODE_NOT_PRESENT_OFFSET, 7938 },
- { 0x3232, G_UNICODE_NOT_PRESENT_OFFSET, 7944 },
- { 0x3233, G_UNICODE_NOT_PRESENT_OFFSET, 7950 },
- { 0x3234, G_UNICODE_NOT_PRESENT_OFFSET, 7956 },
- { 0x3235, G_UNICODE_NOT_PRESENT_OFFSET, 7962 },
- { 0x3236, G_UNICODE_NOT_PRESENT_OFFSET, 7968 },
- { 0x3237, G_UNICODE_NOT_PRESENT_OFFSET, 7974 },
- { 0x3238, G_UNICODE_NOT_PRESENT_OFFSET, 7980 },
- { 0x3239, G_UNICODE_NOT_PRESENT_OFFSET, 7986 },
- { 0x323a, G_UNICODE_NOT_PRESENT_OFFSET, 7992 },
- { 0x323b, G_UNICODE_NOT_PRESENT_OFFSET, 7998 },
- { 0x323c, G_UNICODE_NOT_PRESENT_OFFSET, 8004 },
- { 0x323d, G_UNICODE_NOT_PRESENT_OFFSET, 8010 },
- { 0x323e, G_UNICODE_NOT_PRESENT_OFFSET, 8016 },
- { 0x323f, G_UNICODE_NOT_PRESENT_OFFSET, 8022 },
- { 0x3240, G_UNICODE_NOT_PRESENT_OFFSET, 8028 },
- { 0x3241, G_UNICODE_NOT_PRESENT_OFFSET, 8034 },
- { 0x3242, G_UNICODE_NOT_PRESENT_OFFSET, 8040 },
- { 0x3243, G_UNICODE_NOT_PRESENT_OFFSET, 8046 },
- { 0x3251, G_UNICODE_NOT_PRESENT_OFFSET, 8052 },
- { 0x3252, G_UNICODE_NOT_PRESENT_OFFSET, 8055 },
- { 0x3253, G_UNICODE_NOT_PRESENT_OFFSET, 8058 },
- { 0x3254, G_UNICODE_NOT_PRESENT_OFFSET, 8061 },
- { 0x3255, G_UNICODE_NOT_PRESENT_OFFSET, 8064 },
- { 0x3256, G_UNICODE_NOT_PRESENT_OFFSET, 8067 },
- { 0x3257, G_UNICODE_NOT_PRESENT_OFFSET, 8070 },
- { 0x3258, G_UNICODE_NOT_PRESENT_OFFSET, 8073 },
- { 0x3259, G_UNICODE_NOT_PRESENT_OFFSET, 8076 },
- { 0x325a, G_UNICODE_NOT_PRESENT_OFFSET, 8079 },
- { 0x325b, G_UNICODE_NOT_PRESENT_OFFSET, 8082 },
- { 0x325c, G_UNICODE_NOT_PRESENT_OFFSET, 8085 },
- { 0x325d, G_UNICODE_NOT_PRESENT_OFFSET, 8088 },
- { 0x325e, G_UNICODE_NOT_PRESENT_OFFSET, 8091 },
- { 0x325f, G_UNICODE_NOT_PRESENT_OFFSET, 8094 },
- { 0x3260, G_UNICODE_NOT_PRESENT_OFFSET, 7201 },
- { 0x3261, G_UNICODE_NOT_PRESENT_OFFSET, 7213 },
- { 0x3262, G_UNICODE_NOT_PRESENT_OFFSET, 7225 },
- { 0x3263, G_UNICODE_NOT_PRESENT_OFFSET, 7233 },
- { 0x3264, G_UNICODE_NOT_PRESENT_OFFSET, 7265 },
- { 0x3265, G_UNICODE_NOT_PRESENT_OFFSET, 7269 },
- { 0x3266, G_UNICODE_NOT_PRESENT_OFFSET, 7281 },
- { 0x3267, G_UNICODE_NOT_PRESENT_OFFSET, 7289 },
- { 0x3268, G_UNICODE_NOT_PRESENT_OFFSET, 7293 },
- { 0x3269, G_UNICODE_NOT_PRESENT_OFFSET, 7301 },
- { 0x326a, G_UNICODE_NOT_PRESENT_OFFSET, 7305 },
- { 0x326b, G_UNICODE_NOT_PRESENT_OFFSET, 7309 },
- { 0x326c, G_UNICODE_NOT_PRESENT_OFFSET, 7313 },
- { 0x326d, G_UNICODE_NOT_PRESENT_OFFSET, 7317 },
- { 0x326e, G_UNICODE_NOT_PRESENT_OFFSET, 8097 },
- { 0x326f, G_UNICODE_NOT_PRESENT_OFFSET, 8104 },
- { 0x3270, G_UNICODE_NOT_PRESENT_OFFSET, 8111 },
- { 0x3271, G_UNICODE_NOT_PRESENT_OFFSET, 8118 },
- { 0x3272, G_UNICODE_NOT_PRESENT_OFFSET, 8125 },
- { 0x3273, G_UNICODE_NOT_PRESENT_OFFSET, 8132 },
- { 0x3274, G_UNICODE_NOT_PRESENT_OFFSET, 8139 },
- { 0x3275, G_UNICODE_NOT_PRESENT_OFFSET, 8146 },
- { 0x3276, G_UNICODE_NOT_PRESENT_OFFSET, 8153 },
- { 0x3277, G_UNICODE_NOT_PRESENT_OFFSET, 8160 },
- { 0x3278, G_UNICODE_NOT_PRESENT_OFFSET, 8167 },
- { 0x3279, G_UNICODE_NOT_PRESENT_OFFSET, 8174 },
- { 0x327a, G_UNICODE_NOT_PRESENT_OFFSET, 8181 },
- { 0x327b, G_UNICODE_NOT_PRESENT_OFFSET, 8188 },
- { 0x3280, G_UNICODE_NOT_PRESENT_OFFSET, 5903 },
- { 0x3281, G_UNICODE_NOT_PRESENT_OFFSET, 5927 },
- { 0x3282, G_UNICODE_NOT_PRESENT_OFFSET, 7577 },
- { 0x3283, G_UNICODE_NOT_PRESENT_OFFSET, 7581 },
- { 0x3284, G_UNICODE_NOT_PRESENT_OFFSET, 8195 },
- { 0x3285, G_UNICODE_NOT_PRESENT_OFFSET, 8199 },
- { 0x3286, G_UNICODE_NOT_PRESENT_OFFSET, 8203 },
- { 0x3287, G_UNICODE_NOT_PRESENT_OFFSET, 5947 },
- { 0x3288, G_UNICODE_NOT_PRESENT_OFFSET, 8207 },
- { 0x3289, G_UNICODE_NOT_PRESENT_OFFSET, 5995 },
- { 0x328a, G_UNICODE_NOT_PRESENT_OFFSET, 6195 },
- { 0x328b, G_UNICODE_NOT_PRESENT_OFFSET, 6243 },
- { 0x328c, G_UNICODE_NOT_PRESENT_OFFSET, 6239 },
- { 0x328d, G_UNICODE_NOT_PRESENT_OFFSET, 6199 },
- { 0x328e, G_UNICODE_NOT_PRESENT_OFFSET, 6567 },
- { 0x328f, G_UNICODE_NOT_PRESENT_OFFSET, 6027 },
- { 0x3290, G_UNICODE_NOT_PRESENT_OFFSET, 6187 },
- { 0x3291, G_UNICODE_NOT_PRESENT_OFFSET, 8211 },
- { 0x3292, G_UNICODE_NOT_PRESENT_OFFSET, 8215 },
- { 0x3293, G_UNICODE_NOT_PRESENT_OFFSET, 8219 },
- { 0x3294, G_UNICODE_NOT_PRESENT_OFFSET, 8223 },
- { 0x3295, G_UNICODE_NOT_PRESENT_OFFSET, 8227 },
- { 0x3296, G_UNICODE_NOT_PRESENT_OFFSET, 8231 },
- { 0x3297, G_UNICODE_NOT_PRESENT_OFFSET, 8235 },
- { 0x3298, G_UNICODE_NOT_PRESENT_OFFSET, 8239 },
- { 0x3299, G_UNICODE_NOT_PRESENT_OFFSET, 8243 },
- { 0x329a, G_UNICODE_NOT_PRESENT_OFFSET, 8247 },
- { 0x329b, G_UNICODE_NOT_PRESENT_OFFSET, 6051 },
- { 0x329c, G_UNICODE_NOT_PRESENT_OFFSET, 8251 },
- { 0x329d, G_UNICODE_NOT_PRESENT_OFFSET, 8255 },
- { 0x329e, G_UNICODE_NOT_PRESENT_OFFSET, 8259 },
- { 0x329f, G_UNICODE_NOT_PRESENT_OFFSET, 8263 },
- { 0x32a0, G_UNICODE_NOT_PRESENT_OFFSET, 8267 },
- { 0x32a1, G_UNICODE_NOT_PRESENT_OFFSET, 8271 },
- { 0x32a2, G_UNICODE_NOT_PRESENT_OFFSET, 8275 },
- { 0x32a3, G_UNICODE_NOT_PRESENT_OFFSET, 8279 },
- { 0x32a4, G_UNICODE_NOT_PRESENT_OFFSET, 7585 },
- { 0x32a5, G_UNICODE_NOT_PRESENT_OFFSET, 7589 },
- { 0x32a6, G_UNICODE_NOT_PRESENT_OFFSET, 7593 },
- { 0x32a7, G_UNICODE_NOT_PRESENT_OFFSET, 8283 },
- { 0x32a8, G_UNICODE_NOT_PRESENT_OFFSET, 8287 },
- { 0x32a9, G_UNICODE_NOT_PRESENT_OFFSET, 8291 },
- { 0x32aa, G_UNICODE_NOT_PRESENT_OFFSET, 8295 },
- { 0x32ab, G_UNICODE_NOT_PRESENT_OFFSET, 8299 },
- { 0x32ac, G_UNICODE_NOT_PRESENT_OFFSET, 8303 },
- { 0x32ad, G_UNICODE_NOT_PRESENT_OFFSET, 8307 },
- { 0x32ae, G_UNICODE_NOT_PRESENT_OFFSET, 8311 },
- { 0x32af, G_UNICODE_NOT_PRESENT_OFFSET, 8315 },
- { 0x32b0, G_UNICODE_NOT_PRESENT_OFFSET, 8319 },
- { 0x32b1, G_UNICODE_NOT_PRESENT_OFFSET, 8323 },
- { 0x32b2, G_UNICODE_NOT_PRESENT_OFFSET, 8326 },
- { 0x32b3, G_UNICODE_NOT_PRESENT_OFFSET, 8329 },
- { 0x32b4, G_UNICODE_NOT_PRESENT_OFFSET, 8332 },
- { 0x32b5, G_UNICODE_NOT_PRESENT_OFFSET, 8335 },
- { 0x32b6, G_UNICODE_NOT_PRESENT_OFFSET, 8338 },
- { 0x32b7, G_UNICODE_NOT_PRESENT_OFFSET, 8341 },
- { 0x32b8, G_UNICODE_NOT_PRESENT_OFFSET, 8344 },
- { 0x32b9, G_UNICODE_NOT_PRESENT_OFFSET, 8347 },
- { 0x32ba, G_UNICODE_NOT_PRESENT_OFFSET, 8350 },
- { 0x32bb, G_UNICODE_NOT_PRESENT_OFFSET, 8353 },
- { 0x32bc, G_UNICODE_NOT_PRESENT_OFFSET, 8356 },
- { 0x32bd, G_UNICODE_NOT_PRESENT_OFFSET, 8359 },
- { 0x32be, G_UNICODE_NOT_PRESENT_OFFSET, 8362 },
- { 0x32bf, G_UNICODE_NOT_PRESENT_OFFSET, 8365 },
- { 0x32c0, G_UNICODE_NOT_PRESENT_OFFSET, 8368 },
- { 0x32c1, G_UNICODE_NOT_PRESENT_OFFSET, 8373 },
- { 0x32c2, G_UNICODE_NOT_PRESENT_OFFSET, 8378 },
- { 0x32c3, G_UNICODE_NOT_PRESENT_OFFSET, 8383 },
- { 0x32c4, G_UNICODE_NOT_PRESENT_OFFSET, 8388 },
- { 0x32c5, G_UNICODE_NOT_PRESENT_OFFSET, 8393 },
- { 0x32c6, G_UNICODE_NOT_PRESENT_OFFSET, 8398 },
- { 0x32c7, G_UNICODE_NOT_PRESENT_OFFSET, 8403 },
- { 0x32c8, G_UNICODE_NOT_PRESENT_OFFSET, 8408 },
- { 0x32c9, G_UNICODE_NOT_PRESENT_OFFSET, 8413 },
- { 0x32ca, G_UNICODE_NOT_PRESENT_OFFSET, 8419 },
- { 0x32cb, G_UNICODE_NOT_PRESENT_OFFSET, 8425 },
- { 0x32d0, G_UNICODE_NOT_PRESENT_OFFSET, 8431 },
- { 0x32d1, G_UNICODE_NOT_PRESENT_OFFSET, 8435 },
- { 0x32d2, G_UNICODE_NOT_PRESENT_OFFSET, 8439 },
- { 0x32d3, G_UNICODE_NOT_PRESENT_OFFSET, 8443 },
- { 0x32d4, G_UNICODE_NOT_PRESENT_OFFSET, 8447 },
- { 0x32d5, G_UNICODE_NOT_PRESENT_OFFSET, 8451 },
- { 0x32d6, G_UNICODE_NOT_PRESENT_OFFSET, 8455 },
- { 0x32d7, G_UNICODE_NOT_PRESENT_OFFSET, 8459 },
- { 0x32d8, G_UNICODE_NOT_PRESENT_OFFSET, 8463 },
- { 0x32d9, G_UNICODE_NOT_PRESENT_OFFSET, 8467 },
- { 0x32da, G_UNICODE_NOT_PRESENT_OFFSET, 8471 },
- { 0x32db, G_UNICODE_NOT_PRESENT_OFFSET, 8475 },
- { 0x32dc, G_UNICODE_NOT_PRESENT_OFFSET, 8479 },
- { 0x32dd, G_UNICODE_NOT_PRESENT_OFFSET, 8483 },
- { 0x32de, G_UNICODE_NOT_PRESENT_OFFSET, 8487 },
- { 0x32df, G_UNICODE_NOT_PRESENT_OFFSET, 8491 },
- { 0x32e0, G_UNICODE_NOT_PRESENT_OFFSET, 8495 },
- { 0x32e1, G_UNICODE_NOT_PRESENT_OFFSET, 8499 },
- { 0x32e2, G_UNICODE_NOT_PRESENT_OFFSET, 8503 },
- { 0x32e3, G_UNICODE_NOT_PRESENT_OFFSET, 8507 },
- { 0x32e4, G_UNICODE_NOT_PRESENT_OFFSET, 8511 },
- { 0x32e5, G_UNICODE_NOT_PRESENT_OFFSET, 8515 },
- { 0x32e6, G_UNICODE_NOT_PRESENT_OFFSET, 8519 },
- { 0x32e7, G_UNICODE_NOT_PRESENT_OFFSET, 8523 },
- { 0x32e8, G_UNICODE_NOT_PRESENT_OFFSET, 8527 },
- { 0x32e9, G_UNICODE_NOT_PRESENT_OFFSET, 8531 },
- { 0x32ea, G_UNICODE_NOT_PRESENT_OFFSET, 8535 },
- { 0x32eb, G_UNICODE_NOT_PRESENT_OFFSET, 8539 },
- { 0x32ec, G_UNICODE_NOT_PRESENT_OFFSET, 8543 },
- { 0x32ed, G_UNICODE_NOT_PRESENT_OFFSET, 8547 },
- { 0x32ee, G_UNICODE_NOT_PRESENT_OFFSET, 8551 },
- { 0x32ef, G_UNICODE_NOT_PRESENT_OFFSET, 8555 },
- { 0x32f0, G_UNICODE_NOT_PRESENT_OFFSET, 8559 },
- { 0x32f1, G_UNICODE_NOT_PRESENT_OFFSET, 8563 },
- { 0x32f2, G_UNICODE_NOT_PRESENT_OFFSET, 8567 },
- { 0x32f3, G_UNICODE_NOT_PRESENT_OFFSET, 8571 },
- { 0x32f4, G_UNICODE_NOT_PRESENT_OFFSET, 8575 },
- { 0x32f5, G_UNICODE_NOT_PRESENT_OFFSET, 8579 },
- { 0x32f6, G_UNICODE_NOT_PRESENT_OFFSET, 8583 },
- { 0x32f7, G_UNICODE_NOT_PRESENT_OFFSET, 8587 },
- { 0x32f8, G_UNICODE_NOT_PRESENT_OFFSET, 8591 },
- { 0x32f9, G_UNICODE_NOT_PRESENT_OFFSET, 8595 },
- { 0x32fa, G_UNICODE_NOT_PRESENT_OFFSET, 8599 },
- { 0x32fb, G_UNICODE_NOT_PRESENT_OFFSET, 8603 },
- { 0x32fc, G_UNICODE_NOT_PRESENT_OFFSET, 8607 },
- { 0x32fd, G_UNICODE_NOT_PRESENT_OFFSET, 8611 },
- { 0x32fe, G_UNICODE_NOT_PRESENT_OFFSET, 8615 },
- { 0x3300, G_UNICODE_NOT_PRESENT_OFFSET, 8619 },
- { 0x3301, G_UNICODE_NOT_PRESENT_OFFSET, 8635 },
- { 0x3302, G_UNICODE_NOT_PRESENT_OFFSET, 8648 },
- { 0x3303, G_UNICODE_NOT_PRESENT_OFFSET, 8664 },
- { 0x3304, G_UNICODE_NOT_PRESENT_OFFSET, 8674 },
- { 0x3305, G_UNICODE_NOT_PRESENT_OFFSET, 8690 },
- { 0x3306, G_UNICODE_NOT_PRESENT_OFFSET, 8700 },
- { 0x3307, G_UNICODE_NOT_PRESENT_OFFSET, 8710 },
- { 0x3308, G_UNICODE_NOT_PRESENT_OFFSET, 8729 },
- { 0x3309, G_UNICODE_NOT_PRESENT_OFFSET, 8742 },
- { 0x330a, G_UNICODE_NOT_PRESENT_OFFSET, 8752 },
- { 0x330b, G_UNICODE_NOT_PRESENT_OFFSET, 8762 },
- { 0x330c, G_UNICODE_NOT_PRESENT_OFFSET, 8772 },
- { 0x330d, G_UNICODE_NOT_PRESENT_OFFSET, 8785 },
- { 0x330e, G_UNICODE_NOT_PRESENT_OFFSET, 8798 },
- { 0x330f, G_UNICODE_NOT_PRESENT_OFFSET, 8811 },
- { 0x3310, G_UNICODE_NOT_PRESENT_OFFSET, 8824 },
- { 0x3311, G_UNICODE_NOT_PRESENT_OFFSET, 8837 },
- { 0x3312, G_UNICODE_NOT_PRESENT_OFFSET, 8850 },
- { 0x3313, G_UNICODE_NOT_PRESENT_OFFSET, 8863 },
- { 0x3314, G_UNICODE_NOT_PRESENT_OFFSET, 8882 },
- { 0x3315, G_UNICODE_NOT_PRESENT_OFFSET, 8889 },
- { 0x3316, G_UNICODE_NOT_PRESENT_OFFSET, 8908 },
- { 0x3317, G_UNICODE_NOT_PRESENT_OFFSET, 8927 },
- { 0x3318, G_UNICODE_NOT_PRESENT_OFFSET, 8943 },
- { 0x3319, G_UNICODE_NOT_PRESENT_OFFSET, 8956 },
- { 0x331a, G_UNICODE_NOT_PRESENT_OFFSET, 8975 },
- { 0x331b, G_UNICODE_NOT_PRESENT_OFFSET, 8994 },
- { 0x331c, G_UNICODE_NOT_PRESENT_OFFSET, 9007 },
- { 0x331d, G_UNICODE_NOT_PRESENT_OFFSET, 9017 },
- { 0x331e, G_UNICODE_NOT_PRESENT_OFFSET, 9027 },
- { 0x331f, G_UNICODE_NOT_PRESENT_OFFSET, 9040 },
- { 0x3320, G_UNICODE_NOT_PRESENT_OFFSET, 9053 },
- { 0x3321, G_UNICODE_NOT_PRESENT_OFFSET, 9069 },
- { 0x3322, G_UNICODE_NOT_PRESENT_OFFSET, 9085 },
- { 0x3323, G_UNICODE_NOT_PRESENT_OFFSET, 9095 },
- { 0x3324, G_UNICODE_NOT_PRESENT_OFFSET, 9105 },
- { 0x3325, G_UNICODE_NOT_PRESENT_OFFSET, 9118 },
- { 0x3326, G_UNICODE_NOT_PRESENT_OFFSET, 9128 },
- { 0x3327, G_UNICODE_NOT_PRESENT_OFFSET, 9138 },
- { 0x3328, G_UNICODE_NOT_PRESENT_OFFSET, 9145 },
- { 0x3329, G_UNICODE_NOT_PRESENT_OFFSET, 9152 },
- { 0x332a, G_UNICODE_NOT_PRESENT_OFFSET, 9162 },
- { 0x332b, G_UNICODE_NOT_PRESENT_OFFSET, 9172 },
- { 0x332c, G_UNICODE_NOT_PRESENT_OFFSET, 9191 },
- { 0x332d, G_UNICODE_NOT_PRESENT_OFFSET, 9204 },
- { 0x332e, G_UNICODE_NOT_PRESENT_OFFSET, 9220 },
- { 0x332f, G_UNICODE_NOT_PRESENT_OFFSET, 9239 },
- { 0x3330, G_UNICODE_NOT_PRESENT_OFFSET, 9252 },
- { 0x3331, G_UNICODE_NOT_PRESENT_OFFSET, 9262 },
- { 0x3332, G_UNICODE_NOT_PRESENT_OFFSET, 9272 },
- { 0x3333, G_UNICODE_NOT_PRESENT_OFFSET, 9291 },
- { 0x3334, G_UNICODE_NOT_PRESENT_OFFSET, 9304 },
- { 0x3335, G_UNICODE_NOT_PRESENT_OFFSET, 9323 },
- { 0x3336, G_UNICODE_NOT_PRESENT_OFFSET, 9333 },
- { 0x3337, G_UNICODE_NOT_PRESENT_OFFSET, 9349 },
- { 0x3338, G_UNICODE_NOT_PRESENT_OFFSET, 9359 },
- { 0x3339, G_UNICODE_NOT_PRESENT_OFFSET, 9372 },
- { 0x333a, G_UNICODE_NOT_PRESENT_OFFSET, 9382 },
- { 0x333b, G_UNICODE_NOT_PRESENT_OFFSET, 9395 },
- { 0x333c, G_UNICODE_NOT_PRESENT_OFFSET, 9411 },
- { 0x333d, G_UNICODE_NOT_PRESENT_OFFSET, 9424 },
- { 0x333e, G_UNICODE_NOT_PRESENT_OFFSET, 9440 },
- { 0x333f, G_UNICODE_NOT_PRESENT_OFFSET, 9453 },
- { 0x3340, G_UNICODE_NOT_PRESENT_OFFSET, 9460 },
- { 0x3341, G_UNICODE_NOT_PRESENT_OFFSET, 9476 },
- { 0x3342, G_UNICODE_NOT_PRESENT_OFFSET, 9486 },
- { 0x3343, G_UNICODE_NOT_PRESENT_OFFSET, 9496 },
- { 0x3344, G_UNICODE_NOT_PRESENT_OFFSET, 9509 },
- { 0x3345, G_UNICODE_NOT_PRESENT_OFFSET, 9519 },
- { 0x3346, G_UNICODE_NOT_PRESENT_OFFSET, 9529 },
- { 0x3347, G_UNICODE_NOT_PRESENT_OFFSET, 9539 },
- { 0x3348, G_UNICODE_NOT_PRESENT_OFFSET, 9555 },
- { 0x3349, G_UNICODE_NOT_PRESENT_OFFSET, 9568 },
- { 0x334a, G_UNICODE_NOT_PRESENT_OFFSET, 9575 },
- { 0x334b, G_UNICODE_NOT_PRESENT_OFFSET, 9594 },
- { 0x334c, G_UNICODE_NOT_PRESENT_OFFSET, 9604 },
- { 0x334d, G_UNICODE_NOT_PRESENT_OFFSET, 9620 },
- { 0x334e, G_UNICODE_NOT_PRESENT_OFFSET, 9633 },
- { 0x334f, G_UNICODE_NOT_PRESENT_OFFSET, 9646 },
- { 0x3350, G_UNICODE_NOT_PRESENT_OFFSET, 9656 },
- { 0x3351, G_UNICODE_NOT_PRESENT_OFFSET, 9666 },
- { 0x3352, G_UNICODE_NOT_PRESENT_OFFSET, 9679 },
- { 0x3353, G_UNICODE_NOT_PRESENT_OFFSET, 9686 },
- { 0x3354, G_UNICODE_NOT_PRESENT_OFFSET, 9699 },
- { 0x3355, G_UNICODE_NOT_PRESENT_OFFSET, 9715 },
- { 0x3356, G_UNICODE_NOT_PRESENT_OFFSET, 9722 },
- { 0x3357, G_UNICODE_NOT_PRESENT_OFFSET, 9741 },
- { 0x3358, G_UNICODE_NOT_PRESENT_OFFSET, 9751 },
- { 0x3359, G_UNICODE_NOT_PRESENT_OFFSET, 9756 },
- { 0x335a, G_UNICODE_NOT_PRESENT_OFFSET, 9761 },
- { 0x335b, G_UNICODE_NOT_PRESENT_OFFSET, 9766 },
- { 0x335c, G_UNICODE_NOT_PRESENT_OFFSET, 9771 },
- { 0x335d, G_UNICODE_NOT_PRESENT_OFFSET, 9776 },
- { 0x335e, G_UNICODE_NOT_PRESENT_OFFSET, 9781 },
- { 0x335f, G_UNICODE_NOT_PRESENT_OFFSET, 9786 },
- { 0x3360, G_UNICODE_NOT_PRESENT_OFFSET, 9791 },
- { 0x3361, G_UNICODE_NOT_PRESENT_OFFSET, 9796 },
- { 0x3362, G_UNICODE_NOT_PRESENT_OFFSET, 9801 },
- { 0x3363, G_UNICODE_NOT_PRESENT_OFFSET, 9807 },
- { 0x3364, G_UNICODE_NOT_PRESENT_OFFSET, 9813 },
- { 0x3365, G_UNICODE_NOT_PRESENT_OFFSET, 9819 },
- { 0x3366, G_UNICODE_NOT_PRESENT_OFFSET, 9825 },
- { 0x3367, G_UNICODE_NOT_PRESENT_OFFSET, 9831 },
- { 0x3368, G_UNICODE_NOT_PRESENT_OFFSET, 9837 },
- { 0x3369, G_UNICODE_NOT_PRESENT_OFFSET, 9843 },
- { 0x336a, G_UNICODE_NOT_PRESENT_OFFSET, 9849 },
- { 0x336b, G_UNICODE_NOT_PRESENT_OFFSET, 9855 },
- { 0x336c, G_UNICODE_NOT_PRESENT_OFFSET, 9861 },
- { 0x336d, G_UNICODE_NOT_PRESENT_OFFSET, 9867 },
- { 0x336e, G_UNICODE_NOT_PRESENT_OFFSET, 9873 },
- { 0x336f, G_UNICODE_NOT_PRESENT_OFFSET, 9879 },
- { 0x3370, G_UNICODE_NOT_PRESENT_OFFSET, 9885 },
- { 0x3371, G_UNICODE_NOT_PRESENT_OFFSET, 9891 },
- { 0x3372, G_UNICODE_NOT_PRESENT_OFFSET, 9895 },
- { 0x3373, G_UNICODE_NOT_PRESENT_OFFSET, 9898 },
- { 0x3374, G_UNICODE_NOT_PRESENT_OFFSET, 9901 },
- { 0x3375, G_UNICODE_NOT_PRESENT_OFFSET, 9905 },
- { 0x3376, G_UNICODE_NOT_PRESENT_OFFSET, 9908 },
- { 0x337b, G_UNICODE_NOT_PRESENT_OFFSET, 9911 },
- { 0x337c, G_UNICODE_NOT_PRESENT_OFFSET, 9918 },
- { 0x337d, G_UNICODE_NOT_PRESENT_OFFSET, 9925 },
- { 0x337e, G_UNICODE_NOT_PRESENT_OFFSET, 9932 },
- { 0x337f, G_UNICODE_NOT_PRESENT_OFFSET, 9939 },
- { 0x3380, G_UNICODE_NOT_PRESENT_OFFSET, 9952 },
- { 0x3381, G_UNICODE_NOT_PRESENT_OFFSET, 9955 },
- { 0x3382, G_UNICODE_NOT_PRESENT_OFFSET, 9958 },
- { 0x3383, G_UNICODE_NOT_PRESENT_OFFSET, 9962 },
- { 0x3384, G_UNICODE_NOT_PRESENT_OFFSET, 9965 },
- { 0x3385, G_UNICODE_NOT_PRESENT_OFFSET, 9968 },
- { 0x3386, G_UNICODE_NOT_PRESENT_OFFSET, 9971 },
- { 0x3387, G_UNICODE_NOT_PRESENT_OFFSET, 9974 },
- { 0x3388, G_UNICODE_NOT_PRESENT_OFFSET, 9977 },
- { 0x3389, G_UNICODE_NOT_PRESENT_OFFSET, 9981 },
- { 0x338a, G_UNICODE_NOT_PRESENT_OFFSET, 9986 },
- { 0x338b, G_UNICODE_NOT_PRESENT_OFFSET, 9989 },
- { 0x338c, G_UNICODE_NOT_PRESENT_OFFSET, 9992 },
- { 0x338d, G_UNICODE_NOT_PRESENT_OFFSET, 9996 },
- { 0x338e, G_UNICODE_NOT_PRESENT_OFFSET, 10000 },
- { 0x338f, G_UNICODE_NOT_PRESENT_OFFSET, 10003 },
- { 0x3390, G_UNICODE_NOT_PRESENT_OFFSET, 10006 },
- { 0x3391, G_UNICODE_NOT_PRESENT_OFFSET, 10009 },
- { 0x3392, G_UNICODE_NOT_PRESENT_OFFSET, 10013 },
- { 0x3393, G_UNICODE_NOT_PRESENT_OFFSET, 10017 },
- { 0x3394, G_UNICODE_NOT_PRESENT_OFFSET, 10021 },
- { 0x3395, G_UNICODE_NOT_PRESENT_OFFSET, 10025 },
- { 0x3396, G_UNICODE_NOT_PRESENT_OFFSET, 10029 },
- { 0x3397, G_UNICODE_NOT_PRESENT_OFFSET, 10032 },
- { 0x3398, G_UNICODE_NOT_PRESENT_OFFSET, 10035 },
- { 0x3399, G_UNICODE_NOT_PRESENT_OFFSET, 10038 },
- { 0x339a, G_UNICODE_NOT_PRESENT_OFFSET, 10041 },
- { 0x339b, G_UNICODE_NOT_PRESENT_OFFSET, 10044 },
- { 0x339c, G_UNICODE_NOT_PRESENT_OFFSET, 10048 },
- { 0x339d, G_UNICODE_NOT_PRESENT_OFFSET, 10051 },
- { 0x339e, G_UNICODE_NOT_PRESENT_OFFSET, 10054 },
- { 0x339f, G_UNICODE_NOT_PRESENT_OFFSET, 10057 },
- { 0x33a0, G_UNICODE_NOT_PRESENT_OFFSET, 10061 },
- { 0x33a1, G_UNICODE_NOT_PRESENT_OFFSET, 10065 },
- { 0x33a2, G_UNICODE_NOT_PRESENT_OFFSET, 10068 },
- { 0x33a3, G_UNICODE_NOT_PRESENT_OFFSET, 10072 },
- { 0x33a4, G_UNICODE_NOT_PRESENT_OFFSET, 10076 },
- { 0x33a5, G_UNICODE_NOT_PRESENT_OFFSET, 10080 },
- { 0x33a6, G_UNICODE_NOT_PRESENT_OFFSET, 10083 },
- { 0x33a7, G_UNICODE_NOT_PRESENT_OFFSET, 10087 },
- { 0x33a8, G_UNICODE_NOT_PRESENT_OFFSET, 10093 },
- { 0x33a9, G_UNICODE_NOT_PRESENT_OFFSET, 10100 },
- { 0x33aa, G_UNICODE_NOT_PRESENT_OFFSET, 10103 },
- { 0x33ab, G_UNICODE_NOT_PRESENT_OFFSET, 10107 },
- { 0x33ac, G_UNICODE_NOT_PRESENT_OFFSET, 10111 },
- { 0x33ad, G_UNICODE_NOT_PRESENT_OFFSET, 10115 },
- { 0x33ae, G_UNICODE_NOT_PRESENT_OFFSET, 10119 },
- { 0x33af, G_UNICODE_NOT_PRESENT_OFFSET, 10127 },
- { 0x33b0, G_UNICODE_NOT_PRESENT_OFFSET, 10136 },
- { 0x33b1, G_UNICODE_NOT_PRESENT_OFFSET, 10139 },
- { 0x33b2, G_UNICODE_NOT_PRESENT_OFFSET, 10142 },
- { 0x33b3, G_UNICODE_NOT_PRESENT_OFFSET, 10146 },
- { 0x33b4, G_UNICODE_NOT_PRESENT_OFFSET, 10149 },
- { 0x33b5, G_UNICODE_NOT_PRESENT_OFFSET, 10152 },
- { 0x33b6, G_UNICODE_NOT_PRESENT_OFFSET, 10155 },
- { 0x33b7, G_UNICODE_NOT_PRESENT_OFFSET, 10159 },
- { 0x33b8, G_UNICODE_NOT_PRESENT_OFFSET, 10162 },
- { 0x33b9, G_UNICODE_NOT_PRESENT_OFFSET, 10165 },
- { 0x33ba, G_UNICODE_NOT_PRESENT_OFFSET, 10168 },
- { 0x33bb, G_UNICODE_NOT_PRESENT_OFFSET, 10171 },
- { 0x33bc, G_UNICODE_NOT_PRESENT_OFFSET, 10174 },
- { 0x33bd, G_UNICODE_NOT_PRESENT_OFFSET, 10178 },
- { 0x33be, G_UNICODE_NOT_PRESENT_OFFSET, 10181 },
- { 0x33bf, G_UNICODE_NOT_PRESENT_OFFSET, 10184 },
- { 0x33c0, G_UNICODE_NOT_PRESENT_OFFSET, 10187 },
- { 0x33c1, G_UNICODE_NOT_PRESENT_OFFSET, 10191 },
- { 0x33c2, G_UNICODE_NOT_PRESENT_OFFSET, 10195 },
- { 0x33c3, G_UNICODE_NOT_PRESENT_OFFSET, 10200 },
- { 0x33c4, G_UNICODE_NOT_PRESENT_OFFSET, 10203 },
- { 0x33c5, G_UNICODE_NOT_PRESENT_OFFSET, 10206 },
- { 0x33c6, G_UNICODE_NOT_PRESENT_OFFSET, 10209 },
- { 0x33c7, G_UNICODE_NOT_PRESENT_OFFSET, 10216 },
- { 0x33c8, G_UNICODE_NOT_PRESENT_OFFSET, 10220 },
- { 0x33c9, G_UNICODE_NOT_PRESENT_OFFSET, 10223 },
- { 0x33ca, G_UNICODE_NOT_PRESENT_OFFSET, 10226 },
- { 0x33cb, G_UNICODE_NOT_PRESENT_OFFSET, 10229 },
- { 0x33cc, G_UNICODE_NOT_PRESENT_OFFSET, 10232 },
- { 0x33cd, G_UNICODE_NOT_PRESENT_OFFSET, 10235 },
- { 0x33ce, G_UNICODE_NOT_PRESENT_OFFSET, 10238 },
- { 0x33cf, G_UNICODE_NOT_PRESENT_OFFSET, 10241 },
- { 0x33d0, G_UNICODE_NOT_PRESENT_OFFSET, 10244 },
- { 0x33d1, G_UNICODE_NOT_PRESENT_OFFSET, 10247 },
- { 0x33d2, G_UNICODE_NOT_PRESENT_OFFSET, 10250 },
- { 0x33d3, G_UNICODE_NOT_PRESENT_OFFSET, 10254 },
- { 0x33d4, G_UNICODE_NOT_PRESENT_OFFSET, 10257 },
- { 0x33d5, G_UNICODE_NOT_PRESENT_OFFSET, 10260 },
- { 0x33d6, G_UNICODE_NOT_PRESENT_OFFSET, 10264 },
- { 0x33d7, G_UNICODE_NOT_PRESENT_OFFSET, 10268 },
- { 0x33d8, G_UNICODE_NOT_PRESENT_OFFSET, 10271 },
- { 0x33d9, G_UNICODE_NOT_PRESENT_OFFSET, 10276 },
- { 0x33da, G_UNICODE_NOT_PRESENT_OFFSET, 10280 },
- { 0x33db, G_UNICODE_NOT_PRESENT_OFFSET, 10283 },
- { 0x33dc, G_UNICODE_NOT_PRESENT_OFFSET, 10286 },
- { 0x33dd, G_UNICODE_NOT_PRESENT_OFFSET, 10289 },
- { 0x33e0, G_UNICODE_NOT_PRESENT_OFFSET, 10292 },
- { 0x33e1, G_UNICODE_NOT_PRESENT_OFFSET, 10297 },
- { 0x33e2, G_UNICODE_NOT_PRESENT_OFFSET, 10302 },
- { 0x33e3, G_UNICODE_NOT_PRESENT_OFFSET, 10307 },
- { 0x33e4, G_UNICODE_NOT_PRESENT_OFFSET, 10312 },
- { 0x33e5, G_UNICODE_NOT_PRESENT_OFFSET, 10317 },
- { 0x33e6, G_UNICODE_NOT_PRESENT_OFFSET, 10322 },
- { 0x33e7, G_UNICODE_NOT_PRESENT_OFFSET, 10327 },
- { 0x33e8, G_UNICODE_NOT_PRESENT_OFFSET, 10332 },
- { 0x33e9, G_UNICODE_NOT_PRESENT_OFFSET, 10337 },
- { 0x33ea, G_UNICODE_NOT_PRESENT_OFFSET, 10343 },
- { 0x33eb, G_UNICODE_NOT_PRESENT_OFFSET, 10349 },
- { 0x33ec, G_UNICODE_NOT_PRESENT_OFFSET, 10355 },
- { 0x33ed, G_UNICODE_NOT_PRESENT_OFFSET, 10361 },
- { 0x33ee, G_UNICODE_NOT_PRESENT_OFFSET, 10367 },
- { 0x33ef, G_UNICODE_NOT_PRESENT_OFFSET, 10373 },
- { 0x33f0, G_UNICODE_NOT_PRESENT_OFFSET, 10379 },
- { 0x33f1, G_UNICODE_NOT_PRESENT_OFFSET, 10385 },
- { 0x33f2, G_UNICODE_NOT_PRESENT_OFFSET, 10391 },
- { 0x33f3, G_UNICODE_NOT_PRESENT_OFFSET, 10397 },
- { 0x33f4, G_UNICODE_NOT_PRESENT_OFFSET, 10403 },
- { 0x33f5, G_UNICODE_NOT_PRESENT_OFFSET, 10409 },
- { 0x33f6, G_UNICODE_NOT_PRESENT_OFFSET, 10415 },
- { 0x33f7, G_UNICODE_NOT_PRESENT_OFFSET, 10421 },
- { 0x33f8, G_UNICODE_NOT_PRESENT_OFFSET, 10427 },
- { 0x33f9, G_UNICODE_NOT_PRESENT_OFFSET, 10433 },
- { 0x33fa, G_UNICODE_NOT_PRESENT_OFFSET, 10439 },
- { 0x33fb, G_UNICODE_NOT_PRESENT_OFFSET, 10445 },
- { 0x33fc, G_UNICODE_NOT_PRESENT_OFFSET, 10451 },
- { 0x33fd, G_UNICODE_NOT_PRESENT_OFFSET, 10457 },
- { 0x33fe, G_UNICODE_NOT_PRESENT_OFFSET, 10463 },
- { 0xf900, 10469, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf901, 10473, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf902, 6535, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf903, 10477, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf904, 10481, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf905, 10485, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf906, 10489, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf907, 6751, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf908, 6751, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf909, 10493, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf90a, 6567, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf90b, 10497, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf90c, 10501, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf90d, 10505, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf90e, 10509, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf90f, 10513, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf910, 10517, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf911, 10521, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf912, 10525, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf913, 10529, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf914, 10533, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf915, 10537, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf916, 10541, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf917, 10545, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf918, 10549, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf919, 10553, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf91a, 10557, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf91b, 10561, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf91c, 10565, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf91d, 10569, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf91e, 10573, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf91f, 10577, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf920, 10581, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf921, 10585, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf922, 10589, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf923, 10593, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf924, 10597, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf925, 10601, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf926, 10605, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf927, 10609, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf928, 10613, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf929, 10617, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf92a, 10621, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf92b, 10625, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf92c, 10629, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf92d, 10633, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf92e, 10637, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf92f, 10641, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf930, 10645, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf931, 10649, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf932, 10653, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf933, 10657, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf934, 6399, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf935, 10661, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf936, 10665, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf937, 10669, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf938, 10673, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf939, 10677, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf93a, 10681, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf93b, 10685, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf93c, 10689, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf93d, 10693, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf93e, 10697, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf93f, 10701, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf940, 6691, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf941, 10705, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf942, 10709, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf943, 10713, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf944, 10717, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf945, 10721, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf946, 10725, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf947, 10729, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf948, 10733, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf949, 10737, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf94a, 10741, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf94b, 10745, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf94c, 10749, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf94d, 10753, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf94e, 10757, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf94f, 10761, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf950, 10765, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf951, 10769, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf952, 10773, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf953, 10777, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf954, 10781, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf955, 10785, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf956, 10789, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf957, 10793, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf958, 10797, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf959, 10801, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf95a, 10805, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf95b, 10809, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf95c, 10533, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf95d, 10813, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf95e, 10817, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf95f, 10821, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf960, 10825, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf961, 10829, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf962, 10833, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf963, 10837, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf964, 10841, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf965, 10845, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf966, 10849, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf967, 10853, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf968, 10857, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf969, 10861, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf96a, 10865, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf96b, 10869, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf96c, 10873, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf96d, 10877, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf96e, 10881, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf96f, 10885, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf970, 10889, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf971, 6543, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf972, 10893, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf973, 10897, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf974, 10901, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf975, 10905, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf976, 10909, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf977, 10913, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf978, 10917, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf979, 10921, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf97a, 10925, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf97b, 10929, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf97c, 10933, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf97d, 10937, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf97e, 10941, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf97f, 10945, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf980, 10949, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf981, 6051, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf982, 10953, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf983, 10957, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf984, 10961, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf985, 10965, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf986, 10969, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf987, 10973, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf988, 10977, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf989, 10981, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf98a, 5975, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf98b, 10985, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf98c, 10989, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf98d, 10993, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf98e, 10997, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf98f, 11001, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf990, 11005, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf991, 11009, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf992, 11013, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf993, 11017, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf994, 11021, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf995, 11025, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf996, 11029, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf997, 11033, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf998, 11037, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf999, 11041, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf99a, 11045, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf99b, 11049, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf99c, 11053, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf99d, 11057, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf99e, 11061, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf99f, 11065, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a0, 11069, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a1, 10885, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a2, 11073, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a3, 11077, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a4, 11081, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a5, 11085, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a6, 11089, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a7, 11093, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a8, 11097, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9a9, 11101, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9aa, 10821, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ab, 11105, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ac, 11109, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ad, 11113, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ae, 11117, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9af, 11121, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b0, 11125, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b1, 11129, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b2, 11133, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b3, 11137, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b4, 11141, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b5, 11145, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b6, 11149, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b7, 11153, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b8, 11157, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9b9, 11161, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ba, 11165, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9bb, 11169, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9bc, 11173, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9bd, 11177, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9be, 11181, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9bf, 10533, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c0, 11185, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c1, 11189, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c2, 11193, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c3, 11197, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c4, 6747, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c5, 11201, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c6, 11205, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c7, 11209, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c8, 11213, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9c9, 11217, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ca, 11221, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9cb, 11225, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9cc, 11229, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9cd, 11233, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ce, 11237, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9cf, 11241, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d0, 11245, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d1, 8199, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d2, 11249, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d3, 11253, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d4, 11257, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d5, 11261, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d6, 11265, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d7, 11269, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d8, 11273, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9d9, 11277, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9da, 11281, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9db, 10829, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9dc, 11285, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9dd, 11289, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9de, 11293, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9df, 11297, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e0, 11301, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e1, 11305, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e2, 11309, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e3, 11313, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e4, 11317, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e5, 11321, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e6, 11325, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e7, 11329, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e8, 11333, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9e9, 6563, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ea, 11337, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9eb, 11341, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ec, 11345, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ed, 11349, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ee, 11353, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ef, 11357, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f0, 11361, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f1, 11365, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f2, 11369, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f3, 11373, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f4, 11377, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f5, 11381, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f6, 11385, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f7, 6367, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f8, 11389, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9f9, 11393, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9fa, 11397, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9fb, 11401, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9fc, 11405, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9fd, 11409, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9fe, 11413, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xf9ff, 11417, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa00, 11421, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa01, 11425, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa02, 11429, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa03, 11433, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa04, 11437, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa05, 11441, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa06, 11445, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa07, 11449, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa08, 6475, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa09, 11453, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa0a, 6487, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa0b, 11457, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa0c, 11461, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa0d, 11465, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa10, 11469, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa12, 11473, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa15, 11477, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa16, 11481, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa17, 11485, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa18, 11489, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa19, 11493, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa1a, 11497, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa1b, 11501, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa1c, 11505, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa1d, 11509, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa1e, 6395, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa20, 11513, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa22, 11517, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa25, 11521, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa26, 11525, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa2a, 11529, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa2b, 11533, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa2c, 11537, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa2d, 11541, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa30, 11545, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa31, 11549, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa32, 11553, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa33, 11557, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa34, 11561, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa35, 11565, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa36, 11569, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa37, 11573, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa38, 11577, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa39, 11581, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa3a, 11585, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa3b, 11589, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa3c, 6079, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa3d, 11593, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa3e, 11597, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa3f, 11601, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa40, 11605, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa41, 11609, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa42, 11613, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa43, 11617, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa44, 11621, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa45, 11625, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa46, 11629, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa47, 11633, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa48, 11637, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa49, 11641, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa4a, 11645, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa4b, 11649, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa4c, 8219, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa4d, 11653, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa4e, 11657, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa4f, 11661, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa50, 11665, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa51, 8235, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa52, 11669, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa53, 11673, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa54, 11677, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa55, 11681, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa56, 11685, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa57, 11029, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa58, 11689, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa59, 11693, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa5a, 11697, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa5b, 11701, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa5c, 11705, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa5d, 11709, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa5e, 11709, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa5f, 11713, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa60, 11717, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa61, 11721, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa62, 11725, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa63, 11729, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa64, 11733, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa65, 11737, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa66, 11741, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa67, 11521, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa68, 11745, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa69, 11749, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfa6a, 11753, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb00, G_UNICODE_NOT_PRESENT_OFFSET, 11757 },
- { 0xfb01, G_UNICODE_NOT_PRESENT_OFFSET, 11760 },
- { 0xfb02, G_UNICODE_NOT_PRESENT_OFFSET, 11763 },
- { 0xfb03, G_UNICODE_NOT_PRESENT_OFFSET, 11766 },
- { 0xfb04, G_UNICODE_NOT_PRESENT_OFFSET, 11770 },
- { 0xfb05, G_UNICODE_NOT_PRESENT_OFFSET, 11774 },
- { 0xfb06, G_UNICODE_NOT_PRESENT_OFFSET, 11774 },
- { 0xfb13, G_UNICODE_NOT_PRESENT_OFFSET, 11777 },
- { 0xfb14, G_UNICODE_NOT_PRESENT_OFFSET, 11782 },
- { 0xfb15, G_UNICODE_NOT_PRESENT_OFFSET, 11787 },
- { 0xfb16, G_UNICODE_NOT_PRESENT_OFFSET, 11792 },
- { 0xfb17, G_UNICODE_NOT_PRESENT_OFFSET, 11797 },
- { 0xfb1d, 11802, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb1f, 11807, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb20, G_UNICODE_NOT_PRESENT_OFFSET, 11812 },
- { 0xfb21, G_UNICODE_NOT_PRESENT_OFFSET, 5052 },
- { 0xfb22, G_UNICODE_NOT_PRESENT_OFFSET, 5061 },
- { 0xfb23, G_UNICODE_NOT_PRESENT_OFFSET, 11815 },
- { 0xfb24, G_UNICODE_NOT_PRESENT_OFFSET, 11818 },
- { 0xfb25, G_UNICODE_NOT_PRESENT_OFFSET, 11821 },
- { 0xfb26, G_UNICODE_NOT_PRESENT_OFFSET, 11824 },
- { 0xfb27, G_UNICODE_NOT_PRESENT_OFFSET, 11827 },
- { 0xfb28, G_UNICODE_NOT_PRESENT_OFFSET, 11830 },
- { 0xfb29, G_UNICODE_NOT_PRESENT_OFFSET, 4957 },
- { 0xfb2a, 11833, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb2b, 11838, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb2c, 11843, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb2d, 11850, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb2e, 11857, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb2f, 11862, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb30, 11867, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb31, 11872, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb32, 11877, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb33, 11882, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb34, 11887, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb35, 11892, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb36, 11897, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb38, 11902, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb39, 11907, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb3a, 11912, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb3b, 11917, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb3c, 11922, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb3e, 11927, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb40, 11932, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb41, 11937, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb43, 11942, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb44, 11947, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb46, 11952, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb47, 11957, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb48, 11962, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb49, 11967, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb4a, 11972, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb4b, 11977, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb4c, 11982, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb4d, 11987, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb4e, 11992, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0xfb4f, G_UNICODE_NOT_PRESENT_OFFSET, 11997 },
- { 0xfb50, G_UNICODE_NOT_PRESENT_OFFSET, 12002 },
- { 0xfb51, G_UNICODE_NOT_PRESENT_OFFSET, 12002 },
- { 0xfb52, G_UNICODE_NOT_PRESENT_OFFSET, 12005 },
- { 0xfb53, G_UNICODE_NOT_PRESENT_OFFSET, 12005 },
- { 0xfb54, G_UNICODE_NOT_PRESENT_OFFSET, 12005 },
- { 0xfb55, G_UNICODE_NOT_PRESENT_OFFSET, 12005 },
- { 0xfb56, G_UNICODE_NOT_PRESENT_OFFSET, 12008 },
- { 0xfb57, G_UNICODE_NOT_PRESENT_OFFSET, 12008 },
- { 0xfb58, G_UNICODE_NOT_PRESENT_OFFSET, 12008 },
- { 0xfb59, G_UNICODE_NOT_PRESENT_OFFSET, 12008 },
- { 0xfb5a, G_UNICODE_NOT_PRESENT_OFFSET, 12011 },
- { 0xfb5b, G_UNICODE_NOT_PRESENT_OFFSET, 12011 },
- { 0xfb5c, G_UNICODE_NOT_PRESENT_OFFSET, 12011 },
- { 0xfb5d, G_UNICODE_NOT_PRESENT_OFFSET, 12011 },
- { 0xfb5e, G_UNICODE_NOT_PRESENT_OFFSET, 12014 },
- { 0xfb5f, G_UNICODE_NOT_PRESENT_OFFSET, 12014 },
- { 0xfb60, G_UNICODE_NOT_PRESENT_OFFSET, 12014 },
- { 0xfb61, G_UNICODE_NOT_PRESENT_OFFSET, 12014 },
- { 0xfb62, G_UNICODE_NOT_PRESENT_OFFSET, 12017 },
- { 0xfb63, G_UNICODE_NOT_PRESENT_OFFSET, 12017 },
- { 0xfb64, G_UNICODE_NOT_PRESENT_OFFSET, 12017 },
- { 0xfb65, G_UNICODE_NOT_PRESENT_OFFSET, 12017 },
- { 0xfb66, G_UNICODE_NOT_PRESENT_OFFSET, 12020 },
- { 0xfb67, G_UNICODE_NOT_PRESENT_OFFSET, 12020 },
- { 0xfb68, G_UNICODE_NOT_PRESENT_OFFSET, 12020 },
- { 0xfb69, G_UNICODE_NOT_PRESENT_OFFSET, 12020 },
- { 0xfb6a, G_UNICODE_NOT_PRESENT_OFFSET, 12023 },
- { 0xfb6b, G_UNICODE_NOT_PRESENT_OFFSET, 12023 },
- { 0xfb6c, G_UNICODE_NOT_PRESENT_OFFSET, 12023 },
- { 0xfb6d, G_UNICODE_NOT_PRESENT_OFFSET, 12023 },
- { 0xfb6e, G_UNICODE_NOT_PRESENT_OFFSET, 12026 },
- { 0xfb6f, G_UNICODE_NOT_PRESENT_OFFSET, 12026 },
- { 0xfb70, G_UNICODE_NOT_PRESENT_OFFSET, 12026 },
- { 0xfb71, G_UNICODE_NOT_PRESENT_OFFSET, 12026 },
- { 0xfb72, G_UNICODE_NOT_PRESENT_OFFSET, 12029 },
- { 0xfb73, G_UNICODE_NOT_PRESENT_OFFSET, 12029 },
- { 0xfb74, G_UNICODE_NOT_PRESENT_OFFSET, 12029 },
- { 0xfb75, G_UNICODE_NOT_PRESENT_OFFSET, 12029 },
- { 0xfb76, G_UNICODE_NOT_PRESENT_OFFSET, 12032 },
- { 0xfb77, G_UNICODE_NOT_PRESENT_OFFSET, 12032 },
- { 0xfb78, G_UNICODE_NOT_PRESENT_OFFSET, 12032 },
- { 0xfb79, G_UNICODE_NOT_PRESENT_OFFSET, 12032 },
- { 0xfb7a, G_UNICODE_NOT_PRESENT_OFFSET, 12035 },
- { 0xfb7b, G_UNICODE_NOT_PRESENT_OFFSET, 12035 },
- { 0xfb7c, G_UNICODE_NOT_PRESENT_OFFSET, 12035 },
- { 0xfb7d, G_UNICODE_NOT_PRESENT_OFFSET, 12035 },
- { 0xfb7e, G_UNICODE_NOT_PRESENT_OFFSET, 12038 },
- { 0xfb7f, G_UNICODE_NOT_PRESENT_OFFSET, 12038 },
- { 0xfb80, G_UNICODE_NOT_PRESENT_OFFSET, 12038 },
- { 0xfb81, G_UNICODE_NOT_PRESENT_OFFSET, 12038 },
- { 0xfb82, G_UNICODE_NOT_PRESENT_OFFSET, 12041 },
- { 0xfb83, G_UNICODE_NOT_PRESENT_OFFSET, 12041 },
- { 0xfb84, G_UNICODE_NOT_PRESENT_OFFSET, 12044 },
- { 0xfb85, G_UNICODE_NOT_PRESENT_OFFSET, 12044 },
- { 0xfb86, G_UNICODE_NOT_PRESENT_OFFSET, 12047 },
- { 0xfb87, G_UNICODE_NOT_PRESENT_OFFSET, 12047 },
- { 0xfb88, G_UNICODE_NOT_PRESENT_OFFSET, 12050 },
- { 0xfb89, G_UNICODE_NOT_PRESENT_OFFSET, 12050 },
- { 0xfb8a, G_UNICODE_NOT_PRESENT_OFFSET, 12053 },
- { 0xfb8b, G_UNICODE_NOT_PRESENT_OFFSET, 12053 },
- { 0xfb8c, G_UNICODE_NOT_PRESENT_OFFSET, 12056 },
- { 0xfb8d, G_UNICODE_NOT_PRESENT_OFFSET, 12056 },
- { 0xfb8e, G_UNICODE_NOT_PRESENT_OFFSET, 12059 },
- { 0xfb8f, G_UNICODE_NOT_PRESENT_OFFSET, 12059 },
- { 0xfb90, G_UNICODE_NOT_PRESENT_OFFSET, 12059 },
- { 0xfb91, G_UNICODE_NOT_PRESENT_OFFSET, 12059 },
- { 0xfb92, G_UNICODE_NOT_PRESENT_OFFSET, 12062 },
- { 0xfb93, G_UNICODE_NOT_PRESENT_OFFSET, 12062 },
- { 0xfb94, G_UNICODE_NOT_PRESENT_OFFSET, 12062 },
- { 0xfb95, G_UNICODE_NOT_PRESENT_OFFSET, 12062 },
- { 0xfb96, G_UNICODE_NOT_PRESENT_OFFSET, 12065 },
- { 0xfb97, G_UNICODE_NOT_PRESENT_OFFSET, 12065 },
- { 0xfb98, G_UNICODE_NOT_PRESENT_OFFSET, 12065 },
- { 0xfb99, G_UNICODE_NOT_PRESENT_OFFSET, 12065 },
- { 0xfb9a, G_UNICODE_NOT_PRESENT_OFFSET, 12068 },
- { 0xfb9b, G_UNICODE_NOT_PRESENT_OFFSET, 12068 },
- { 0xfb9c, G_UNICODE_NOT_PRESENT_OFFSET, 12068 },
- { 0xfb9d, G_UNICODE_NOT_PRESENT_OFFSET, 12068 },
- { 0xfb9e, G_UNICODE_NOT_PRESENT_OFFSET, 12071 },
- { 0xfb9f, G_UNICODE_NOT_PRESENT_OFFSET, 12071 },
- { 0xfba0, G_UNICODE_NOT_PRESENT_OFFSET, 12074 },
- { 0xfba1, G_UNICODE_NOT_PRESENT_OFFSET, 12074 },
- { 0xfba2, G_UNICODE_NOT_PRESENT_OFFSET, 12074 },
- { 0xfba3, G_UNICODE_NOT_PRESENT_OFFSET, 12074 },
- { 0xfba4, G_UNICODE_NOT_PRESENT_OFFSET, 1718 },
- { 0xfba5, G_UNICODE_NOT_PRESENT_OFFSET, 1718 },
- { 0xfba6, G_UNICODE_NOT_PRESENT_OFFSET, 12077 },
- { 0xfba7, G_UNICODE_NOT_PRESENT_OFFSET, 12077 },
- { 0xfba8, G_UNICODE_NOT_PRESENT_OFFSET, 12077 },
- { 0xfba9, G_UNICODE_NOT_PRESENT_OFFSET, 12077 },
- { 0xfbaa, G_UNICODE_NOT_PRESENT_OFFSET, 12080 },
- { 0xfbab, G_UNICODE_NOT_PRESENT_OFFSET, 12080 },
- { 0xfbac, G_UNICODE_NOT_PRESENT_OFFSET, 12080 },
- { 0xfbad, G_UNICODE_NOT_PRESENT_OFFSET, 12080 },
- { 0xfbae, G_UNICODE_NOT_PRESENT_OFFSET, 12083 },
- { 0xfbaf, G_UNICODE_NOT_PRESENT_OFFSET, 12083 },
- { 0xfbb0, G_UNICODE_NOT_PRESENT_OFFSET, 1728 },
- { 0xfbb1, G_UNICODE_NOT_PRESENT_OFFSET, 1728 },
- { 0xfbd3, G_UNICODE_NOT_PRESENT_OFFSET, 12086 },
- { 0xfbd4, G_UNICODE_NOT_PRESENT_OFFSET, 12086 },
- { 0xfbd5, G_UNICODE_NOT_PRESENT_OFFSET, 12086 },
- { 0xfbd6, G_UNICODE_NOT_PRESENT_OFFSET, 12086 },
- { 0xfbd7, G_UNICODE_NOT_PRESENT_OFFSET, 12089 },
- { 0xfbd8, G_UNICODE_NOT_PRESENT_OFFSET, 12089 },
- { 0xfbd9, G_UNICODE_NOT_PRESENT_OFFSET, 12092 },
- { 0xfbda, G_UNICODE_NOT_PRESENT_OFFSET, 12092 },
- { 0xfbdb, G_UNICODE_NOT_PRESENT_OFFSET, 12095 },
- { 0xfbdc, G_UNICODE_NOT_PRESENT_OFFSET, 12095 },
- { 0xfbdd, G_UNICODE_NOT_PRESENT_OFFSET, 1708 },
- { 0xfbde, G_UNICODE_NOT_PRESENT_OFFSET, 12098 },
- { 0xfbdf, G_UNICODE_NOT_PRESENT_OFFSET, 12098 },
- { 0xfbe0, G_UNICODE_NOT_PRESENT_OFFSET, 12101 },
- { 0xfbe1, G_UNICODE_NOT_PRESENT_OFFSET, 12101 },
- { 0xfbe2, G_UNICODE_NOT_PRESENT_OFFSET, 12104 },
- { 0xfbe3, G_UNICODE_NOT_PRESENT_OFFSET, 12104 },
- { 0xfbe4, G_UNICODE_NOT_PRESENT_OFFSET, 12107 },
- { 0xfbe5, G_UNICODE_NOT_PRESENT_OFFSET, 12107 },
- { 0xfbe6, G_UNICODE_NOT_PRESENT_OFFSET, 12107 },
- { 0xfbe7, G_UNICODE_NOT_PRESENT_OFFSET, 12107 },
- { 0xfbe8, G_UNICODE_NOT_PRESENT_OFFSET, 12110 },
- { 0xfbe9, G_UNICODE_NOT_PRESENT_OFFSET, 12110 },
- { 0xfbea, G_UNICODE_NOT_PRESENT_OFFSET, 12113 },
- { 0xfbeb, G_UNICODE_NOT_PRESENT_OFFSET, 12113 },
- { 0xfbec, G_UNICODE_NOT_PRESENT_OFFSET, 12120 },
- { 0xfbed, G_UNICODE_NOT_PRESENT_OFFSET, 12120 },
- { 0xfbee, G_UNICODE_NOT_PRESENT_OFFSET, 12127 },
- { 0xfbef, G_UNICODE_NOT_PRESENT_OFFSET, 12127 },
- { 0xfbf0, G_UNICODE_NOT_PRESENT_OFFSET, 12134 },
- { 0xfbf1, G_UNICODE_NOT_PRESENT_OFFSET, 12134 },
- { 0xfbf2, G_UNICODE_NOT_PRESENT_OFFSET, 12141 },
- { 0xfbf3, G_UNICODE_NOT_PRESENT_OFFSET, 12141 },
- { 0xfbf4, G_UNICODE_NOT_PRESENT_OFFSET, 12148 },
- { 0xfbf5, G_UNICODE_NOT_PRESENT_OFFSET, 12148 },
- { 0xfbf6, G_UNICODE_NOT_PRESENT_OFFSET, 12155 },
- { 0xfbf7, G_UNICODE_NOT_PRESENT_OFFSET, 12155 },
- { 0xfbf8, G_UNICODE_NOT_PRESENT_OFFSET, 12155 },
- { 0xfbf9, G_UNICODE_NOT_PRESENT_OFFSET, 12162 },
- { 0xfbfa, G_UNICODE_NOT_PRESENT_OFFSET, 12162 },
- { 0xfbfb, G_UNICODE_NOT_PRESENT_OFFSET, 12162 },
- { 0xfbfc, G_UNICODE_NOT_PRESENT_OFFSET, 12169 },
- { 0xfbfd, G_UNICODE_NOT_PRESENT_OFFSET, 12169 },
- { 0xfbfe, G_UNICODE_NOT_PRESENT_OFFSET, 12169 },
- { 0xfbff, G_UNICODE_NOT_PRESENT_OFFSET, 12169 },
- { 0xfc00, G_UNICODE_NOT_PRESENT_OFFSET, 12172 },
- { 0xfc01, G_UNICODE_NOT_PRESENT_OFFSET, 12179 },
- { 0xfc02, G_UNICODE_NOT_PRESENT_OFFSET, 12186 },
- { 0xfc03, G_UNICODE_NOT_PRESENT_OFFSET, 12162 },
- { 0xfc04, G_UNICODE_NOT_PRESENT_OFFSET, 12193 },
- { 0xfc05, G_UNICODE_NOT_PRESENT_OFFSET, 12200 },
- { 0xfc06, G_UNICODE_NOT_PRESENT_OFFSET, 12205 },
- { 0xfc07, G_UNICODE_NOT_PRESENT_OFFSET, 12210 },
- { 0xfc08, G_UNICODE_NOT_PRESENT_OFFSET, 12215 },
- { 0xfc09, G_UNICODE_NOT_PRESENT_OFFSET, 12220 },
- { 0xfc0a, G_UNICODE_NOT_PRESENT_OFFSET, 12225 },
- { 0xfc0b, G_UNICODE_NOT_PRESENT_OFFSET, 12230 },
- { 0xfc0c, G_UNICODE_NOT_PRESENT_OFFSET, 12235 },
- { 0xfc0d, G_UNICODE_NOT_PRESENT_OFFSET, 12240 },
- { 0xfc0e, G_UNICODE_NOT_PRESENT_OFFSET, 12245 },
- { 0xfc0f, G_UNICODE_NOT_PRESENT_OFFSET, 12250 },
- { 0xfc10, G_UNICODE_NOT_PRESENT_OFFSET, 12255 },
- { 0xfc11, G_UNICODE_NOT_PRESENT_OFFSET, 12260 },
- { 0xfc12, G_UNICODE_NOT_PRESENT_OFFSET, 12265 },
- { 0xfc13, G_UNICODE_NOT_PRESENT_OFFSET, 12270 },
- { 0xfc14, G_UNICODE_NOT_PRESENT_OFFSET, 12275 },
- { 0xfc15, G_UNICODE_NOT_PRESENT_OFFSET, 12280 },
- { 0xfc16, G_UNICODE_NOT_PRESENT_OFFSET, 12285 },
- { 0xfc17, G_UNICODE_NOT_PRESENT_OFFSET, 12290 },
- { 0xfc18, G_UNICODE_NOT_PRESENT_OFFSET, 12295 },
- { 0xfc19, G_UNICODE_NOT_PRESENT_OFFSET, 12300 },
- { 0xfc1a, G_UNICODE_NOT_PRESENT_OFFSET, 12305 },
- { 0xfc1b, G_UNICODE_NOT_PRESENT_OFFSET, 12310 },
- { 0xfc1c, G_UNICODE_NOT_PRESENT_OFFSET, 12315 },
- { 0xfc1d, G_UNICODE_NOT_PRESENT_OFFSET, 12320 },
- { 0xfc1e, G_UNICODE_NOT_PRESENT_OFFSET, 12325 },
- { 0xfc1f, G_UNICODE_NOT_PRESENT_OFFSET, 12330 },
- { 0xfc20, G_UNICODE_NOT_PRESENT_OFFSET, 12335 },
- { 0xfc21, G_UNICODE_NOT_PRESENT_OFFSET, 12340 },
- { 0xfc22, G_UNICODE_NOT_PRESENT_OFFSET, 12345 },
- { 0xfc23, G_UNICODE_NOT_PRESENT_OFFSET, 12350 },
- { 0xfc24, G_UNICODE_NOT_PRESENT_OFFSET, 12355 },
- { 0xfc25, G_UNICODE_NOT_PRESENT_OFFSET, 12360 },
- { 0xfc26, G_UNICODE_NOT_PRESENT_OFFSET, 12365 },
- { 0xfc27, G_UNICODE_NOT_PRESENT_OFFSET, 12370 },
- { 0xfc28, G_UNICODE_NOT_PRESENT_OFFSET, 12375 },
- { 0xfc29, G_UNICODE_NOT_PRESENT_OFFSET, 12380 },
- { 0xfc2a, G_UNICODE_NOT_PRESENT_OFFSET, 12385 },
- { 0xfc2b, G_UNICODE_NOT_PRESENT_OFFSET, 12390 },
- { 0xfc2c, G_UNICODE_NOT_PRESENT_OFFSET, 12395 },
- { 0xfc2d, G_UNICODE_NOT_PRESENT_OFFSET, 12400 },
- { 0xfc2e, G_UNICODE_NOT_PRESENT_OFFSET, 12405 },
- { 0xfc2f, G_UNICODE_NOT_PRESENT_OFFSET, 12410 },
- { 0xfc30, G_UNICODE_NOT_PRESENT_OFFSET, 12415 },
- { 0xfc31, G_UNICODE_NOT_PRESENT_OFFSET, 12420 },
- { 0xfc32, G_UNICODE_NOT_PRESENT_OFFSET, 12425 },
- { 0xfc33, G_UNICODE_NOT_PRESENT_OFFSET, 12430 },
- { 0xfc34, G_UNICODE_NOT_PRESENT_OFFSET, 12435 },
- { 0xfc35, G_UNICODE_NOT_PRESENT_OFFSET, 12440 },
- { 0xfc36, G_UNICODE_NOT_PRESENT_OFFSET, 12445 },
- { 0xfc37, G_UNICODE_NOT_PRESENT_OFFSET, 12450 },
- { 0xfc38, G_UNICODE_NOT_PRESENT_OFFSET, 12455 },
- { 0xfc39, G_UNICODE_NOT_PRESENT_OFFSET, 12460 },
- { 0xfc3a, G_UNICODE_NOT_PRESENT_OFFSET, 12465 },
- { 0xfc3b, G_UNICODE_NOT_PRESENT_OFFSET, 12470 },
- { 0xfc3c, G_UNICODE_NOT_PRESENT_OFFSET, 12475 },
- { 0xfc3d, G_UNICODE_NOT_PRESENT_OFFSET, 12480 },
- { 0xfc3e, G_UNICODE_NOT_PRESENT_OFFSET, 12485 },
- { 0xfc3f, G_UNICODE_NOT_PRESENT_OFFSET, 12490 },
- { 0xfc40, G_UNICODE_NOT_PRESENT_OFFSET, 12495 },
- { 0xfc41, G_UNICODE_NOT_PRESENT_OFFSET, 12500 },
- { 0xfc42, G_UNICODE_NOT_PRESENT_OFFSET, 12505 },
- { 0xfc43, G_UNICODE_NOT_PRESENT_OFFSET, 12510 },
- { 0xfc44, G_UNICODE_NOT_PRESENT_OFFSET, 12515 },
- { 0xfc45, G_UNICODE_NOT_PRESENT_OFFSET, 12520 },
- { 0xfc46, G_UNICODE_NOT_PRESENT_OFFSET, 12525 },
- { 0xfc47, G_UNICODE_NOT_PRESENT_OFFSET, 12530 },
- { 0xfc48, G_UNICODE_NOT_PRESENT_OFFSET, 12535 },
- { 0xfc49, G_UNICODE_NOT_PRESENT_OFFSET, 12540 },
- { 0xfc4a, G_UNICODE_NOT_PRESENT_OFFSET, 12545 },
- { 0xfc4b, G_UNICODE_NOT_PRESENT_OFFSET, 12550 },
- { 0xfc4c, G_UNICODE_NOT_PRESENT_OFFSET, 12555 },
- { 0xfc4d, G_UNICODE_NOT_PRESENT_OFFSET, 12560 },
- { 0xfc4e, G_UNICODE_NOT_PRESENT_OFFSET, 12565 },
- { 0xfc4f, G_UNICODE_NOT_PRESENT_OFFSET, 12570 },
- { 0xfc50, G_UNICODE_NOT_PRESENT_OFFSET, 12575 },
- { 0xfc51, G_UNICODE_NOT_PRESENT_OFFSET, 12580 },
- { 0xfc52, G_UNICODE_NOT_PRESENT_OFFSET, 12585 },
- { 0xfc53, G_UNICODE_NOT_PRESENT_OFFSET, 12590 },
- { 0xfc54, G_UNICODE_NOT_PRESENT_OFFSET, 12595 },
- { 0xfc55, G_UNICODE_NOT_PRESENT_OFFSET, 12600 },
- { 0xfc56, G_UNICODE_NOT_PRESENT_OFFSET, 12605 },
- { 0xfc57, G_UNICODE_NOT_PRESENT_OFFSET, 12610 },
- { 0xfc58, G_UNICODE_NOT_PRESENT_OFFSET, 12615 },
- { 0xfc59, G_UNICODE_NOT_PRESENT_OFFSET, 12620 },
- { 0xfc5a, G_UNICODE_NOT_PRESENT_OFFSET, 12625 },
- { 0xfc5b, G_UNICODE_NOT_PRESENT_OFFSET, 12630 },
- { 0xfc5c, G_UNICODE_NOT_PRESENT_OFFSET, 12635 },
- { 0xfc5d, G_UNICODE_NOT_PRESENT_OFFSET, 12640 },
- { 0xfc5e, G_UNICODE_NOT_PRESENT_OFFSET, 12645 },
- { 0xfc5f, G_UNICODE_NOT_PRESENT_OFFSET, 12651 },
- { 0xfc60, G_UNICODE_NOT_PRESENT_OFFSET, 12657 },
- { 0xfc61, G_UNICODE_NOT_PRESENT_OFFSET, 12663 },
- { 0xfc62, G_UNICODE_NOT_PRESENT_OFFSET, 12669 },
- { 0xfc63, G_UNICODE_NOT_PRESENT_OFFSET, 12675 },
- { 0xfc64, G_UNICODE_NOT_PRESENT_OFFSET, 12681 },
- { 0xfc65, G_UNICODE_NOT_PRESENT_OFFSET, 12688 },
- { 0xfc66, G_UNICODE_NOT_PRESENT_OFFSET, 12186 },
- { 0xfc67, G_UNICODE_NOT_PRESENT_OFFSET, 12695 },
- { 0xfc68, G_UNICODE_NOT_PRESENT_OFFSET, 12162 },
- { 0xfc69, G_UNICODE_NOT_PRESENT_OFFSET, 12193 },
- { 0xfc6a, G_UNICODE_NOT_PRESENT_OFFSET, 12702 },
- { 0xfc6b, G_UNICODE_NOT_PRESENT_OFFSET, 12707 },
- { 0xfc6c, G_UNICODE_NOT_PRESENT_OFFSET, 12215 },
- { 0xfc6d, G_UNICODE_NOT_PRESENT_OFFSET, 12712 },
- { 0xfc6e, G_UNICODE_NOT_PRESENT_OFFSET, 12220 },
- { 0xfc6f, G_UNICODE_NOT_PRESENT_OFFSET, 12225 },
- { 0xfc70, G_UNICODE_NOT_PRESENT_OFFSET, 12717 },
- { 0xfc71, G_UNICODE_NOT_PRESENT_OFFSET, 12722 },
- { 0xfc72, G_UNICODE_NOT_PRESENT_OFFSET, 12245 },
- { 0xfc73, G_UNICODE_NOT_PRESENT_OFFSET, 12727 },
- { 0xfc74, G_UNICODE_NOT_PRESENT_OFFSET, 12250 },
- { 0xfc75, G_UNICODE_NOT_PRESENT_OFFSET, 12255 },
- { 0xfc76, G_UNICODE_NOT_PRESENT_OFFSET, 12732 },
- { 0xfc77, G_UNICODE_NOT_PRESENT_OFFSET, 12737 },
- { 0xfc78, G_UNICODE_NOT_PRESENT_OFFSET, 12265 },
- { 0xfc79, G_UNICODE_NOT_PRESENT_OFFSET, 12742 },
- { 0xfc7a, G_UNICODE_NOT_PRESENT_OFFSET, 12270 },
- { 0xfc7b, G_UNICODE_NOT_PRESENT_OFFSET, 12275 },
- { 0xfc7c, G_UNICODE_NOT_PRESENT_OFFSET, 12420 },
- { 0xfc7d, G_UNICODE_NOT_PRESENT_OFFSET, 12425 },
- { 0xfc7e, G_UNICODE_NOT_PRESENT_OFFSET, 12440 },
- { 0xfc7f, G_UNICODE_NOT_PRESENT_OFFSET, 12445 },
- { 0xfc80, G_UNICODE_NOT_PRESENT_OFFSET, 12450 },
- { 0xfc81, G_UNICODE_NOT_PRESENT_OFFSET, 12470 },
- { 0xfc82, G_UNICODE_NOT_PRESENT_OFFSET, 12475 },
- { 0xfc83, G_UNICODE_NOT_PRESENT_OFFSET, 12480 },
- { 0xfc84, G_UNICODE_NOT_PRESENT_OFFSET, 12485 },
- { 0xfc85, G_UNICODE_NOT_PRESENT_OFFSET, 12505 },
- { 0xfc86, G_UNICODE_NOT_PRESENT_OFFSET, 12510 },
- { 0xfc87, G_UNICODE_NOT_PRESENT_OFFSET, 12515 },
- { 0xfc88, G_UNICODE_NOT_PRESENT_OFFSET, 12747 },
- { 0xfc89, G_UNICODE_NOT_PRESENT_OFFSET, 12535 },
- { 0xfc8a, G_UNICODE_NOT_PRESENT_OFFSET, 12752 },
- { 0xfc8b, G_UNICODE_NOT_PRESENT_OFFSET, 12757 },
- { 0xfc8c, G_UNICODE_NOT_PRESENT_OFFSET, 12565 },
- { 0xfc8d, G_UNICODE_NOT_PRESENT_OFFSET, 12762 },
- { 0xfc8e, G_UNICODE_NOT_PRESENT_OFFSET, 12570 },
- { 0xfc8f, G_UNICODE_NOT_PRESENT_OFFSET, 12575 },
- { 0xfc90, G_UNICODE_NOT_PRESENT_OFFSET, 12640 },
- { 0xfc91, G_UNICODE_NOT_PRESENT_OFFSET, 12767 },
- { 0xfc92, G_UNICODE_NOT_PRESENT_OFFSET, 12772 },
- { 0xfc93, G_UNICODE_NOT_PRESENT_OFFSET, 12615 },
- { 0xfc94, G_UNICODE_NOT_PRESENT_OFFSET, 12777 },
- { 0xfc95, G_UNICODE_NOT_PRESENT_OFFSET, 12620 },
- { 0xfc96, G_UNICODE_NOT_PRESENT_OFFSET, 12625 },
- { 0xfc97, G_UNICODE_NOT_PRESENT_OFFSET, 12172 },
- { 0xfc98, G_UNICODE_NOT_PRESENT_OFFSET, 12179 },
- { 0xfc99, G_UNICODE_NOT_PRESENT_OFFSET, 12782 },
- { 0xfc9a, G_UNICODE_NOT_PRESENT_OFFSET, 12186 },
- { 0xfc9b, G_UNICODE_NOT_PRESENT_OFFSET, 12789 },
- { 0xfc9c, G_UNICODE_NOT_PRESENT_OFFSET, 12200 },
- { 0xfc9d, G_UNICODE_NOT_PRESENT_OFFSET, 12205 },
- { 0xfc9e, G_UNICODE_NOT_PRESENT_OFFSET, 12210 },
- { 0xfc9f, G_UNICODE_NOT_PRESENT_OFFSET, 12215 },
- { 0xfca0, G_UNICODE_NOT_PRESENT_OFFSET, 12796 },
- { 0xfca1, G_UNICODE_NOT_PRESENT_OFFSET, 12230 },
- { 0xfca2, G_UNICODE_NOT_PRESENT_OFFSET, 12235 },
- { 0xfca3, G_UNICODE_NOT_PRESENT_OFFSET, 12240 },
- { 0xfca4, G_UNICODE_NOT_PRESENT_OFFSET, 12245 },
- { 0xfca5, G_UNICODE_NOT_PRESENT_OFFSET, 12801 },
- { 0xfca6, G_UNICODE_NOT_PRESENT_OFFSET, 12265 },
- { 0xfca7, G_UNICODE_NOT_PRESENT_OFFSET, 12280 },
- { 0xfca8, G_UNICODE_NOT_PRESENT_OFFSET, 12285 },
- { 0xfca9, G_UNICODE_NOT_PRESENT_OFFSET, 12290 },
- { 0xfcaa, G_UNICODE_NOT_PRESENT_OFFSET, 12295 },
- { 0xfcab, G_UNICODE_NOT_PRESENT_OFFSET, 12300 },
- { 0xfcac, G_UNICODE_NOT_PRESENT_OFFSET, 12310 },
- { 0xfcad, G_UNICODE_NOT_PRESENT_OFFSET, 12315 },
- { 0xfcae, G_UNICODE_NOT_PRESENT_OFFSET, 12320 },
- { 0xfcaf, G_UNICODE_NOT_PRESENT_OFFSET, 12325 },
- { 0xfcb0, G_UNICODE_NOT_PRESENT_OFFSET, 12330 },
- { 0xfcb1, G_UNICODE_NOT_PRESENT_OFFSET, 12335 },
- { 0xfcb2, G_UNICODE_NOT_PRESENT_OFFSET, 12806 },
- { 0xfcb3, G_UNICODE_NOT_PRESENT_OFFSET, 12340 },
- { 0xfcb4, G_UNICODE_NOT_PRESENT_OFFSET, 12345 },
- { 0xfcb5, G_UNICODE_NOT_PRESENT_OFFSET, 12350 },
- { 0xfcb6, G_UNICODE_NOT_PRESENT_OFFSET, 12355 },
- { 0xfcb7, G_UNICODE_NOT_PRESENT_OFFSET, 12360 },
- { 0xfcb8, G_UNICODE_NOT_PRESENT_OFFSET, 12365 },
- { 0xfcb9, G_UNICODE_NOT_PRESENT_OFFSET, 12375 },
- { 0xfcba, G_UNICODE_NOT_PRESENT_OFFSET, 12380 },
- { 0xfcbb, G_UNICODE_NOT_PRESENT_OFFSET, 12385 },
- { 0xfcbc, G_UNICODE_NOT_PRESENT_OFFSET, 12390 },
- { 0xfcbd, G_UNICODE_NOT_PRESENT_OFFSET, 12395 },
- { 0xfcbe, G_UNICODE_NOT_PRESENT_OFFSET, 12400 },
- { 0xfcbf, G_UNICODE_NOT_PRESENT_OFFSET, 12405 },
- { 0xfcc0, G_UNICODE_NOT_PRESENT_OFFSET, 12410 },
- { 0xfcc1, G_UNICODE_NOT_PRESENT_OFFSET, 12415 },
- { 0xfcc2, G_UNICODE_NOT_PRESENT_OFFSET, 12430 },
- { 0xfcc3, G_UNICODE_NOT_PRESENT_OFFSET, 12435 },
- { 0xfcc4, G_UNICODE_NOT_PRESENT_OFFSET, 12455 },
- { 0xfcc5, G_UNICODE_NOT_PRESENT_OFFSET, 12460 },
- { 0xfcc6, G_UNICODE_NOT_PRESENT_OFFSET, 12465 },
- { 0xfcc7, G_UNICODE_NOT_PRESENT_OFFSET, 12470 },
- { 0xfcc8, G_UNICODE_NOT_PRESENT_OFFSET, 12475 },
- { 0xfcc9, G_UNICODE_NOT_PRESENT_OFFSET, 12490 },
- { 0xfcca, G_UNICODE_NOT_PRESENT_OFFSET, 12495 },
- { 0xfccb, G_UNICODE_NOT_PRESENT_OFFSET, 12500 },
- { 0xfccc, G_UNICODE_NOT_PRESENT_OFFSET, 12505 },
- { 0xfccd, G_UNICODE_NOT_PRESENT_OFFSET, 12811 },
- { 0xfcce, G_UNICODE_NOT_PRESENT_OFFSET, 12520 },
- { 0xfccf, G_UNICODE_NOT_PRESENT_OFFSET, 12525 },
- { 0xfcd0, G_UNICODE_NOT_PRESENT_OFFSET, 12530 },
- { 0xfcd1, G_UNICODE_NOT_PRESENT_OFFSET, 12535 },
- { 0xfcd2, G_UNICODE_NOT_PRESENT_OFFSET, 12550 },
- { 0xfcd3, G_UNICODE_NOT_PRESENT_OFFSET, 12555 },
- { 0xfcd4, G_UNICODE_NOT_PRESENT_OFFSET, 12560 },
- { 0xfcd5, G_UNICODE_NOT_PRESENT_OFFSET, 12565 },
- { 0xfcd6, G_UNICODE_NOT_PRESENT_OFFSET, 12816 },
- { 0xfcd7, G_UNICODE_NOT_PRESENT_OFFSET, 12580 },
- { 0xfcd8, G_UNICODE_NOT_PRESENT_OFFSET, 12585 },
- { 0xfcd9, G_UNICODE_NOT_PRESENT_OFFSET, 12821 },
- { 0xfcda, G_UNICODE_NOT_PRESENT_OFFSET, 12600 },
- { 0xfcdb, G_UNICODE_NOT_PRESENT_OFFSET, 12605 },
- { 0xfcdc, G_UNICODE_NOT_PRESENT_OFFSET, 12610 },
- { 0xfcdd, G_UNICODE_NOT_PRESENT_OFFSET, 12615 },
- { 0xfcde, G_UNICODE_NOT_PRESENT_OFFSET, 12826 },
- { 0xfcdf, G_UNICODE_NOT_PRESENT_OFFSET, 12186 },
- { 0xfce0, G_UNICODE_NOT_PRESENT_OFFSET, 12789 },
- { 0xfce1, G_UNICODE_NOT_PRESENT_OFFSET, 12215 },
- { 0xfce2, G_UNICODE_NOT_PRESENT_OFFSET, 12796 },
- { 0xfce3, G_UNICODE_NOT_PRESENT_OFFSET, 12245 },
- { 0xfce4, G_UNICODE_NOT_PRESENT_OFFSET, 12801 },
- { 0xfce5, G_UNICODE_NOT_PRESENT_OFFSET, 12265 },
- { 0xfce6, G_UNICODE_NOT_PRESENT_OFFSET, 12831 },
- { 0xfce7, G_UNICODE_NOT_PRESENT_OFFSET, 12330 },
- { 0xfce8, G_UNICODE_NOT_PRESENT_OFFSET, 12836 },
- { 0xfce9, G_UNICODE_NOT_PRESENT_OFFSET, 12841 },
- { 0xfcea, G_UNICODE_NOT_PRESENT_OFFSET, 12846 },
- { 0xfceb, G_UNICODE_NOT_PRESENT_OFFSET, 12470 },
- { 0xfcec, G_UNICODE_NOT_PRESENT_OFFSET, 12475 },
- { 0xfced, G_UNICODE_NOT_PRESENT_OFFSET, 12505 },
- { 0xfcee, G_UNICODE_NOT_PRESENT_OFFSET, 12565 },
- { 0xfcef, G_UNICODE_NOT_PRESENT_OFFSET, 12816 },
- { 0xfcf0, G_UNICODE_NOT_PRESENT_OFFSET, 12615 },
- { 0xfcf1, G_UNICODE_NOT_PRESENT_OFFSET, 12826 },
- { 0xfcf2, G_UNICODE_NOT_PRESENT_OFFSET, 12851 },
- { 0xfcf3, G_UNICODE_NOT_PRESENT_OFFSET, 12858 },
- { 0xfcf4, G_UNICODE_NOT_PRESENT_OFFSET, 12865 },
- { 0xfcf5, G_UNICODE_NOT_PRESENT_OFFSET, 12872 },
- { 0xfcf6, G_UNICODE_NOT_PRESENT_OFFSET, 12877 },
- { 0xfcf7, G_UNICODE_NOT_PRESENT_OFFSET, 12882 },
- { 0xfcf8, G_UNICODE_NOT_PRESENT_OFFSET, 12887 },
- { 0xfcf9, G_UNICODE_NOT_PRESENT_OFFSET, 12892 },
- { 0xfcfa, G_UNICODE_NOT_PRESENT_OFFSET, 12897 },
- { 0xfcfb, G_UNICODE_NOT_PRESENT_OFFSET, 12902 },
- { 0xfcfc, G_UNICODE_NOT_PRESENT_OFFSET, 12907 },
- { 0xfcfd, G_UNICODE_NOT_PRESENT_OFFSET, 12912 },
- { 0xfcfe, G_UNICODE_NOT_PRESENT_OFFSET, 12917 },
- { 0xfcff, G_UNICODE_NOT_PRESENT_OFFSET, 12922 },
- { 0xfd00, G_UNICODE_NOT_PRESENT_OFFSET, 12927 },
- { 0xfd01, G_UNICODE_NOT_PRESENT_OFFSET, 12932 },
- { 0xfd02, G_UNICODE_NOT_PRESENT_OFFSET, 12937 },
- { 0xfd03, G_UNICODE_NOT_PRESENT_OFFSET, 12942 },
- { 0xfd04, G_UNICODE_NOT_PRESENT_OFFSET, 12947 },
- { 0xfd05, G_UNICODE_NOT_PRESENT_OFFSET, 12952 },
- { 0xfd06, G_UNICODE_NOT_PRESENT_OFFSET, 12957 },
- { 0xfd07, G_UNICODE_NOT_PRESENT_OFFSET, 12962 },
- { 0xfd08, G_UNICODE_NOT_PRESENT_OFFSET, 12967 },
- { 0xfd09, G_UNICODE_NOT_PRESENT_OFFSET, 12972 },
- { 0xfd0a, G_UNICODE_NOT_PRESENT_OFFSET, 12977 },
- { 0xfd0b, G_UNICODE_NOT_PRESENT_OFFSET, 12982 },
- { 0xfd0c, G_UNICODE_NOT_PRESENT_OFFSET, 12841 },
- { 0xfd0d, G_UNICODE_NOT_PRESENT_OFFSET, 12987 },
- { 0xfd0e, G_UNICODE_NOT_PRESENT_OFFSET, 12992 },
- { 0xfd0f, G_UNICODE_NOT_PRESENT_OFFSET, 12997 },
- { 0xfd10, G_UNICODE_NOT_PRESENT_OFFSET, 13002 },
- { 0xfd11, G_UNICODE_NOT_PRESENT_OFFSET, 12872 },
- { 0xfd12, G_UNICODE_NOT_PRESENT_OFFSET, 12877 },
- { 0xfd13, G_UNICODE_NOT_PRESENT_OFFSET, 12882 },
- { 0xfd14, G_UNICODE_NOT_PRESENT_OFFSET, 12887 },
- { 0xfd15, G_UNICODE_NOT_PRESENT_OFFSET, 12892 },
- { 0xfd16, G_UNICODE_NOT_PRESENT_OFFSET, 12897 },
- { 0xfd17, G_UNICODE_NOT_PRESENT_OFFSET, 12902 },
- { 0xfd18, G_UNICODE_NOT_PRESENT_OFFSET, 12907 },
- { 0xfd19, G_UNICODE_NOT_PRESENT_OFFSET, 12912 },
- { 0xfd1a, G_UNICODE_NOT_PRESENT_OFFSET, 12917 },
- { 0xfd1b, G_UNICODE_NOT_PRESENT_OFFSET, 12922 },
- { 0xfd1c, G_UNICODE_NOT_PRESENT_OFFSET, 12927 },
- { 0xfd1d, G_UNICODE_NOT_PRESENT_OFFSET, 12932 },
- { 0xfd1e, G_UNICODE_NOT_PRESENT_OFFSET, 12937 },
- { 0xfd1f, G_UNICODE_NOT_PRESENT_OFFSET, 12942 },
- { 0xfd20, G_UNICODE_NOT_PRESENT_OFFSET, 12947 },
- { 0xfd21, G_UNICODE_NOT_PRESENT_OFFSET, 12952 },
- { 0xfd22, G_UNICODE_NOT_PRESENT_OFFSET, 12957 },
- { 0xfd23, G_UNICODE_NOT_PRESENT_OFFSET, 12962 },
- { 0xfd24, G_UNICODE_NOT_PRESENT_OFFSET, 12967 },
- { 0xfd25, G_UNICODE_NOT_PRESENT_OFFSET, 12972 },
- { 0xfd26, G_UNICODE_NOT_PRESENT_OFFSET, 12977 },
- { 0xfd27, G_UNICODE_NOT_PRESENT_OFFSET, 12982 },
- { 0xfd28, G_UNICODE_NOT_PRESENT_OFFSET, 12841 },
- { 0xfd29, G_UNICODE_NOT_PRESENT_OFFSET, 12987 },
- { 0xfd2a, G_UNICODE_NOT_PRESENT_OFFSET, 12992 },
- { 0xfd2b, G_UNICODE_NOT_PRESENT_OFFSET, 12997 },
- { 0xfd2c, G_UNICODE_NOT_PRESENT_OFFSET, 13002 },
- { 0xfd2d, G_UNICODE_NOT_PRESENT_OFFSET, 12972 },
- { 0xfd2e, G_UNICODE_NOT_PRESENT_OFFSET, 12977 },
- { 0xfd2f, G_UNICODE_NOT_PRESENT_OFFSET, 12982 },
- { 0xfd30, G_UNICODE_NOT_PRESENT_OFFSET, 12841 },
- { 0xfd31, G_UNICODE_NOT_PRESENT_OFFSET, 12836 },
- { 0xfd32, G_UNICODE_NOT_PRESENT_OFFSET, 12846 },
- { 0xfd33, G_UNICODE_NOT_PRESENT_OFFSET, 12370 },
- { 0xfd34, G_UNICODE_NOT_PRESENT_OFFSET, 12315 },
- { 0xfd35, G_UNICODE_NOT_PRESENT_OFFSET, 12320 },
- { 0xfd36, G_UNICODE_NOT_PRESENT_OFFSET, 12325 },
- { 0xfd37, G_UNICODE_NOT_PRESENT_OFFSET, 12972 },
- { 0xfd38, G_UNICODE_NOT_PRESENT_OFFSET, 12977 },
- { 0xfd39, G_UNICODE_NOT_PRESENT_OFFSET, 12982 },
- { 0xfd3a, G_UNICODE_NOT_PRESENT_OFFSET, 12370 },
- { 0xfd3b, G_UNICODE_NOT_PRESENT_OFFSET, 12375 },
- { 0xfd3c, G_UNICODE_NOT_PRESENT_OFFSET, 13007 },
- { 0xfd3d, G_UNICODE_NOT_PRESENT_OFFSET, 13007 },
- { 0xfd50, G_UNICODE_NOT_PRESENT_OFFSET, 13012 },
- { 0xfd51, G_UNICODE_NOT_PRESENT_OFFSET, 13019 },
- { 0xfd52, G_UNICODE_NOT_PRESENT_OFFSET, 13019 },
- { 0xfd53, G_UNICODE_NOT_PRESENT_OFFSET, 13026 },
- { 0xfd54, G_UNICODE_NOT_PRESENT_OFFSET, 13033 },
- { 0xfd55, G_UNICODE_NOT_PRESENT_OFFSET, 13040 },
- { 0xfd56, G_UNICODE_NOT_PRESENT_OFFSET, 13047 },
- { 0xfd57, G_UNICODE_NOT_PRESENT_OFFSET, 13054 },
- { 0xfd58, G_UNICODE_NOT_PRESENT_OFFSET, 13061 },
- { 0xfd59, G_UNICODE_NOT_PRESENT_OFFSET, 13061 },
- { 0xfd5a, G_UNICODE_NOT_PRESENT_OFFSET, 13068 },
- { 0xfd5b, G_UNICODE_NOT_PRESENT_OFFSET, 13075 },
- { 0xfd5c, G_UNICODE_NOT_PRESENT_OFFSET, 13082 },
- { 0xfd5d, G_UNICODE_NOT_PRESENT_OFFSET, 13089 },
- { 0xfd5e, G_UNICODE_NOT_PRESENT_OFFSET, 13096 },
- { 0xfd5f, G_UNICODE_NOT_PRESENT_OFFSET, 13103 },
- { 0xfd60, G_UNICODE_NOT_PRESENT_OFFSET, 13103 },
- { 0xfd61, G_UNICODE_NOT_PRESENT_OFFSET, 13110 },
- { 0xfd62, G_UNICODE_NOT_PRESENT_OFFSET, 13117 },
- { 0xfd63, G_UNICODE_NOT_PRESENT_OFFSET, 13117 },
- { 0xfd64, G_UNICODE_NOT_PRESENT_OFFSET, 13124 },
- { 0xfd65, G_UNICODE_NOT_PRESENT_OFFSET, 13124 },
- { 0xfd66, G_UNICODE_NOT_PRESENT_OFFSET, 13131 },
- { 0xfd67, G_UNICODE_NOT_PRESENT_OFFSET, 13138 },
- { 0xfd68, G_UNICODE_NOT_PRESENT_OFFSET, 13138 },
- { 0xfd69, G_UNICODE_NOT_PRESENT_OFFSET, 13145 },
- { 0xfd6a, G_UNICODE_NOT_PRESENT_OFFSET, 13152 },
- { 0xfd6b, G_UNICODE_NOT_PRESENT_OFFSET, 13152 },
- { 0xfd6c, G_UNICODE_NOT_PRESENT_OFFSET, 13159 },
- { 0xfd6d, G_UNICODE_NOT_PRESENT_OFFSET, 13159 },
- { 0xfd6e, G_UNICODE_NOT_PRESENT_OFFSET, 13166 },
- { 0xfd6f, G_UNICODE_NOT_PRESENT_OFFSET, 13173 },
- { 0xfd70, G_UNICODE_NOT_PRESENT_OFFSET, 13173 },
- { 0xfd71, G_UNICODE_NOT_PRESENT_OFFSET, 13180 },
- { 0xfd72, G_UNICODE_NOT_PRESENT_OFFSET, 13180 },
- { 0xfd73, G_UNICODE_NOT_PRESENT_OFFSET, 13187 },
- { 0xfd74, G_UNICODE_NOT_PRESENT_OFFSET, 13194 },
- { 0xfd75, G_UNICODE_NOT_PRESENT_OFFSET, 13201 },
- { 0xfd76, G_UNICODE_NOT_PRESENT_OFFSET, 13208 },
- { 0xfd77, G_UNICODE_NOT_PRESENT_OFFSET, 13208 },
- { 0xfd78, G_UNICODE_NOT_PRESENT_OFFSET, 13215 },
- { 0xfd79, G_UNICODE_NOT_PRESENT_OFFSET, 13222 },
- { 0xfd7a, G_UNICODE_NOT_PRESENT_OFFSET, 13229 },
- { 0xfd7b, G_UNICODE_NOT_PRESENT_OFFSET, 13236 },
- { 0xfd7c, G_UNICODE_NOT_PRESENT_OFFSET, 13243 },
- { 0xfd7d, G_UNICODE_NOT_PRESENT_OFFSET, 13243 },
- { 0xfd7e, G_UNICODE_NOT_PRESENT_OFFSET, 13250 },
- { 0xfd7f, G_UNICODE_NOT_PRESENT_OFFSET, 13257 },
- { 0xfd80, G_UNICODE_NOT_PRESENT_OFFSET, 13264 },
- { 0xfd81, G_UNICODE_NOT_PRESENT_OFFSET, 13271 },
- { 0xfd82, G_UNICODE_NOT_PRESENT_OFFSET, 13278 },
- { 0xfd83, G_UNICODE_NOT_PRESENT_OFFSET, 13285 },
- { 0xfd84, G_UNICODE_NOT_PRESENT_OFFSET, 13285 },
- { 0xfd85, G_UNICODE_NOT_PRESENT_OFFSET, 13292 },
- { 0xfd86, G_UNICODE_NOT_PRESENT_OFFSET, 13292 },
- { 0xfd87, G_UNICODE_NOT_PRESENT_OFFSET, 13299 },
- { 0xfd88, G_UNICODE_NOT_PRESENT_OFFSET, 13299 },
- { 0xfd89, G_UNICODE_NOT_PRESENT_OFFSET, 13306 },
- { 0xfd8a, G_UNICODE_NOT_PRESENT_OFFSET, 13313 },
- { 0xfd8b, G_UNICODE_NOT_PRESENT_OFFSET, 13320 },
- { 0xfd8c, G_UNICODE_NOT_PRESENT_OFFSET, 13327 },
- { 0xfd8d, G_UNICODE_NOT_PRESENT_OFFSET, 13334 },
- { 0xfd8e, G_UNICODE_NOT_PRESENT_OFFSET, 13341 },
- { 0xfd8f, G_UNICODE_NOT_PRESENT_OFFSET, 13348 },
- { 0xfd92, G_UNICODE_NOT_PRESENT_OFFSET, 13355 },
- { 0xfd93, G_UNICODE_NOT_PRESENT_OFFSET, 13362 },
- { 0xfd94, G_UNICODE_NOT_PRESENT_OFFSET, 13369 },
- { 0xfd95, G_UNICODE_NOT_PRESENT_OFFSET, 13376 },
- { 0xfd96, G_UNICODE_NOT_PRESENT_OFFSET, 13383 },
- { 0xfd97, G_UNICODE_NOT_PRESENT_OFFSET, 13390 },
- { 0xfd98, G_UNICODE_NOT_PRESENT_OFFSET, 13390 },
- { 0xfd99, G_UNICODE_NOT_PRESENT_OFFSET, 13397 },
- { 0xfd9a, G_UNICODE_NOT_PRESENT_OFFSET, 13404 },
- { 0xfd9b, G_UNICODE_NOT_PRESENT_OFFSET, 13411 },
- { 0xfd9c, G_UNICODE_NOT_PRESENT_OFFSET, 13418 },
- { 0xfd9d, G_UNICODE_NOT_PRESENT_OFFSET, 13418 },
- { 0xfd9e, G_UNICODE_NOT_PRESENT_OFFSET, 13425 },
- { 0xfd9f, G_UNICODE_NOT_PRESENT_OFFSET, 13432 },
- { 0xfda0, G_UNICODE_NOT_PRESENT_OFFSET, 13439 },
- { 0xfda1, G_UNICODE_NOT_PRESENT_OFFSET, 13446 },
- { 0xfda2, G_UNICODE_NOT_PRESENT_OFFSET, 13453 },
- { 0xfda3, G_UNICODE_NOT_PRESENT_OFFSET, 13460 },
- { 0xfda4, G_UNICODE_NOT_PRESENT_OFFSET, 13467 },
- { 0xfda5, G_UNICODE_NOT_PRESENT_OFFSET, 13474 },
- { 0xfda6, G_UNICODE_NOT_PRESENT_OFFSET, 13481 },
- { 0xfda7, G_UNICODE_NOT_PRESENT_OFFSET, 13488 },
- { 0xfda8, G_UNICODE_NOT_PRESENT_OFFSET, 13495 },
- { 0xfda9, G_UNICODE_NOT_PRESENT_OFFSET, 13502 },
- { 0xfdaa, G_UNICODE_NOT_PRESENT_OFFSET, 13509 },
- { 0xfdab, G_UNICODE_NOT_PRESENT_OFFSET, 13516 },
- { 0xfdac, G_UNICODE_NOT_PRESENT_OFFSET, 13523 },
- { 0xfdad, G_UNICODE_NOT_PRESENT_OFFSET, 13530 },
- { 0xfdae, G_UNICODE_NOT_PRESENT_OFFSET, 13537 },
- { 0xfdaf, G_UNICODE_NOT_PRESENT_OFFSET, 13544 },
- { 0xfdb0, G_UNICODE_NOT_PRESENT_OFFSET, 13551 },
- { 0xfdb1, G_UNICODE_NOT_PRESENT_OFFSET, 13558 },
- { 0xfdb2, G_UNICODE_NOT_PRESENT_OFFSET, 13565 },
- { 0xfdb3, G_UNICODE_NOT_PRESENT_OFFSET, 13572 },
- { 0xfdb4, G_UNICODE_NOT_PRESENT_OFFSET, 13250 },
- { 0xfdb5, G_UNICODE_NOT_PRESENT_OFFSET, 13264 },
- { 0xfdb6, G_UNICODE_NOT_PRESENT_OFFSET, 13579 },
- { 0xfdb7, G_UNICODE_NOT_PRESENT_OFFSET, 13586 },
- { 0xfdb8, G_UNICODE_NOT_PRESENT_OFFSET, 13593 },
- { 0xfdb9, G_UNICODE_NOT_PRESENT_OFFSET, 13600 },
- { 0xfdba, G_UNICODE_NOT_PRESENT_OFFSET, 13607 },
- { 0xfdbb, G_UNICODE_NOT_PRESENT_OFFSET, 13614 },
- { 0xfdbc, G_UNICODE_NOT_PRESENT_OFFSET, 13607 },
- { 0xfdbd, G_UNICODE_NOT_PRESENT_OFFSET, 13593 },
- { 0xfdbe, G_UNICODE_NOT_PRESENT_OFFSET, 13621 },
- { 0xfdbf, G_UNICODE_NOT_PRESENT_OFFSET, 13628 },
- { 0xfdc0, G_UNICODE_NOT_PRESENT_OFFSET, 13635 },
- { 0xfdc1, G_UNICODE_NOT_PRESENT_OFFSET, 13642 },
- { 0xfdc2, G_UNICODE_NOT_PRESENT_OFFSET, 13649 },
- { 0xfdc3, G_UNICODE_NOT_PRESENT_OFFSET, 13614 },
- { 0xfdc4, G_UNICODE_NOT_PRESENT_OFFSET, 13201 },
- { 0xfdc5, G_UNICODE_NOT_PRESENT_OFFSET, 13131 },
- { 0xfdc6, G_UNICODE_NOT_PRESENT_OFFSET, 13656 },
- { 0xfdc7, G_UNICODE_NOT_PRESENT_OFFSET, 13663 },
- { 0xfdf0, G_UNICODE_NOT_PRESENT_OFFSET, 13670 },
- { 0xfdf1, G_UNICODE_NOT_PRESENT_OFFSET, 13677 },
- { 0xfdf2, G_UNICODE_NOT_PRESENT_OFFSET, 13684 },
- { 0xfdf3, G_UNICODE_NOT_PRESENT_OFFSET, 13693 },
- { 0xfdf4, G_UNICODE_NOT_PRESENT_OFFSET, 13702 },
- { 0xfdf5, G_UNICODE_NOT_PRESENT_OFFSET, 13711 },
- { 0xfdf6, G_UNICODE_NOT_PRESENT_OFFSET, 13720 },
- { 0xfdf7, G_UNICODE_NOT_PRESENT_OFFSET, 13729 },
- { 0xfdf8, G_UNICODE_NOT_PRESENT_OFFSET, 13738 },
- { 0xfdf9, G_UNICODE_NOT_PRESENT_OFFSET, 13747 },
- { 0xfdfa, G_UNICODE_NOT_PRESENT_OFFSET, 13754 },
- { 0xfdfb, G_UNICODE_NOT_PRESENT_OFFSET, 13788 },
- { 0xfdfc, G_UNICODE_NOT_PRESENT_OFFSET, 13804 },
- { 0xfe30, G_UNICODE_NOT_PRESENT_OFFSET, 4871 },
- { 0xfe31, G_UNICODE_NOT_PRESENT_OFFSET, 13813 },
- { 0xfe32, G_UNICODE_NOT_PRESENT_OFFSET, 13817 },
- { 0xfe33, G_UNICODE_NOT_PRESENT_OFFSET, 13821 },
- { 0xfe34, G_UNICODE_NOT_PRESENT_OFFSET, 13821 },
- { 0xfe35, G_UNICODE_NOT_PRESENT_OFFSET, 4965 },
- { 0xfe36, G_UNICODE_NOT_PRESENT_OFFSET, 4967 },
- { 0xfe37, G_UNICODE_NOT_PRESENT_OFFSET, 13823 },
- { 0xfe38, G_UNICODE_NOT_PRESENT_OFFSET, 13825 },
- { 0xfe39, G_UNICODE_NOT_PRESENT_OFFSET, 13827 },
- { 0xfe3a, G_UNICODE_NOT_PRESENT_OFFSET, 13831 },
- { 0xfe3b, G_UNICODE_NOT_PRESENT_OFFSET, 13835 },
- { 0xfe3c, G_UNICODE_NOT_PRESENT_OFFSET, 13839 },
- { 0xfe3d, G_UNICODE_NOT_PRESENT_OFFSET, 13843 },
- { 0xfe3e, G_UNICODE_NOT_PRESENT_OFFSET, 13847 },
- { 0xfe3f, G_UNICODE_NOT_PRESENT_OFFSET, 5524 },
- { 0xfe40, G_UNICODE_NOT_PRESENT_OFFSET, 5528 },
- { 0xfe41, G_UNICODE_NOT_PRESENT_OFFSET, 13851 },
- { 0xfe42, G_UNICODE_NOT_PRESENT_OFFSET, 13855 },
- { 0xfe43, G_UNICODE_NOT_PRESENT_OFFSET, 13859 },
- { 0xfe44, G_UNICODE_NOT_PRESENT_OFFSET, 13863 },
- { 0xfe49, G_UNICODE_NOT_PRESENT_OFFSET, 4915 },
- { 0xfe4a, G_UNICODE_NOT_PRESENT_OFFSET, 4915 },
- { 0xfe4b, G_UNICODE_NOT_PRESENT_OFFSET, 4915 },
- { 0xfe4c, G_UNICODE_NOT_PRESENT_OFFSET, 4915 },
- { 0xfe4d, G_UNICODE_NOT_PRESENT_OFFSET, 13821 },
- { 0xfe4e, G_UNICODE_NOT_PRESENT_OFFSET, 13821 },
- { 0xfe4f, G_UNICODE_NOT_PRESENT_OFFSET, 13821 },
- { 0xfe50, G_UNICODE_NOT_PRESENT_OFFSET, 13867 },
- { 0xfe51, G_UNICODE_NOT_PRESENT_OFFSET, 13869 },
- { 0xfe52, G_UNICODE_NOT_PRESENT_OFFSET, 4869 },
- { 0xfe54, G_UNICODE_NOT_PRESENT_OFFSET, 1248 },
- { 0xfe55, G_UNICODE_NOT_PRESENT_OFFSET, 13873 },
- { 0xfe56, G_UNICODE_NOT_PRESENT_OFFSET, 13875 },
- { 0xfe57, G_UNICODE_NOT_PRESENT_OFFSET, 13877 },
- { 0xfe58, G_UNICODE_NOT_PRESENT_OFFSET, 13813 },
- { 0xfe59, G_UNICODE_NOT_PRESENT_OFFSET, 4965 },
- { 0xfe5a, G_UNICODE_NOT_PRESENT_OFFSET, 4967 },
- { 0xfe5b, G_UNICODE_NOT_PRESENT_OFFSET, 13823 },
- { 0xfe5c, G_UNICODE_NOT_PRESENT_OFFSET, 13825 },
- { 0xfe5d, G_UNICODE_NOT_PRESENT_OFFSET, 13827 },
- { 0xfe5e, G_UNICODE_NOT_PRESENT_OFFSET, 13831 },
- { 0xfe5f, G_UNICODE_NOT_PRESENT_OFFSET, 13879 },
- { 0xfe60, G_UNICODE_NOT_PRESENT_OFFSET, 13881 },
- { 0xfe61, G_UNICODE_NOT_PRESENT_OFFSET, 13883 },
- { 0xfe62, G_UNICODE_NOT_PRESENT_OFFSET, 4957 },
- { 0xfe63, G_UNICODE_NOT_PRESENT_OFFSET, 13885 },
- { 0xfe64, G_UNICODE_NOT_PRESENT_OFFSET, 13887 },
- { 0xfe65, G_UNICODE_NOT_PRESENT_OFFSET, 13889 },
- { 0xfe66, G_UNICODE_NOT_PRESENT_OFFSET, 4963 },
- { 0xfe68, G_UNICODE_NOT_PRESENT_OFFSET, 13891 },
- { 0xfe69, G_UNICODE_NOT_PRESENT_OFFSET, 13893 },
- { 0xfe6a, G_UNICODE_NOT_PRESENT_OFFSET, 13895 },
- { 0xfe6b, G_UNICODE_NOT_PRESENT_OFFSET, 13897 },
- { 0xfe70, G_UNICODE_NOT_PRESENT_OFFSET, 13899 },
- { 0xfe71, G_UNICODE_NOT_PRESENT_OFFSET, 13903 },
- { 0xfe72, G_UNICODE_NOT_PRESENT_OFFSET, 13908 },
- { 0xfe74, G_UNICODE_NOT_PRESENT_OFFSET, 13912 },
- { 0xfe76, G_UNICODE_NOT_PRESENT_OFFSET, 13916 },
- { 0xfe77, G_UNICODE_NOT_PRESENT_OFFSET, 13920 },
- { 0xfe78, G_UNICODE_NOT_PRESENT_OFFSET, 13925 },
- { 0xfe79, G_UNICODE_NOT_PRESENT_OFFSET, 13929 },
- { 0xfe7a, G_UNICODE_NOT_PRESENT_OFFSET, 13934 },
- { 0xfe7b, G_UNICODE_NOT_PRESENT_OFFSET, 13938 },
- { 0xfe7c, G_UNICODE_NOT_PRESENT_OFFSET, 13943 },
- { 0xfe7d, G_UNICODE_NOT_PRESENT_OFFSET, 13947 },
- { 0xfe7e, G_UNICODE_NOT_PRESENT_OFFSET, 13952 },
- { 0xfe7f, G_UNICODE_NOT_PRESENT_OFFSET, 13956 },
- { 0xfe80, G_UNICODE_NOT_PRESENT_OFFSET, 13961 },
- { 0xfe81, G_UNICODE_NOT_PRESENT_OFFSET, 1673 },
- { 0xfe82, G_UNICODE_NOT_PRESENT_OFFSET, 1673 },
- { 0xfe83, G_UNICODE_NOT_PRESENT_OFFSET, 1678 },
- { 0xfe84, G_UNICODE_NOT_PRESENT_OFFSET, 1678 },
- { 0xfe85, G_UNICODE_NOT_PRESENT_OFFSET, 1683 },
- { 0xfe86, G_UNICODE_NOT_PRESENT_OFFSET, 1683 },
- { 0xfe87, G_UNICODE_NOT_PRESENT_OFFSET, 1688 },
- { 0xfe88, G_UNICODE_NOT_PRESENT_OFFSET, 1688 },
- { 0xfe89, G_UNICODE_NOT_PRESENT_OFFSET, 1693 },
- { 0xfe8a, G_UNICODE_NOT_PRESENT_OFFSET, 1693 },
- { 0xfe8b, G_UNICODE_NOT_PRESENT_OFFSET, 1693 },
- { 0xfe8c, G_UNICODE_NOT_PRESENT_OFFSET, 1693 },
- { 0xfe8d, G_UNICODE_NOT_PRESENT_OFFSET, 13964 },
- { 0xfe8e, G_UNICODE_NOT_PRESENT_OFFSET, 13964 },
- { 0xfe8f, G_UNICODE_NOT_PRESENT_OFFSET, 13967 },
- { 0xfe90, G_UNICODE_NOT_PRESENT_OFFSET, 13967 },
- { 0xfe91, G_UNICODE_NOT_PRESENT_OFFSET, 13967 },
- { 0xfe92, G_UNICODE_NOT_PRESENT_OFFSET, 13967 },
- { 0xfe93, G_UNICODE_NOT_PRESENT_OFFSET, 13970 },
- { 0xfe94, G_UNICODE_NOT_PRESENT_OFFSET, 13970 },
- { 0xfe95, G_UNICODE_NOT_PRESENT_OFFSET, 13973 },
- { 0xfe96, G_UNICODE_NOT_PRESENT_OFFSET, 13973 },
- { 0xfe97, G_UNICODE_NOT_PRESENT_OFFSET, 13973 },
- { 0xfe98, G_UNICODE_NOT_PRESENT_OFFSET, 13973 },
- { 0xfe99, G_UNICODE_NOT_PRESENT_OFFSET, 13976 },
- { 0xfe9a, G_UNICODE_NOT_PRESENT_OFFSET, 13976 },
- { 0xfe9b, G_UNICODE_NOT_PRESENT_OFFSET, 13976 },
- { 0xfe9c, G_UNICODE_NOT_PRESENT_OFFSET, 13976 },
- { 0xfe9d, G_UNICODE_NOT_PRESENT_OFFSET, 13979 },
- { 0xfe9e, G_UNICODE_NOT_PRESENT_OFFSET, 13979 },
- { 0xfe9f, G_UNICODE_NOT_PRESENT_OFFSET, 13979 },
- { 0xfea0, G_UNICODE_NOT_PRESENT_OFFSET, 13979 },
- { 0xfea1, G_UNICODE_NOT_PRESENT_OFFSET, 13982 },
- { 0xfea2, G_UNICODE_NOT_PRESENT_OFFSET, 13982 },
- { 0xfea3, G_UNICODE_NOT_PRESENT_OFFSET, 13982 },
- { 0xfea4, G_UNICODE_NOT_PRESENT_OFFSET, 13982 },
- { 0xfea5, G_UNICODE_NOT_PRESENT_OFFSET, 13985 },
- { 0xfea6, G_UNICODE_NOT_PRESENT_OFFSET, 13985 },
- { 0xfea7, G_UNICODE_NOT_PRESENT_OFFSET, 13985 },
- { 0xfea8, G_UNICODE_NOT_PRESENT_OFFSET, 13985 },
- { 0xfea9, G_UNICODE_NOT_PRESENT_OFFSET, 13988 },
- { 0xfeaa, G_UNICODE_NOT_PRESENT_OFFSET, 13988 },
- { 0xfeab, G_UNICODE_NOT_PRESENT_OFFSET, 13991 },
- { 0xfeac, G_UNICODE_NOT_PRESENT_OFFSET, 13991 },
- { 0xfead, G_UNICODE_NOT_PRESENT_OFFSET, 13994 },
- { 0xfeae, G_UNICODE_NOT_PRESENT_OFFSET, 13994 },
- { 0xfeaf, G_UNICODE_NOT_PRESENT_OFFSET, 13997 },
- { 0xfeb0, G_UNICODE_NOT_PRESENT_OFFSET, 13997 },
- { 0xfeb1, G_UNICODE_NOT_PRESENT_OFFSET, 14000 },
- { 0xfeb2, G_UNICODE_NOT_PRESENT_OFFSET, 14000 },
- { 0xfeb3, G_UNICODE_NOT_PRESENT_OFFSET, 14000 },
- { 0xfeb4, G_UNICODE_NOT_PRESENT_OFFSET, 14000 },
- { 0xfeb5, G_UNICODE_NOT_PRESENT_OFFSET, 14003 },
- { 0xfeb6, G_UNICODE_NOT_PRESENT_OFFSET, 14003 },
- { 0xfeb7, G_UNICODE_NOT_PRESENT_OFFSET, 14003 },
- { 0xfeb8, G_UNICODE_NOT_PRESENT_OFFSET, 14003 },
- { 0xfeb9, G_UNICODE_NOT_PRESENT_OFFSET, 14006 },
- { 0xfeba, G_UNICODE_NOT_PRESENT_OFFSET, 14006 },
- { 0xfebb, G_UNICODE_NOT_PRESENT_OFFSET, 14006 },
- { 0xfebc, G_UNICODE_NOT_PRESENT_OFFSET, 14006 },
- { 0xfebd, G_UNICODE_NOT_PRESENT_OFFSET, 14009 },
- { 0xfebe, G_UNICODE_NOT_PRESENT_OFFSET, 14009 },
- { 0xfebf, G_UNICODE_NOT_PRESENT_OFFSET, 14009 },
- { 0xfec0, G_UNICODE_NOT_PRESENT_OFFSET, 14009 },
- { 0xfec1, G_UNICODE_NOT_PRESENT_OFFSET, 14012 },
- { 0xfec2, G_UNICODE_NOT_PRESENT_OFFSET, 14012 },
- { 0xfec3, G_UNICODE_NOT_PRESENT_OFFSET, 14012 },
- { 0xfec4, G_UNICODE_NOT_PRESENT_OFFSET, 14012 },
- { 0xfec5, G_UNICODE_NOT_PRESENT_OFFSET, 14015 },
- { 0xfec6, G_UNICODE_NOT_PRESENT_OFFSET, 14015 },
- { 0xfec7, G_UNICODE_NOT_PRESENT_OFFSET, 14015 },
- { 0xfec8, G_UNICODE_NOT_PRESENT_OFFSET, 14015 },
- { 0xfec9, G_UNICODE_NOT_PRESENT_OFFSET, 14018 },
- { 0xfeca, G_UNICODE_NOT_PRESENT_OFFSET, 14018 },
- { 0xfecb, G_UNICODE_NOT_PRESENT_OFFSET, 14018 },
- { 0xfecc, G_UNICODE_NOT_PRESENT_OFFSET, 14018 },
- { 0xfecd, G_UNICODE_NOT_PRESENT_OFFSET, 14021 },
- { 0xfece, G_UNICODE_NOT_PRESENT_OFFSET, 14021 },
- { 0xfecf, G_UNICODE_NOT_PRESENT_OFFSET, 14021 },
- { 0xfed0, G_UNICODE_NOT_PRESENT_OFFSET, 14021 },
- { 0xfed1, G_UNICODE_NOT_PRESENT_OFFSET, 14024 },
- { 0xfed2, G_UNICODE_NOT_PRESENT_OFFSET, 14024 },
- { 0xfed3, G_UNICODE_NOT_PRESENT_OFFSET, 14024 },
- { 0xfed4, G_UNICODE_NOT_PRESENT_OFFSET, 14024 },
- { 0xfed5, G_UNICODE_NOT_PRESENT_OFFSET, 14027 },
- { 0xfed6, G_UNICODE_NOT_PRESENT_OFFSET, 14027 },
- { 0xfed7, G_UNICODE_NOT_PRESENT_OFFSET, 14027 },
- { 0xfed8, G_UNICODE_NOT_PRESENT_OFFSET, 14027 },
- { 0xfed9, G_UNICODE_NOT_PRESENT_OFFSET, 14030 },
- { 0xfeda, G_UNICODE_NOT_PRESENT_OFFSET, 14030 },
- { 0xfedb, G_UNICODE_NOT_PRESENT_OFFSET, 14030 },
- { 0xfedc, G_UNICODE_NOT_PRESENT_OFFSET, 14030 },
- { 0xfedd, G_UNICODE_NOT_PRESENT_OFFSET, 14033 },
- { 0xfede, G_UNICODE_NOT_PRESENT_OFFSET, 14033 },
- { 0xfedf, G_UNICODE_NOT_PRESENT_OFFSET, 14033 },
- { 0xfee0, G_UNICODE_NOT_PRESENT_OFFSET, 14033 },
- { 0xfee1, G_UNICODE_NOT_PRESENT_OFFSET, 14036 },
- { 0xfee2, G_UNICODE_NOT_PRESENT_OFFSET, 14036 },
- { 0xfee3, G_UNICODE_NOT_PRESENT_OFFSET, 14036 },
- { 0xfee4, G_UNICODE_NOT_PRESENT_OFFSET, 14036 },
- { 0xfee5, G_UNICODE_NOT_PRESENT_OFFSET, 14039 },
- { 0xfee6, G_UNICODE_NOT_PRESENT_OFFSET, 14039 },
- { 0xfee7, G_UNICODE_NOT_PRESENT_OFFSET, 14039 },
- { 0xfee8, G_UNICODE_NOT_PRESENT_OFFSET, 14039 },
- { 0xfee9, G_UNICODE_NOT_PRESENT_OFFSET, 14042 },
- { 0xfeea, G_UNICODE_NOT_PRESENT_OFFSET, 14042 },
- { 0xfeeb, G_UNICODE_NOT_PRESENT_OFFSET, 14042 },
- { 0xfeec, G_UNICODE_NOT_PRESENT_OFFSET, 14042 },
- { 0xfeed, G_UNICODE_NOT_PRESENT_OFFSET, 14045 },
- { 0xfeee, G_UNICODE_NOT_PRESENT_OFFSET, 14045 },
- { 0xfeef, G_UNICODE_NOT_PRESENT_OFFSET, 12110 },
- { 0xfef0, G_UNICODE_NOT_PRESENT_OFFSET, 12110 },
- { 0xfef1, G_UNICODE_NOT_PRESENT_OFFSET, 14048 },
- { 0xfef2, G_UNICODE_NOT_PRESENT_OFFSET, 14048 },
- { 0xfef3, G_UNICODE_NOT_PRESENT_OFFSET, 14048 },
- { 0xfef4, G_UNICODE_NOT_PRESENT_OFFSET, 14048 },
- { 0xfef5, G_UNICODE_NOT_PRESENT_OFFSET, 14051 },
- { 0xfef6, G_UNICODE_NOT_PRESENT_OFFSET, 14051 },
- { 0xfef7, G_UNICODE_NOT_PRESENT_OFFSET, 14058 },
- { 0xfef8, G_UNICODE_NOT_PRESENT_OFFSET, 14058 },
- { 0xfef9, G_UNICODE_NOT_PRESENT_OFFSET, 14065 },
- { 0xfefa, G_UNICODE_NOT_PRESENT_OFFSET, 14065 },
- { 0xfefb, G_UNICODE_NOT_PRESENT_OFFSET, 14072 },
- { 0xfefc, G_UNICODE_NOT_PRESENT_OFFSET, 14072 },
- { 0xff01, G_UNICODE_NOT_PRESENT_OFFSET, 13877 },
- { 0xff02, G_UNICODE_NOT_PRESENT_OFFSET, 14077 },
- { 0xff03, G_UNICODE_NOT_PRESENT_OFFSET, 13879 },
- { 0xff04, G_UNICODE_NOT_PRESENT_OFFSET, 13893 },
- { 0xff05, G_UNICODE_NOT_PRESENT_OFFSET, 13895 },
- { 0xff06, G_UNICODE_NOT_PRESENT_OFFSET, 13881 },
- { 0xff07, G_UNICODE_NOT_PRESENT_OFFSET, 14079 },
- { 0xff08, G_UNICODE_NOT_PRESENT_OFFSET, 4965 },
- { 0xff09, G_UNICODE_NOT_PRESENT_OFFSET, 4967 },
- { 0xff0a, G_UNICODE_NOT_PRESENT_OFFSET, 13883 },
- { 0xff0b, G_UNICODE_NOT_PRESENT_OFFSET, 4957 },
- { 0xff0c, G_UNICODE_NOT_PRESENT_OFFSET, 13867 },
- { 0xff0d, G_UNICODE_NOT_PRESENT_OFFSET, 13885 },
- { 0xff0e, G_UNICODE_NOT_PRESENT_OFFSET, 4869 },
- { 0xff0f, G_UNICODE_NOT_PRESENT_OFFSET, 14081 },
- { 0xff10, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0xff11, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0xff12, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0xff13, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0xff14, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0xff15, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0xff16, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0xff17, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0xff18, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0xff19, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0xff1a, G_UNICODE_NOT_PRESENT_OFFSET, 13873 },
- { 0xff1b, G_UNICODE_NOT_PRESENT_OFFSET, 1248 },
- { 0xff1c, G_UNICODE_NOT_PRESENT_OFFSET, 13887 },
- { 0xff1d, G_UNICODE_NOT_PRESENT_OFFSET, 4963 },
- { 0xff1e, G_UNICODE_NOT_PRESENT_OFFSET, 13889 },
- { 0xff1f, G_UNICODE_NOT_PRESENT_OFFSET, 13875 },
- { 0xff20, G_UNICODE_NOT_PRESENT_OFFSET, 13897 },
- { 0xff21, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0xff22, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0xff23, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0xff24, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0xff25, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0xff26, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0xff27, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0xff28, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0xff29, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0xff2a, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0xff2b, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0xff2c, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0xff2d, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0xff2e, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0xff2f, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0xff30, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0xff31, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0xff32, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0xff33, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0xff34, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0xff35, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0xff36, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0xff37, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0xff38, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0xff39, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0xff3a, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0xff3b, G_UNICODE_NOT_PRESENT_OFFSET, 14083 },
- { 0xff3c, G_UNICODE_NOT_PRESENT_OFFSET, 13891 },
- { 0xff3d, G_UNICODE_NOT_PRESENT_OFFSET, 14085 },
- { 0xff3e, G_UNICODE_NOT_PRESENT_OFFSET, 14087 },
- { 0xff3f, G_UNICODE_NOT_PRESENT_OFFSET, 13821 },
- { 0xff40, G_UNICODE_NOT_PRESENT_OFFSET, 4798 },
- { 0xff41, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0xff42, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0xff43, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0xff44, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0xff45, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0xff46, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0xff47, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0xff48, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0xff49, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0xff4a, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0xff4b, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0xff4c, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0xff4d, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0xff4e, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0xff4f, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0xff50, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0xff51, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0xff52, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0xff53, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0xff54, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0xff55, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0xff56, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0xff57, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0xff58, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0xff59, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0xff5a, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0xff5b, G_UNICODE_NOT_PRESENT_OFFSET, 13823 },
- { 0xff5c, G_UNICODE_NOT_PRESENT_OFFSET, 14089 },
- { 0xff5d, G_UNICODE_NOT_PRESENT_OFFSET, 13825 },
- { 0xff5e, G_UNICODE_NOT_PRESENT_OFFSET, 14091 },
- { 0xff5f, G_UNICODE_NOT_PRESENT_OFFSET, 14093 },
- { 0xff60, G_UNICODE_NOT_PRESENT_OFFSET, 14097 },
- { 0xff61, G_UNICODE_NOT_PRESENT_OFFSET, 14101 },
- { 0xff62, G_UNICODE_NOT_PRESENT_OFFSET, 13851 },
- { 0xff63, G_UNICODE_NOT_PRESENT_OFFSET, 13855 },
- { 0xff64, G_UNICODE_NOT_PRESENT_OFFSET, 13869 },
- { 0xff65, G_UNICODE_NOT_PRESENT_OFFSET, 14105 },
- { 0xff66, G_UNICODE_NOT_PRESENT_OFFSET, 8615 },
- { 0xff67, G_UNICODE_NOT_PRESENT_OFFSET, 14109 },
- { 0xff68, G_UNICODE_NOT_PRESENT_OFFSET, 14113 },
- { 0xff69, G_UNICODE_NOT_PRESENT_OFFSET, 14117 },
- { 0xff6a, G_UNICODE_NOT_PRESENT_OFFSET, 14121 },
- { 0xff6b, G_UNICODE_NOT_PRESENT_OFFSET, 14125 },
- { 0xff6c, G_UNICODE_NOT_PRESENT_OFFSET, 14129 },
- { 0xff6d, G_UNICODE_NOT_PRESENT_OFFSET, 14133 },
- { 0xff6e, G_UNICODE_NOT_PRESENT_OFFSET, 14137 },
- { 0xff6f, G_UNICODE_NOT_PRESENT_OFFSET, 14141 },
- { 0xff70, G_UNICODE_NOT_PRESENT_OFFSET, 14145 },
- { 0xff71, G_UNICODE_NOT_PRESENT_OFFSET, 8431 },
- { 0xff72, G_UNICODE_NOT_PRESENT_OFFSET, 8435 },
- { 0xff73, G_UNICODE_NOT_PRESENT_OFFSET, 8439 },
- { 0xff74, G_UNICODE_NOT_PRESENT_OFFSET, 8443 },
- { 0xff75, G_UNICODE_NOT_PRESENT_OFFSET, 8447 },
- { 0xff76, G_UNICODE_NOT_PRESENT_OFFSET, 8451 },
- { 0xff77, G_UNICODE_NOT_PRESENT_OFFSET, 8455 },
- { 0xff78, G_UNICODE_NOT_PRESENT_OFFSET, 8459 },
- { 0xff79, G_UNICODE_NOT_PRESENT_OFFSET, 8463 },
- { 0xff7a, G_UNICODE_NOT_PRESENT_OFFSET, 8467 },
- { 0xff7b, G_UNICODE_NOT_PRESENT_OFFSET, 8471 },
- { 0xff7c, G_UNICODE_NOT_PRESENT_OFFSET, 8475 },
- { 0xff7d, G_UNICODE_NOT_PRESENT_OFFSET, 8479 },
- { 0xff7e, G_UNICODE_NOT_PRESENT_OFFSET, 8483 },
- { 0xff7f, G_UNICODE_NOT_PRESENT_OFFSET, 8487 },
- { 0xff80, G_UNICODE_NOT_PRESENT_OFFSET, 8491 },
- { 0xff81, G_UNICODE_NOT_PRESENT_OFFSET, 8495 },
- { 0xff82, G_UNICODE_NOT_PRESENT_OFFSET, 8499 },
- { 0xff83, G_UNICODE_NOT_PRESENT_OFFSET, 8503 },
- { 0xff84, G_UNICODE_NOT_PRESENT_OFFSET, 8507 },
- { 0xff85, G_UNICODE_NOT_PRESENT_OFFSET, 8511 },
- { 0xff86, G_UNICODE_NOT_PRESENT_OFFSET, 8515 },
- { 0xff87, G_UNICODE_NOT_PRESENT_OFFSET, 8519 },
- { 0xff88, G_UNICODE_NOT_PRESENT_OFFSET, 8523 },
- { 0xff89, G_UNICODE_NOT_PRESENT_OFFSET, 8527 },
- { 0xff8a, G_UNICODE_NOT_PRESENT_OFFSET, 8531 },
- { 0xff8b, G_UNICODE_NOT_PRESENT_OFFSET, 8535 },
- { 0xff8c, G_UNICODE_NOT_PRESENT_OFFSET, 8539 },
- { 0xff8d, G_UNICODE_NOT_PRESENT_OFFSET, 8543 },
- { 0xff8e, G_UNICODE_NOT_PRESENT_OFFSET, 8547 },
- { 0xff8f, G_UNICODE_NOT_PRESENT_OFFSET, 8551 },
- { 0xff90, G_UNICODE_NOT_PRESENT_OFFSET, 8555 },
- { 0xff91, G_UNICODE_NOT_PRESENT_OFFSET, 8559 },
- { 0xff92, G_UNICODE_NOT_PRESENT_OFFSET, 8563 },
- { 0xff93, G_UNICODE_NOT_PRESENT_OFFSET, 8567 },
- { 0xff94, G_UNICODE_NOT_PRESENT_OFFSET, 8571 },
- { 0xff95, G_UNICODE_NOT_PRESENT_OFFSET, 8575 },
- { 0xff96, G_UNICODE_NOT_PRESENT_OFFSET, 8579 },
- { 0xff97, G_UNICODE_NOT_PRESENT_OFFSET, 8583 },
- { 0xff98, G_UNICODE_NOT_PRESENT_OFFSET, 8587 },
- { 0xff99, G_UNICODE_NOT_PRESENT_OFFSET, 8591 },
- { 0xff9a, G_UNICODE_NOT_PRESENT_OFFSET, 8595 },
- { 0xff9b, G_UNICODE_NOT_PRESENT_OFFSET, 8599 },
- { 0xff9c, G_UNICODE_NOT_PRESENT_OFFSET, 8603 },
- { 0xff9d, G_UNICODE_NOT_PRESENT_OFFSET, 14149 },
- { 0xff9e, G_UNICODE_NOT_PRESENT_OFFSET, 14153 },
- { 0xff9f, G_UNICODE_NOT_PRESENT_OFFSET, 14157 },
- { 0xffa0, G_UNICODE_NOT_PRESENT_OFFSET, 7405 },
- { 0xffa1, G_UNICODE_NOT_PRESENT_OFFSET, 7201 },
- { 0xffa2, G_UNICODE_NOT_PRESENT_OFFSET, 7205 },
- { 0xffa3, G_UNICODE_NOT_PRESENT_OFFSET, 7209 },
- { 0xffa4, G_UNICODE_NOT_PRESENT_OFFSET, 7213 },
- { 0xffa5, G_UNICODE_NOT_PRESENT_OFFSET, 7217 },
- { 0xffa6, G_UNICODE_NOT_PRESENT_OFFSET, 7221 },
- { 0xffa7, G_UNICODE_NOT_PRESENT_OFFSET, 7225 },
- { 0xffa8, G_UNICODE_NOT_PRESENT_OFFSET, 7229 },
- { 0xffa9, G_UNICODE_NOT_PRESENT_OFFSET, 7233 },
- { 0xffaa, G_UNICODE_NOT_PRESENT_OFFSET, 7237 },
- { 0xffab, G_UNICODE_NOT_PRESENT_OFFSET, 7241 },
- { 0xffac, G_UNICODE_NOT_PRESENT_OFFSET, 7245 },
- { 0xffad, G_UNICODE_NOT_PRESENT_OFFSET, 7249 },
- { 0xffae, G_UNICODE_NOT_PRESENT_OFFSET, 7253 },
- { 0xffaf, G_UNICODE_NOT_PRESENT_OFFSET, 7257 },
- { 0xffb0, G_UNICODE_NOT_PRESENT_OFFSET, 7261 },
- { 0xffb1, G_UNICODE_NOT_PRESENT_OFFSET, 7265 },
- { 0xffb2, G_UNICODE_NOT_PRESENT_OFFSET, 7269 },
- { 0xffb3, G_UNICODE_NOT_PRESENT_OFFSET, 7273 },
- { 0xffb4, G_UNICODE_NOT_PRESENT_OFFSET, 7277 },
- { 0xffb5, G_UNICODE_NOT_PRESENT_OFFSET, 7281 },
- { 0xffb6, G_UNICODE_NOT_PRESENT_OFFSET, 7285 },
- { 0xffb7, G_UNICODE_NOT_PRESENT_OFFSET, 7289 },
- { 0xffb8, G_UNICODE_NOT_PRESENT_OFFSET, 7293 },
- { 0xffb9, G_UNICODE_NOT_PRESENT_OFFSET, 7297 },
- { 0xffba, G_UNICODE_NOT_PRESENT_OFFSET, 7301 },
- { 0xffbb, G_UNICODE_NOT_PRESENT_OFFSET, 7305 },
- { 0xffbc, G_UNICODE_NOT_PRESENT_OFFSET, 7309 },
- { 0xffbd, G_UNICODE_NOT_PRESENT_OFFSET, 7313 },
- { 0xffbe, G_UNICODE_NOT_PRESENT_OFFSET, 7317 },
- { 0xffc2, G_UNICODE_NOT_PRESENT_OFFSET, 7321 },
- { 0xffc3, G_UNICODE_NOT_PRESENT_OFFSET, 7325 },
- { 0xffc4, G_UNICODE_NOT_PRESENT_OFFSET, 7329 },
- { 0xffc5, G_UNICODE_NOT_PRESENT_OFFSET, 7333 },
- { 0xffc6, G_UNICODE_NOT_PRESENT_OFFSET, 7337 },
- { 0xffc7, G_UNICODE_NOT_PRESENT_OFFSET, 7341 },
- { 0xffca, G_UNICODE_NOT_PRESENT_OFFSET, 7345 },
- { 0xffcb, G_UNICODE_NOT_PRESENT_OFFSET, 7349 },
- { 0xffcc, G_UNICODE_NOT_PRESENT_OFFSET, 7353 },
- { 0xffcd, G_UNICODE_NOT_PRESENT_OFFSET, 7357 },
- { 0xffce, G_UNICODE_NOT_PRESENT_OFFSET, 7361 },
- { 0xffcf, G_UNICODE_NOT_PRESENT_OFFSET, 7365 },
- { 0xffd2, G_UNICODE_NOT_PRESENT_OFFSET, 7369 },
- { 0xffd3, G_UNICODE_NOT_PRESENT_OFFSET, 7373 },
- { 0xffd4, G_UNICODE_NOT_PRESENT_OFFSET, 7377 },
- { 0xffd5, G_UNICODE_NOT_PRESENT_OFFSET, 7381 },
- { 0xffd6, G_UNICODE_NOT_PRESENT_OFFSET, 7385 },
- { 0xffd7, G_UNICODE_NOT_PRESENT_OFFSET, 7389 },
- { 0xffda, G_UNICODE_NOT_PRESENT_OFFSET, 7393 },
- { 0xffdb, G_UNICODE_NOT_PRESENT_OFFSET, 7397 },
- { 0xffdc, G_UNICODE_NOT_PRESENT_OFFSET, 7401 },
- { 0xffe0, G_UNICODE_NOT_PRESENT_OFFSET, 14161 },
- { 0xffe1, G_UNICODE_NOT_PRESENT_OFFSET, 14164 },
- { 0xffe2, G_UNICODE_NOT_PRESENT_OFFSET, 14167 },
- { 0xffe3, G_UNICODE_NOT_PRESENT_OFFSET, 8 },
- { 0xffe4, G_UNICODE_NOT_PRESENT_OFFSET, 14170 },
- { 0xffe5, G_UNICODE_NOT_PRESENT_OFFSET, 14173 },
- { 0xffe6, G_UNICODE_NOT_PRESENT_OFFSET, 14176 },
- { 0xffe8, G_UNICODE_NOT_PRESENT_OFFSET, 14180 },
- { 0xffe9, G_UNICODE_NOT_PRESENT_OFFSET, 14184 },
- { 0xffea, G_UNICODE_NOT_PRESENT_OFFSET, 14188 },
- { 0xffeb, G_UNICODE_NOT_PRESENT_OFFSET, 14192 },
- { 0xffec, G_UNICODE_NOT_PRESENT_OFFSET, 14196 },
- { 0xffed, G_UNICODE_NOT_PRESENT_OFFSET, 14200 },
- { 0xffee, G_UNICODE_NOT_PRESENT_OFFSET, 14204 },
- { 0x1d15e, 14208, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d15f, 14217, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d160, 14226, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d161, 14239, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d162, 14252, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d163, 14265, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d164, 14278, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d1bb, 14291, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d1bc, 14300, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d1bd, 14309, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d1be, 14322, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d1bf, 14335, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d1c0, 14348, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x1d400, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d401, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d402, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d403, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d404, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d405, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d406, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d407, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d408, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d409, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d40a, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d40b, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d40c, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d40d, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d40e, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d40f, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d410, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d411, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d412, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d413, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d414, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d415, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d416, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d417, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d418, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d419, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d41a, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d41b, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d41c, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d41d, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d41e, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d41f, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d420, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d421, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d422, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d423, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d424, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d425, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d426, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d427, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d428, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d429, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d42a, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d42b, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d42c, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d42d, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d42e, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d42f, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d430, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d431, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d432, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d433, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d434, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d435, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d436, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d437, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d438, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d439, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d43a, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d43b, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d43c, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d43d, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d43e, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d43f, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d440, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d441, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d442, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d443, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d444, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d445, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d446, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d447, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d448, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d449, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d44a, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d44b, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d44c, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d44d, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d44e, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d44f, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d450, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d451, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d452, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d453, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d454, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d456, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d457, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d458, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d459, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d45a, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d45b, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d45c, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d45d, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d45e, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d45f, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d460, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d461, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d462, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d463, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d464, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d465, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d466, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d467, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d468, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d469, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d46a, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d46b, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d46c, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d46d, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d46e, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d46f, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d470, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d471, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d472, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d473, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d474, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d475, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d476, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d477, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d478, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d479, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d47a, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d47b, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d47c, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d47d, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d47e, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d47f, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d480, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d481, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d482, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d483, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d484, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d485, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d486, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d487, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d488, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d489, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d48a, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d48b, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d48c, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d48d, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d48e, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d48f, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d490, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d491, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d492, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d493, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d494, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d495, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d496, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d497, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d498, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d499, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d49a, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d49b, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d49c, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d49e, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d49f, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d4a2, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d4a5, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d4a6, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d4a9, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d4aa, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d4ab, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d4ac, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d4ae, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d4af, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d4b0, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d4b1, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d4b2, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d4b3, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d4b4, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d4b5, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d4b6, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d4b7, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d4b8, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d4b9, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d4bb, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d4bd, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d4be, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d4bf, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d4c0, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d4c2, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d4c3, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d4c5, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d4c6, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d4c7, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d4c8, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d4c9, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d4ca, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d4cb, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d4cc, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d4cd, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d4ce, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d4cf, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d4d0, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d4d1, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d4d2, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d4d3, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d4d4, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d4d5, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d4d6, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d4d7, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d4d8, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d4d9, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d4da, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d4db, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d4dc, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d4dd, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d4de, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d4df, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d4e0, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d4e1, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d4e2, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d4e3, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d4e4, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d4e5, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d4e6, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d4e7, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d4e8, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d4e9, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d4ea, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d4eb, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d4ec, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d4ed, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d4ee, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d4ef, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d4f0, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d4f1, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d4f2, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d4f3, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d4f4, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d4f5, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d4f6, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d4f7, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d4f8, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d4f9, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d4fa, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d4fb, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d4fc, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d4fd, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d4fe, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d4ff, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d500, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d501, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d502, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d503, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d504, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d505, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d507, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d508, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d509, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d50a, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d50d, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d50e, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d50f, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d510, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d511, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d512, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d513, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d514, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d516, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d517, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d518, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d519, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d51a, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d51b, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d51c, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d51e, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d51f, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d520, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d521, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d522, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d523, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d524, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d525, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d526, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d527, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d528, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d529, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d52a, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d52b, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d52c, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d52d, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d52e, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d52f, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d530, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d531, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d532, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d533, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d534, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d535, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d536, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d537, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d538, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d539, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d53b, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d53c, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d53d, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d53e, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d540, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d541, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d542, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d543, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d544, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d546, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d54a, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d54b, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d54c, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d54d, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d54e, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d54f, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d550, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d552, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d553, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d554, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d555, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d556, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d557, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d558, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d559, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d55a, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d55b, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d55c, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d55d, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d55e, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d55f, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d560, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d561, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d562, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d563, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d564, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d565, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d566, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d567, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d568, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d569, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d56a, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d56b, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d56c, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d56d, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d56e, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d56f, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d570, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d571, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d572, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d573, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d574, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d575, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d576, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d577, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d578, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d579, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d57a, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d57b, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d57c, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d57d, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d57e, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d57f, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d580, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d581, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d582, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d583, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d584, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d585, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d586, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d587, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d588, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d589, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d58a, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d58b, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d58c, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d58d, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d58e, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d58f, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d590, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d591, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d592, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d593, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d594, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d595, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d596, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d597, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d598, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d599, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d59a, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d59b, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d59c, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d59d, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d59e, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d59f, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d5a0, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d5a1, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d5a2, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d5a3, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d5a4, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d5a5, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d5a6, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d5a7, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d5a8, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d5a9, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d5aa, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d5ab, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d5ac, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d5ad, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d5ae, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d5af, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d5b0, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d5b1, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d5b2, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d5b3, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d5b4, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d5b5, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d5b6, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d5b7, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d5b8, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d5b9, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d5ba, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d5bb, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d5bc, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d5bd, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d5be, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d5bf, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d5c0, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d5c1, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d5c2, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d5c3, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d5c4, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d5c5, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d5c6, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d5c7, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d5c8, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d5c9, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d5ca, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d5cb, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d5cc, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d5cd, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d5ce, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d5cf, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d5d0, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d5d1, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d5d2, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d5d3, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d5d4, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d5d5, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d5d6, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d5d7, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d5d8, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d5d9, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d5da, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d5db, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d5dc, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d5dd, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d5de, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d5df, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d5e0, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d5e1, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d5e2, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d5e3, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d5e4, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d5e5, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d5e6, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d5e7, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d5e8, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d5e9, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d5ea, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d5eb, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d5ec, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d5ed, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d5ee, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d5ef, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d5f0, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d5f1, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d5f2, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d5f3, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d5f4, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d5f5, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d5f6, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d5f7, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d5f8, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d5f9, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d5fa, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d5fb, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d5fc, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d5fd, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d5fe, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d5ff, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d600, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d601, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d602, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d603, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d604, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d605, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d606, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d607, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d608, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d609, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d60a, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d60b, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d60c, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d60d, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d60e, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d60f, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d610, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d611, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d612, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d613, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d614, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d615, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d616, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d617, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d618, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d619, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d61a, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d61b, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d61c, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d61d, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d61e, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d61f, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d620, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d621, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d622, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d623, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d624, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d625, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d626, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d627, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d628, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d629, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d62a, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d62b, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d62c, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d62d, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d62e, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d62f, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d630, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d631, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d632, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d633, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d634, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d635, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d636, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d637, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d638, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d639, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d63a, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d63b, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d63c, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d63d, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d63e, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d63f, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d640, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d641, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d642, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d643, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d644, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d645, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d646, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d647, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d648, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d649, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d64a, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d64b, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d64c, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d64d, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d64e, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d64f, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d650, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d651, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d652, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d653, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d654, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d655, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d656, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d657, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d658, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d659, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d65a, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d65b, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d65c, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d65d, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d65e, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d65f, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d660, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d661, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d662, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d663, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d664, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d665, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d666, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d667, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d668, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d669, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d66a, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d66b, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d66c, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d66d, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d66e, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d66f, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d670, G_UNICODE_NOT_PRESENT_OFFSET, 5831 },
- { 0x1d671, G_UNICODE_NOT_PRESENT_OFFSET, 5042 },
- { 0x1d672, G_UNICODE_NOT_PRESENT_OFFSET, 4982 },
- { 0x1d673, G_UNICODE_NOT_PRESENT_OFFSET, 5077 },
- { 0x1d674, G_UNICODE_NOT_PRESENT_OFFSET, 5046 },
- { 0x1d675, G_UNICODE_NOT_PRESENT_OFFSET, 5048 },
- { 0x1d676, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
- { 0x1d677, G_UNICODE_NOT_PRESENT_OFFSET, 5005 },
- { 0x1d678, G_UNICODE_NOT_PRESENT_OFFSET, 5010 },
- { 0x1d679, G_UNICODE_NOT_PRESENT_OFFSET, 5835 },
- { 0x1d67a, G_UNICODE_NOT_PRESENT_OFFSET, 5040 },
- { 0x1d67b, G_UNICODE_NOT_PRESENT_OFFSET, 5012 },
- { 0x1d67c, G_UNICODE_NOT_PRESENT_OFFSET, 5050 },
- { 0x1d67d, G_UNICODE_NOT_PRESENT_OFFSET, 5014 },
- { 0x1d67e, G_UNICODE_NOT_PRESENT_OFFSET, 5837 },
- { 0x1d67f, G_UNICODE_NOT_PRESENT_OFFSET, 5019 },
- { 0x1d680, G_UNICODE_NOT_PRESENT_OFFSET, 5021 },
- { 0x1d681, G_UNICODE_NOT_PRESENT_OFFSET, 5023 },
- { 0x1d682, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
- { 0x1d683, G_UNICODE_NOT_PRESENT_OFFSET, 5841 },
- { 0x1d684, G_UNICODE_NOT_PRESENT_OFFSET, 5843 },
- { 0x1d685, G_UNICODE_NOT_PRESENT_OFFSET, 5168 },
- { 0x1d686, G_UNICODE_NOT_PRESENT_OFFSET, 5845 },
- { 0x1d687, G_UNICODE_NOT_PRESENT_OFFSET, 5185 },
- { 0x1d688, G_UNICODE_NOT_PRESENT_OFFSET, 5847 },
- { 0x1d689, G_UNICODE_NOT_PRESENT_OFFSET, 5035 },
- { 0x1d68a, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
- { 0x1d68b, G_UNICODE_NOT_PRESENT_OFFSET, 5849 },
- { 0x1d68c, G_UNICODE_NOT_PRESENT_OFFSET, 5228 },
- { 0x1d68d, G_UNICODE_NOT_PRESENT_OFFSET, 5079 },
- { 0x1d68e, G_UNICODE_NOT_PRESENT_OFFSET, 5044 },
- { 0x1d68f, G_UNICODE_NOT_PRESENT_OFFSET, 5851 },
- { 0x1d690, G_UNICODE_NOT_PRESENT_OFFSET, 5003 },
- { 0x1d691, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
- { 0x1d692, G_UNICODE_NOT_PRESENT_OFFSET, 4943 },
- { 0x1d693, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
- { 0x1d694, G_UNICODE_NOT_PRESENT_OFFSET, 5853 },
- { 0x1d695, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
- { 0x1d696, G_UNICODE_NOT_PRESENT_OFFSET, 5230 },
- { 0x1d697, G_UNICODE_NOT_PRESENT_OFFSET, 4969 },
- { 0x1d698, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
- { 0x1d699, G_UNICODE_NOT_PRESENT_OFFSET, 5855 },
- { 0x1d69a, G_UNICODE_NOT_PRESENT_OFFSET, 5857 },
- { 0x1d69b, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
- { 0x1d69c, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
- { 0x1d69d, G_UNICODE_NOT_PRESENT_OFFSET, 5859 },
- { 0x1d69e, G_UNICODE_NOT_PRESENT_OFFSET, 5861 },
- { 0x1d69f, G_UNICODE_NOT_PRESENT_OFFSET, 5204 },
- { 0x1d6a0, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
- { 0x1d6a1, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
- { 0x1d6a2, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
- { 0x1d6a3, G_UNICODE_NOT_PRESENT_OFFSET, 5863 },
- { 0x1d6a8, G_UNICODE_NOT_PRESENT_OFFSET, 14361 },
- { 0x1d6a9, G_UNICODE_NOT_PRESENT_OFFSET, 14364 },
- { 0x1d6aa, G_UNICODE_NOT_PRESENT_OFFSET, 5067 },
- { 0x1d6ab, G_UNICODE_NOT_PRESENT_OFFSET, 14367 },
- { 0x1d6ac, G_UNICODE_NOT_PRESENT_OFFSET, 14370 },
- { 0x1d6ad, G_UNICODE_NOT_PRESENT_OFFSET, 14373 },
- { 0x1d6ae, G_UNICODE_NOT_PRESENT_OFFSET, 14376 },
- { 0x1d6af, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d6b0, G_UNICODE_NOT_PRESENT_OFFSET, 14379 },
- { 0x1d6b1, G_UNICODE_NOT_PRESENT_OFFSET, 14382 },
- { 0x1d6b2, G_UNICODE_NOT_PRESENT_OFFSET, 14385 },
- { 0x1d6b3, G_UNICODE_NOT_PRESENT_OFFSET, 14388 },
- { 0x1d6b4, G_UNICODE_NOT_PRESENT_OFFSET, 14391 },
- { 0x1d6b5, G_UNICODE_NOT_PRESENT_OFFSET, 14394 },
- { 0x1d6b6, G_UNICODE_NOT_PRESENT_OFFSET, 14397 },
- { 0x1d6b7, G_UNICODE_NOT_PRESENT_OFFSET, 5070 },
- { 0x1d6b8, G_UNICODE_NOT_PRESENT_OFFSET, 14400 },
- { 0x1d6b9, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d6ba, G_UNICODE_NOT_PRESENT_OFFSET, 14403 },
- { 0x1d6bb, G_UNICODE_NOT_PRESENT_OFFSET, 14406 },
- { 0x1d6bc, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
- { 0x1d6bd, G_UNICODE_NOT_PRESENT_OFFSET, 14409 },
- { 0x1d6be, G_UNICODE_NOT_PRESENT_OFFSET, 14412 },
- { 0x1d6bf, G_UNICODE_NOT_PRESENT_OFFSET, 14415 },
- { 0x1d6c0, G_UNICODE_NOT_PRESENT_OFFSET, 5037 },
- { 0x1d6c1, G_UNICODE_NOT_PRESENT_OFFSET, 14418 },
- { 0x1d6c2, G_UNICODE_NOT_PRESENT_OFFSET, 14422 },
- { 0x1d6c3, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
- { 0x1d6c4, G_UNICODE_NOT_PRESENT_OFFSET, 5064 },
- { 0x1d6c5, G_UNICODE_NOT_PRESENT_OFFSET, 14425 },
- { 0x1d6c6, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d6c7, G_UNICODE_NOT_PRESENT_OFFSET, 14428 },
- { 0x1d6c8, G_UNICODE_NOT_PRESENT_OFFSET, 14431 },
- { 0x1d6c9, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d6ca, G_UNICODE_NOT_PRESENT_OFFSET, 4548 },
- { 0x1d6cb, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d6cc, G_UNICODE_NOT_PRESENT_OFFSET, 14434 },
- { 0x1d6cd, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
- { 0x1d6ce, G_UNICODE_NOT_PRESENT_OFFSET, 14437 },
- { 0x1d6cf, G_UNICODE_NOT_PRESENT_OFFSET, 14440 },
- { 0x1d6d0, G_UNICODE_NOT_PRESENT_OFFSET, 14443 },
- { 0x1d6d1, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d6d2, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d6d3, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
- { 0x1d6d4, G_UNICODE_NOT_PRESENT_OFFSET, 14446 },
- { 0x1d6d5, G_UNICODE_NOT_PRESENT_OFFSET, 14449 },
- { 0x1d6d6, G_UNICODE_NOT_PRESENT_OFFSET, 14452 },
- { 0x1d6d7, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d6d8, G_UNICODE_NOT_PRESENT_OFFSET, 14455 },
- { 0x1d6d9, G_UNICODE_NOT_PRESENT_OFFSET, 14458 },
- { 0x1d6da, G_UNICODE_NOT_PRESENT_OFFSET, 14461 },
- { 0x1d6db, G_UNICODE_NOT_PRESENT_OFFSET, 14464 },
- { 0x1d6dc, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d6dd, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d6de, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d6df, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d6e0, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d6e1, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d6e2, G_UNICODE_NOT_PRESENT_OFFSET, 14361 },
- { 0x1d6e3, G_UNICODE_NOT_PRESENT_OFFSET, 14364 },
- { 0x1d6e4, G_UNICODE_NOT_PRESENT_OFFSET, 5067 },
- { 0x1d6e5, G_UNICODE_NOT_PRESENT_OFFSET, 14367 },
- { 0x1d6e6, G_UNICODE_NOT_PRESENT_OFFSET, 14370 },
- { 0x1d6e7, G_UNICODE_NOT_PRESENT_OFFSET, 14373 },
- { 0x1d6e8, G_UNICODE_NOT_PRESENT_OFFSET, 14376 },
- { 0x1d6e9, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d6ea, G_UNICODE_NOT_PRESENT_OFFSET, 14379 },
- { 0x1d6eb, G_UNICODE_NOT_PRESENT_OFFSET, 14382 },
- { 0x1d6ec, G_UNICODE_NOT_PRESENT_OFFSET, 14385 },
- { 0x1d6ed, G_UNICODE_NOT_PRESENT_OFFSET, 14388 },
- { 0x1d6ee, G_UNICODE_NOT_PRESENT_OFFSET, 14391 },
- { 0x1d6ef, G_UNICODE_NOT_PRESENT_OFFSET, 14394 },
- { 0x1d6f0, G_UNICODE_NOT_PRESENT_OFFSET, 14397 },
- { 0x1d6f1, G_UNICODE_NOT_PRESENT_OFFSET, 5070 },
- { 0x1d6f2, G_UNICODE_NOT_PRESENT_OFFSET, 14400 },
- { 0x1d6f3, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d6f4, G_UNICODE_NOT_PRESENT_OFFSET, 14403 },
- { 0x1d6f5, G_UNICODE_NOT_PRESENT_OFFSET, 14406 },
- { 0x1d6f6, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
- { 0x1d6f7, G_UNICODE_NOT_PRESENT_OFFSET, 14409 },
- { 0x1d6f8, G_UNICODE_NOT_PRESENT_OFFSET, 14412 },
- { 0x1d6f9, G_UNICODE_NOT_PRESENT_OFFSET, 14415 },
- { 0x1d6fa, G_UNICODE_NOT_PRESENT_OFFSET, 5037 },
- { 0x1d6fb, G_UNICODE_NOT_PRESENT_OFFSET, 14418 },
- { 0x1d6fc, G_UNICODE_NOT_PRESENT_OFFSET, 14422 },
- { 0x1d6fd, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
- { 0x1d6fe, G_UNICODE_NOT_PRESENT_OFFSET, 5064 },
- { 0x1d6ff, G_UNICODE_NOT_PRESENT_OFFSET, 14425 },
- { 0x1d700, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d701, G_UNICODE_NOT_PRESENT_OFFSET, 14428 },
- { 0x1d702, G_UNICODE_NOT_PRESENT_OFFSET, 14431 },
- { 0x1d703, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d704, G_UNICODE_NOT_PRESENT_OFFSET, 4548 },
- { 0x1d705, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d706, G_UNICODE_NOT_PRESENT_OFFSET, 14434 },
- { 0x1d707, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
- { 0x1d708, G_UNICODE_NOT_PRESENT_OFFSET, 14437 },
- { 0x1d709, G_UNICODE_NOT_PRESENT_OFFSET, 14440 },
- { 0x1d70a, G_UNICODE_NOT_PRESENT_OFFSET, 14443 },
- { 0x1d70b, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d70c, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d70d, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
- { 0x1d70e, G_UNICODE_NOT_PRESENT_OFFSET, 14446 },
- { 0x1d70f, G_UNICODE_NOT_PRESENT_OFFSET, 14449 },
- { 0x1d710, G_UNICODE_NOT_PRESENT_OFFSET, 14452 },
- { 0x1d711, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d712, G_UNICODE_NOT_PRESENT_OFFSET, 14455 },
- { 0x1d713, G_UNICODE_NOT_PRESENT_OFFSET, 14458 },
- { 0x1d714, G_UNICODE_NOT_PRESENT_OFFSET, 14461 },
- { 0x1d715, G_UNICODE_NOT_PRESENT_OFFSET, 14464 },
- { 0x1d716, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d717, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d718, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d719, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d71a, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d71b, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d71c, G_UNICODE_NOT_PRESENT_OFFSET, 14361 },
- { 0x1d71d, G_UNICODE_NOT_PRESENT_OFFSET, 14364 },
- { 0x1d71e, G_UNICODE_NOT_PRESENT_OFFSET, 5067 },
- { 0x1d71f, G_UNICODE_NOT_PRESENT_OFFSET, 14367 },
- { 0x1d720, G_UNICODE_NOT_PRESENT_OFFSET, 14370 },
- { 0x1d721, G_UNICODE_NOT_PRESENT_OFFSET, 14373 },
- { 0x1d722, G_UNICODE_NOT_PRESENT_OFFSET, 14376 },
- { 0x1d723, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d724, G_UNICODE_NOT_PRESENT_OFFSET, 14379 },
- { 0x1d725, G_UNICODE_NOT_PRESENT_OFFSET, 14382 },
- { 0x1d726, G_UNICODE_NOT_PRESENT_OFFSET, 14385 },
- { 0x1d727, G_UNICODE_NOT_PRESENT_OFFSET, 14388 },
- { 0x1d728, G_UNICODE_NOT_PRESENT_OFFSET, 14391 },
- { 0x1d729, G_UNICODE_NOT_PRESENT_OFFSET, 14394 },
- { 0x1d72a, G_UNICODE_NOT_PRESENT_OFFSET, 14397 },
- { 0x1d72b, G_UNICODE_NOT_PRESENT_OFFSET, 5070 },
- { 0x1d72c, G_UNICODE_NOT_PRESENT_OFFSET, 14400 },
- { 0x1d72d, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d72e, G_UNICODE_NOT_PRESENT_OFFSET, 14403 },
- { 0x1d72f, G_UNICODE_NOT_PRESENT_OFFSET, 14406 },
- { 0x1d730, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
- { 0x1d731, G_UNICODE_NOT_PRESENT_OFFSET, 14409 },
- { 0x1d732, G_UNICODE_NOT_PRESENT_OFFSET, 14412 },
- { 0x1d733, G_UNICODE_NOT_PRESENT_OFFSET, 14415 },
- { 0x1d734, G_UNICODE_NOT_PRESENT_OFFSET, 5037 },
- { 0x1d735, G_UNICODE_NOT_PRESENT_OFFSET, 14418 },
- { 0x1d736, G_UNICODE_NOT_PRESENT_OFFSET, 14422 },
- { 0x1d737, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
- { 0x1d738, G_UNICODE_NOT_PRESENT_OFFSET, 5064 },
- { 0x1d739, G_UNICODE_NOT_PRESENT_OFFSET, 14425 },
- { 0x1d73a, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d73b, G_UNICODE_NOT_PRESENT_OFFSET, 14428 },
- { 0x1d73c, G_UNICODE_NOT_PRESENT_OFFSET, 14431 },
- { 0x1d73d, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d73e, G_UNICODE_NOT_PRESENT_OFFSET, 4548 },
- { 0x1d73f, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d740, G_UNICODE_NOT_PRESENT_OFFSET, 14434 },
- { 0x1d741, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
- { 0x1d742, G_UNICODE_NOT_PRESENT_OFFSET, 14437 },
- { 0x1d743, G_UNICODE_NOT_PRESENT_OFFSET, 14440 },
- { 0x1d744, G_UNICODE_NOT_PRESENT_OFFSET, 14443 },
- { 0x1d745, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d746, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d747, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
- { 0x1d748, G_UNICODE_NOT_PRESENT_OFFSET, 14446 },
- { 0x1d749, G_UNICODE_NOT_PRESENT_OFFSET, 14449 },
- { 0x1d74a, G_UNICODE_NOT_PRESENT_OFFSET, 14452 },
- { 0x1d74b, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d74c, G_UNICODE_NOT_PRESENT_OFFSET, 14455 },
- { 0x1d74d, G_UNICODE_NOT_PRESENT_OFFSET, 14458 },
- { 0x1d74e, G_UNICODE_NOT_PRESENT_OFFSET, 14461 },
- { 0x1d74f, G_UNICODE_NOT_PRESENT_OFFSET, 14464 },
- { 0x1d750, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d751, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d752, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d753, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d754, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d755, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d756, G_UNICODE_NOT_PRESENT_OFFSET, 14361 },
- { 0x1d757, G_UNICODE_NOT_PRESENT_OFFSET, 14364 },
- { 0x1d758, G_UNICODE_NOT_PRESENT_OFFSET, 5067 },
- { 0x1d759, G_UNICODE_NOT_PRESENT_OFFSET, 14367 },
- { 0x1d75a, G_UNICODE_NOT_PRESENT_OFFSET, 14370 },
- { 0x1d75b, G_UNICODE_NOT_PRESENT_OFFSET, 14373 },
- { 0x1d75c, G_UNICODE_NOT_PRESENT_OFFSET, 14376 },
- { 0x1d75d, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d75e, G_UNICODE_NOT_PRESENT_OFFSET, 14379 },
- { 0x1d75f, G_UNICODE_NOT_PRESENT_OFFSET, 14382 },
- { 0x1d760, G_UNICODE_NOT_PRESENT_OFFSET, 14385 },
- { 0x1d761, G_UNICODE_NOT_PRESENT_OFFSET, 14388 },
- { 0x1d762, G_UNICODE_NOT_PRESENT_OFFSET, 14391 },
- { 0x1d763, G_UNICODE_NOT_PRESENT_OFFSET, 14394 },
- { 0x1d764, G_UNICODE_NOT_PRESENT_OFFSET, 14397 },
- { 0x1d765, G_UNICODE_NOT_PRESENT_OFFSET, 5070 },
- { 0x1d766, G_UNICODE_NOT_PRESENT_OFFSET, 14400 },
- { 0x1d767, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d768, G_UNICODE_NOT_PRESENT_OFFSET, 14403 },
- { 0x1d769, G_UNICODE_NOT_PRESENT_OFFSET, 14406 },
- { 0x1d76a, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
- { 0x1d76b, G_UNICODE_NOT_PRESENT_OFFSET, 14409 },
- { 0x1d76c, G_UNICODE_NOT_PRESENT_OFFSET, 14412 },
- { 0x1d76d, G_UNICODE_NOT_PRESENT_OFFSET, 14415 },
- { 0x1d76e, G_UNICODE_NOT_PRESENT_OFFSET, 5037 },
- { 0x1d76f, G_UNICODE_NOT_PRESENT_OFFSET, 14418 },
- { 0x1d770, G_UNICODE_NOT_PRESENT_OFFSET, 14422 },
- { 0x1d771, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
- { 0x1d772, G_UNICODE_NOT_PRESENT_OFFSET, 5064 },
- { 0x1d773, G_UNICODE_NOT_PRESENT_OFFSET, 14425 },
- { 0x1d774, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d775, G_UNICODE_NOT_PRESENT_OFFSET, 14428 },
- { 0x1d776, G_UNICODE_NOT_PRESENT_OFFSET, 14431 },
- { 0x1d777, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d778, G_UNICODE_NOT_PRESENT_OFFSET, 4548 },
- { 0x1d779, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d77a, G_UNICODE_NOT_PRESENT_OFFSET, 14434 },
- { 0x1d77b, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
- { 0x1d77c, G_UNICODE_NOT_PRESENT_OFFSET, 14437 },
- { 0x1d77d, G_UNICODE_NOT_PRESENT_OFFSET, 14440 },
- { 0x1d77e, G_UNICODE_NOT_PRESENT_OFFSET, 14443 },
- { 0x1d77f, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d780, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d781, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
- { 0x1d782, G_UNICODE_NOT_PRESENT_OFFSET, 14446 },
- { 0x1d783, G_UNICODE_NOT_PRESENT_OFFSET, 14449 },
- { 0x1d784, G_UNICODE_NOT_PRESENT_OFFSET, 14452 },
- { 0x1d785, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d786, G_UNICODE_NOT_PRESENT_OFFSET, 14455 },
- { 0x1d787, G_UNICODE_NOT_PRESENT_OFFSET, 14458 },
- { 0x1d788, G_UNICODE_NOT_PRESENT_OFFSET, 14461 },
- { 0x1d789, G_UNICODE_NOT_PRESENT_OFFSET, 14464 },
- { 0x1d78a, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d78b, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d78c, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d78d, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d78e, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d78f, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d790, G_UNICODE_NOT_PRESENT_OFFSET, 14361 },
- { 0x1d791, G_UNICODE_NOT_PRESENT_OFFSET, 14364 },
- { 0x1d792, G_UNICODE_NOT_PRESENT_OFFSET, 5067 },
- { 0x1d793, G_UNICODE_NOT_PRESENT_OFFSET, 14367 },
- { 0x1d794, G_UNICODE_NOT_PRESENT_OFFSET, 14370 },
- { 0x1d795, G_UNICODE_NOT_PRESENT_OFFSET, 14373 },
- { 0x1d796, G_UNICODE_NOT_PRESENT_OFFSET, 14376 },
- { 0x1d797, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d798, G_UNICODE_NOT_PRESENT_OFFSET, 14379 },
- { 0x1d799, G_UNICODE_NOT_PRESENT_OFFSET, 14382 },
- { 0x1d79a, G_UNICODE_NOT_PRESENT_OFFSET, 14385 },
- { 0x1d79b, G_UNICODE_NOT_PRESENT_OFFSET, 14388 },
- { 0x1d79c, G_UNICODE_NOT_PRESENT_OFFSET, 14391 },
- { 0x1d79d, G_UNICODE_NOT_PRESENT_OFFSET, 14394 },
- { 0x1d79e, G_UNICODE_NOT_PRESENT_OFFSET, 14397 },
- { 0x1d79f, G_UNICODE_NOT_PRESENT_OFFSET, 5070 },
- { 0x1d7a0, G_UNICODE_NOT_PRESENT_OFFSET, 14400 },
- { 0x1d7a1, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
- { 0x1d7a2, G_UNICODE_NOT_PRESENT_OFFSET, 14403 },
- { 0x1d7a3, G_UNICODE_NOT_PRESENT_OFFSET, 14406 },
- { 0x1d7a4, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
- { 0x1d7a5, G_UNICODE_NOT_PRESENT_OFFSET, 14409 },
- { 0x1d7a6, G_UNICODE_NOT_PRESENT_OFFSET, 14412 },
- { 0x1d7a7, G_UNICODE_NOT_PRESENT_OFFSET, 14415 },
- { 0x1d7a8, G_UNICODE_NOT_PRESENT_OFFSET, 5037 },
- { 0x1d7a9, G_UNICODE_NOT_PRESENT_OFFSET, 14418 },
- { 0x1d7aa, G_UNICODE_NOT_PRESENT_OFFSET, 14422 },
- { 0x1d7ab, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
- { 0x1d7ac, G_UNICODE_NOT_PRESENT_OFFSET, 5064 },
- { 0x1d7ad, G_UNICODE_NOT_PRESENT_OFFSET, 14425 },
- { 0x1d7ae, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d7af, G_UNICODE_NOT_PRESENT_OFFSET, 14428 },
- { 0x1d7b0, G_UNICODE_NOT_PRESENT_OFFSET, 14431 },
- { 0x1d7b1, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d7b2, G_UNICODE_NOT_PRESENT_OFFSET, 4548 },
- { 0x1d7b3, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d7b4, G_UNICODE_NOT_PRESENT_OFFSET, 14434 },
- { 0x1d7b5, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
- { 0x1d7b6, G_UNICODE_NOT_PRESENT_OFFSET, 14437 },
- { 0x1d7b7, G_UNICODE_NOT_PRESENT_OFFSET, 14440 },
- { 0x1d7b8, G_UNICODE_NOT_PRESENT_OFFSET, 14443 },
- { 0x1d7b9, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d7ba, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d7bb, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
- { 0x1d7bc, G_UNICODE_NOT_PRESENT_OFFSET, 14446 },
- { 0x1d7bd, G_UNICODE_NOT_PRESENT_OFFSET, 14449 },
- { 0x1d7be, G_UNICODE_NOT_PRESENT_OFFSET, 14452 },
- { 0x1d7bf, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d7c0, G_UNICODE_NOT_PRESENT_OFFSET, 14455 },
- { 0x1d7c1, G_UNICODE_NOT_PRESENT_OFFSET, 14458 },
- { 0x1d7c2, G_UNICODE_NOT_PRESENT_OFFSET, 14461 },
- { 0x1d7c3, G_UNICODE_NOT_PRESENT_OFFSET, 14464 },
- { 0x1d7c4, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
- { 0x1d7c5, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
- { 0x1d7c6, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
- { 0x1d7c7, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
- { 0x1d7c8, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
- { 0x1d7c9, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
- { 0x1d7ce, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0x1d7cf, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0x1d7d0, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0x1d7d1, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0x1d7d2, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0x1d7d3, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0x1d7d4, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0x1d7d5, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0x1d7d6, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0x1d7d7, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0x1d7d8, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0x1d7d9, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0x1d7da, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0x1d7db, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0x1d7dc, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0x1d7dd, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0x1d7de, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0x1d7df, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0x1d7e0, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0x1d7e1, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0x1d7e2, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0x1d7e3, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0x1d7e4, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0x1d7e5, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0x1d7e6, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0x1d7e7, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0x1d7e8, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0x1d7e9, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0x1d7ea, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0x1d7eb, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0x1d7ec, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0x1d7ed, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0x1d7ee, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0x1d7ef, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0x1d7f0, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0x1d7f1, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0x1d7f2, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0x1d7f3, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0x1d7f4, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0x1d7f5, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0x1d7f6, G_UNICODE_NOT_PRESENT_OFFSET, 4941 },
- { 0x1d7f7, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
- { 0x1d7f8, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
- { 0x1d7f9, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
- { 0x1d7fa, G_UNICODE_NOT_PRESENT_OFFSET, 4945 },
- { 0x1d7fb, G_UNICODE_NOT_PRESENT_OFFSET, 4947 },
- { 0x1d7fc, G_UNICODE_NOT_PRESENT_OFFSET, 4949 },
- { 0x1d7fd, G_UNICODE_NOT_PRESENT_OFFSET, 4951 },
- { 0x1d7fe, G_UNICODE_NOT_PRESENT_OFFSET, 4953 },
- { 0x1d7ff, G_UNICODE_NOT_PRESENT_OFFSET, 4955 },
- { 0x2f800, 14468, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f801, 14472, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f802, 14476, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f803, 14480, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f804, 14485, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f805, 11545, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f806, 14489, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f807, 14493, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f808, 14497, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f809, 14501, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f80a, 11549, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f80b, 14505, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f80c, 14509, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f80d, 14513, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f80e, 11553, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f80f, 14518, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f810, 14522, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f811, 14526, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f812, 14530, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f813, 14535, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f814, 14539, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f815, 14543, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f816, 14547, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f817, 14552, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f818, 14556, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f819, 14560, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f81a, 14564, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f81b, 14568, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f81c, 14572, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f81d, 5967, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f81e, 14577, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f81f, 14581, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f820, 14585, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f821, 14589, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f822, 14593, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f823, 14597, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f824, 14601, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f825, 14605, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f826, 11557, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f827, 11561, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f828, 14609, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f829, 14613, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f82a, 14617, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f82b, 10837, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f82c, 14621, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f82d, 11565, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f82e, 14625, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f82f, 14629, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f830, 14633, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f831, 14637, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f832, 14637, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f833, 14637, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f834, 14641, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f835, 14646, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f836, 14650, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f837, 14654, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f838, 14658, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f839, 14663, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f83a, 14667, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f83b, 14671, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f83c, 14675, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f83d, 14679, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f83e, 14683, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f83f, 14687, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f840, 14691, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f841, 14695, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f842, 14699, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f843, 14703, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f844, 14707, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f845, 14711, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f846, 14711, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f847, 14715, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f848, 14719, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f849, 14723, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f84a, 14727, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f84b, 14731, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f84c, 11573, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f84d, 14735, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f84e, 14739, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f84f, 14743, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f850, 11421, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f851, 14747, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f852, 14751, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f853, 14755, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f854, 14759, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f855, 14763, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f856, 14767, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f857, 14771, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f858, 14775, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f859, 14779, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f85a, 14784, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f85b, 14788, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f85c, 14792, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f85d, 14796, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f85e, 14800, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f85f, 14804, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f860, 14808, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f861, 14813, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f862, 14818, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f863, 14822, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f864, 14826, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f865, 14830, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f866, 14834, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f867, 14838, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f868, 14842, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f869, 14847, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f86a, 14851, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f86b, 14851, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f86c, 14855, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f86d, 14860, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f86e, 14864, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f86f, 10821, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f870, 14868, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f871, 14872, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f872, 14877, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f873, 14881, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f874, 14885, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f875, 6071, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f876, 14889, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f877, 14893, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f878, 6079, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f879, 14897, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f87a, 14901, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f87b, 14905, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f87c, 14910, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f87d, 14914, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f87e, 14919, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f87f, 14923, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f880, 14927, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f881, 14931, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f882, 14935, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f883, 14939, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f884, 14943, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f885, 14947, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f886, 14951, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f887, 14955, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f888, 14959, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f889, 14963, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f88a, 14968, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f88b, 14972, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f88c, 14976, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f88d, 14980, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f88e, 10613, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f88f, 14984, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f890, 6119, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f891, 14989, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f892, 14989, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f893, 14994, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f894, 14998, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f895, 14998, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f896, 15002, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f897, 15006, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f898, 15011, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f899, 15016, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f89a, 15020, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f89b, 15024, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f89c, 15028, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f89d, 15032, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f89e, 15036, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f89f, 15040, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a0, 15044, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a1, 15048, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a2, 15052, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a3, 11593, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a4, 15056, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a5, 15061, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a6, 15065, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a7, 15069, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a8, 15073, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8a9, 15069, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8aa, 15077, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ab, 11601, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ac, 15081, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ad, 15085, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ae, 15089, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8af, 15093, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b0, 11605, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b1, 10505, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b2, 15097, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b3, 15101, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b4, 15105, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b5, 15109, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b6, 15113, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b7, 15117, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b8, 15121, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8b9, 15126, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ba, 15130, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8bb, 15134, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8bc, 15138, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8bd, 15142, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8be, 15146, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8bf, 15151, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c0, 15155, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c1, 15159, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c2, 15163, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c3, 15167, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c4, 15171, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c5, 15175, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c6, 15179, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c7, 15183, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c8, 11609, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8c9, 15187, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ca, 15191, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8cb, 15196, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8cc, 15200, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8cd, 15204, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ce, 15208, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8cf, 11617, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d0, 15212, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d1, 15216, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d2, 15220, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d3, 15224, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d4, 15228, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d5, 15232, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d6, 15236, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d7, 15240, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d8, 10617, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8d9, 15244, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8da, 15248, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8db, 15252, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8dc, 15256, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8dd, 15260, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8de, 15265, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8df, 15269, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e0, 15273, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e1, 15277, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e2, 11621, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e3, 15281, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e4, 15286, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e5, 15290, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e6, 15294, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e7, 15298, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e8, 15302, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8e9, 15306, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ea, 15310, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8eb, 15314, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ec, 15318, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ed, 15323, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ee, 15327, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ef, 15331, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f0, 15335, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f1, 15340, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f2, 15344, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f3, 15348, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f4, 15352, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f5, 10889, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f6, 15356, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f7, 15360, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f8, 15365, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8f9, 15370, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8fa, 15375, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8fb, 15379, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8fc, 15384, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8fd, 15388, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8fe, 15392, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f8ff, 15396, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f900, 15400, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f901, 11625, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f902, 11221, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f903, 15404, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f904, 15408, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f905, 15412, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f906, 15416, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f907, 15421, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f908, 15425, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f909, 15429, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f90a, 15433, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f90b, 15437, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f90c, 15441, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f90d, 15445, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f90e, 15450, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f90f, 15454, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f910, 15458, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f911, 15463, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f912, 15468, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f913, 15472, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f914, 15476, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f915, 15480, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f916, 15484, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f917, 15488, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f918, 15492, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f919, 15496, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f91a, 15500, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f91b, 15504, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f91c, 15509, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f91d, 15513, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f91e, 15518, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f91f, 15522, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f920, 15526, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f921, 15530, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f922, 15534, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f923, 15538, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f924, 15543, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f925, 15547, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f926, 15551, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f927, 15556, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f928, 15561, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f929, 15565, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f92a, 15569, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f92b, 15573, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f92c, 15577, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f92d, 15577, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f92e, 15581, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f92f, 15585, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f930, 15589, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f931, 15593, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f932, 15597, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f933, 15601, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f934, 15605, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f935, 15609, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f936, 15614, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f937, 15618, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f938, 10833, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f939, 15623, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f93a, 15628, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f93b, 15632, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f93c, 15637, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f93d, 15642, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f93e, 15647, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f93f, 15651, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f940, 15655, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f941, 15659, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f942, 15664, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f943, 15669, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f944, 15674, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f945, 15679, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f946, 15683, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f947, 15683, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f948, 15687, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f949, 15691, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f94a, 15695, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f94b, 15699, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f94c, 15703, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f94d, 15707, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f94e, 15712, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f94f, 10685, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f950, 15716, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f951, 15720, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f952, 15724, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f953, 11665, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f954, 15729, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f955, 15734, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f956, 11501, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f957, 15739, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f958, 15743, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f959, 11677, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f95a, 15747, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f95b, 15751, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f95c, 15755, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f95d, 15760, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f95e, 15760, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f95f, 15765, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f960, 15769, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f961, 15773, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f962, 15778, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f963, 15782, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f964, 15786, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f965, 15790, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f966, 15795, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f967, 15799, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f968, 15803, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f969, 15807, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f96a, 15811, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f96b, 15815, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f96c, 15820, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f96d, 15824, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f96e, 15828, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f96f, 15832, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f970, 15836, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f971, 15840, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f972, 15844, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f973, 15849, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f974, 15854, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f975, 15858, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f976, 15863, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f977, 15867, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f978, 15872, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f979, 15876, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f97a, 11701, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f97b, 15880, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f97c, 15885, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f97d, 15890, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f97e, 15894, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f97f, 15899, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f980, 15903, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f981, 15908, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f982, 15912, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f983, 15916, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f984, 15920, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f985, 15924, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f986, 15928, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f987, 15932, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f988, 15937, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f989, 15942, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f98a, 15947, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f98b, 14994, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f98c, 15952, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f98d, 15956, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f98e, 15960, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f98f, 15964, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f990, 15968, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f991, 15972, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f992, 15976, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f993, 15980, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f994, 15984, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f995, 15988, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f996, 15992, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f997, 15996, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f998, 10901, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f999, 16001, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f99a, 16005, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f99b, 16009, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f99c, 16013, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f99d, 16017, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f99e, 16021, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f99f, 11713, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a0, 16025, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a1, 16029, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a2, 16033, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a3, 16037, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a4, 16041, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a5, 16046, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a6, 16051, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a7, 16056, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a8, 16060, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9a9, 16064, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9aa, 16068, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ab, 16072, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ac, 16077, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ad, 16081, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ae, 16086, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9af, 16090, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b0, 16094, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b1, 16099, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b2, 16104, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b3, 16108, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b4, 10665, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b5, 16112, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b6, 16116, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b7, 16120, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b8, 16124, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9b9, 16128, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ba, 16132, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9bb, 16136, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9bc, 16140, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9bd, 16144, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9be, 16148, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9bf, 16152, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c0, 16156, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c1, 16160, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c2, 16164, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c3, 16168, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c4, 6479, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c5, 16172, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c6, 16177, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c7, 16181, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c8, 16185, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9c9, 16189, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ca, 16193, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9cb, 16197, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9cc, 16202, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9cd, 16207, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ce, 16211, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9cf, 16215, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d0, 16219, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d1, 16223, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d2, 6507, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d3, 16227, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d4, 16232, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d5, 16236, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d6, 16240, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d7, 16244, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d8, 16248, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9d9, 16253, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9da, 16258, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9db, 16262, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9dc, 16266, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9dd, 16270, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9de, 16275, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9df, 16279, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e0, 16283, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e1, 16288, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e2, 16293, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e3, 16297, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e4, 16301, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e5, 16305, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e6, 16310, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e7, 16314, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e8, 16318, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9e9, 16322, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ea, 16326, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9eb, 16330, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ec, 16334, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ed, 16338, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ee, 16343, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ef, 16347, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f0, 16351, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f1, 16355, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f2, 16360, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f3, 16364, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f4, 16368, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f5, 16372, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f6, 16376, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f7, 16381, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f8, 16386, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9f9, 16390, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9fa, 16394, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9fb, 16398, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9fc, 16403, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9fd, 16407, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9fe, 16412, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2f9ff, 16412, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa00, 16416, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa01, 16420, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa02, 16425, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa03, 16429, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa04, 16433, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa05, 16437, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa06, 16441, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa07, 16445, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa08, 16449, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa09, 16453, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa0a, 16458, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa0b, 16462, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa0c, 16466, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa0d, 16470, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa0e, 16474, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa0f, 16478, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa10, 16482, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa11, 16487, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa12, 16491, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa13, 16496, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa14, 16501, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa15, 6699, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa16, 16506, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa17, 6715, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa18, 16510, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa19, 16514, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa1a, 16518, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa1b, 16522, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa1c, 6735, G_UNICODE_NOT_PRESENT_OFFSET },
- { 0x2fa1d, 16526, G_UNICODE_NOT_PRESENT_OFFSET }
-};
-
-static const gchar decomp_expansion_string[] =
- "\x20\0" /* offset 0 */
- "\x20\xcc\x88\0" /* offset 2 */
- "\x61\0" /* offset 6 */
- "\x20\xcc\x84\0" /* offset 8 */
- "\x32\0" /* offset 12 */
- "\x33\0" /* offset 14 */
- "\x20\xcc\x81\0" /* offset 16 */
- "\xce\xbc\0" /* offset 20 */
- "\x20\xcc\xa7\0" /* offset 23 */
- "\x31\0" /* offset 27 */
- "\x6f\0" /* offset 29 */
- "\x31\xe2\x81\x84\x34\0" /* offset 31 */
- "\x31\xe2\x81\x84\x32\0" /* offset 37 */
- "\x33\xe2\x81\x84\x34\0" /* offset 43 */
- "\x41\xcc\x80\0" /* offset 49 */
- "\x41\xcc\x81\0" /* offset 53 */
- "\x41\xcc\x82\0" /* offset 57 */
- "\x41\xcc\x83\0" /* offset 61 */
- "\x41\xcc\x88\0" /* offset 65 */
- "\x41\xcc\x8a\0" /* offset 69 */
- "\x43\xcc\xa7\0" /* offset 73 */
- "\x45\xcc\x80\0" /* offset 77 */
- "\x45\xcc\x81\0" /* offset 81 */
- "\x45\xcc\x82\0" /* offset 85 */
- "\x45\xcc\x88\0" /* offset 89 */
- "\x49\xcc\x80\0" /* offset 93 */
- "\x49\xcc\x81\0" /* offset 97 */
- "\x49\xcc\x82\0" /* offset 101 */
- "\x49\xcc\x88\0" /* offset 105 */
- "\x4e\xcc\x83\0" /* offset 109 */
- "\x4f\xcc\x80\0" /* offset 113 */
- "\x4f\xcc\x81\0" /* offset 117 */
- "\x4f\xcc\x82\0" /* offset 121 */
- "\x4f\xcc\x83\0" /* offset 125 */
- "\x4f\xcc\x88\0" /* offset 129 */
- "\x55\xcc\x80\0" /* offset 133 */
- "\x55\xcc\x81\0" /* offset 137 */
- "\x55\xcc\x82\0" /* offset 141 */
- "\x55\xcc\x88\0" /* offset 145 */
- "\x59\xcc\x81\0" /* offset 149 */
- "\x61\xcc\x80\0" /* offset 153 */
- "\x61\xcc\x81\0" /* offset 157 */
- "\x61\xcc\x82\0" /* offset 161 */
- "\x61\xcc\x83\0" /* offset 165 */
- "\x61\xcc\x88\0" /* offset 169 */
- "\x61\xcc\x8a\0" /* offset 173 */
- "\x63\xcc\xa7\0" /* offset 177 */
- "\x65\xcc\x80\0" /* offset 181 */
- "\x65\xcc\x81\0" /* offset 185 */
- "\x65\xcc\x82\0" /* offset 189 */
- "\x65\xcc\x88\0" /* offset 193 */
- "\x69\xcc\x80\0" /* offset 197 */
- "\x69\xcc\x81\0" /* offset 201 */
- "\x69\xcc\x82\0" /* offset 205 */
- "\x69\xcc\x88\0" /* offset 209 */
- "\x6e\xcc\x83\0" /* offset 213 */
- "\x6f\xcc\x80\0" /* offset 217 */
- "\x6f\xcc\x81\0" /* offset 221 */
- "\x6f\xcc\x82\0" /* offset 225 */
- "\x6f\xcc\x83\0" /* offset 229 */
- "\x6f\xcc\x88\0" /* offset 233 */
- "\x75\xcc\x80\0" /* offset 237 */
- "\x75\xcc\x81\0" /* offset 241 */
- "\x75\xcc\x82\0" /* offset 245 */
- "\x75\xcc\x88\0" /* offset 249 */
- "\x79\xcc\x81\0" /* offset 253 */
- "\x79\xcc\x88\0" /* offset 257 */
- "\x41\xcc\x84\0" /* offset 261 */
- "\x61\xcc\x84\0" /* offset 265 */
- "\x41\xcc\x86\0" /* offset 269 */
- "\x61\xcc\x86\0" /* offset 273 */
- "\x41\xcc\xa8\0" /* offset 277 */
- "\x61\xcc\xa8\0" /* offset 281 */
- "\x43\xcc\x81\0" /* offset 285 */
- "\x63\xcc\x81\0" /* offset 289 */
- "\x43\xcc\x82\0" /* offset 293 */
- "\x63\xcc\x82\0" /* offset 297 */
- "\x43\xcc\x87\0" /* offset 301 */
- "\x63\xcc\x87\0" /* offset 305 */
- "\x43\xcc\x8c\0" /* offset 309 */
- "\x63\xcc\x8c\0" /* offset 313 */
- "\x44\xcc\x8c\0" /* offset 317 */
- "\x64\xcc\x8c\0" /* offset 321 */
- "\x45\xcc\x84\0" /* offset 325 */
- "\x65\xcc\x84\0" /* offset 329 */
- "\x45\xcc\x86\0" /* offset 333 */
- "\x65\xcc\x86\0" /* offset 337 */
- "\x45\xcc\x87\0" /* offset 341 */
- "\x65\xcc\x87\0" /* offset 345 */
- "\x45\xcc\xa8\0" /* offset 349 */
- "\x65\xcc\xa8\0" /* offset 353 */
- "\x45\xcc\x8c\0" /* offset 357 */
- "\x65\xcc\x8c\0" /* offset 361 */
- "\x47\xcc\x82\0" /* offset 365 */
- "\x67\xcc\x82\0" /* offset 369 */
- "\x47\xcc\x86\0" /* offset 373 */
- "\x67\xcc\x86\0" /* offset 377 */
- "\x47\xcc\x87\0" /* offset 381 */
- "\x67\xcc\x87\0" /* offset 385 */
- "\x47\xcc\xa7\0" /* offset 389 */
- "\x67\xcc\xa7\0" /* offset 393 */
- "\x48\xcc\x82\0" /* offset 397 */
- "\x68\xcc\x82\0" /* offset 401 */
- "\x49\xcc\x83\0" /* offset 405 */
- "\x69\xcc\x83\0" /* offset 409 */
- "\x49\xcc\x84\0" /* offset 413 */
- "\x69\xcc\x84\0" /* offset 417 */
- "\x49\xcc\x86\0" /* offset 421 */
- "\x69\xcc\x86\0" /* offset 425 */
- "\x49\xcc\xa8\0" /* offset 429 */
- "\x69\xcc\xa8\0" /* offset 433 */
- "\x49\xcc\x87\0" /* offset 437 */
- "\x49\x4a\0" /* offset 441 */
- "\x69\x6a\0" /* offset 444 */
- "\x4a\xcc\x82\0" /* offset 447 */
- "\x6a\xcc\x82\0" /* offset 451 */
- "\x4b\xcc\xa7\0" /* offset 455 */
- "\x6b\xcc\xa7\0" /* offset 459 */
- "\x4c\xcc\x81\0" /* offset 463 */
- "\x6c\xcc\x81\0" /* offset 467 */
- "\x4c\xcc\xa7\0" /* offset 471 */
- "\x6c\xcc\xa7\0" /* offset 475 */
- "\x4c\xcc\x8c\0" /* offset 479 */
- "\x6c\xcc\x8c\0" /* offset 483 */
- "\x4c\xc2\xb7\0" /* offset 487 */
- "\x6c\xc2\xb7\0" /* offset 491 */
- "\x4e\xcc\x81\0" /* offset 495 */
- "\x6e\xcc\x81\0" /* offset 499 */
- "\x4e\xcc\xa7\0" /* offset 503 */
- "\x6e\xcc\xa7\0" /* offset 507 */
- "\x4e\xcc\x8c\0" /* offset 511 */
- "\x6e\xcc\x8c\0" /* offset 515 */
- "\xca\xbc\x6e\0" /* offset 519 */
- "\x4f\xcc\x84\0" /* offset 523 */
- "\x6f\xcc\x84\0" /* offset 527 */
- "\x4f\xcc\x86\0" /* offset 531 */
- "\x6f\xcc\x86\0" /* offset 535 */
- "\x4f\xcc\x8b\0" /* offset 539 */
- "\x6f\xcc\x8b\0" /* offset 543 */
- "\x52\xcc\x81\0" /* offset 547 */
- "\x72\xcc\x81\0" /* offset 551 */
- "\x52\xcc\xa7\0" /* offset 555 */
- "\x72\xcc\xa7\0" /* offset 559 */
- "\x52\xcc\x8c\0" /* offset 563 */
- "\x72\xcc\x8c\0" /* offset 567 */
- "\x53\xcc\x81\0" /* offset 571 */
- "\x73\xcc\x81\0" /* offset 575 */
- "\x53\xcc\x82\0" /* offset 579 */
- "\x73\xcc\x82\0" /* offset 583 */
- "\x53\xcc\xa7\0" /* offset 587 */
- "\x73\xcc\xa7\0" /* offset 591 */
- "\x53\xcc\x8c\0" /* offset 595 */
- "\x73\xcc\x8c\0" /* offset 599 */
- "\x54\xcc\xa7\0" /* offset 603 */
- "\x74\xcc\xa7\0" /* offset 607 */
- "\x54\xcc\x8c\0" /* offset 611 */
- "\x74\xcc\x8c\0" /* offset 615 */
- "\x55\xcc\x83\0" /* offset 619 */
- "\x75\xcc\x83\0" /* offset 623 */
- "\x55\xcc\x84\0" /* offset 627 */
- "\x75\xcc\x84\0" /* offset 631 */
- "\x55\xcc\x86\0" /* offset 635 */
- "\x75\xcc\x86\0" /* offset 639 */
- "\x55\xcc\x8a\0" /* offset 643 */
- "\x75\xcc\x8a\0" /* offset 647 */
- "\x55\xcc\x8b\0" /* offset 651 */
- "\x75\xcc\x8b\0" /* offset 655 */
- "\x55\xcc\xa8\0" /* offset 659 */
- "\x75\xcc\xa8\0" /* offset 663 */
- "\x57\xcc\x82\0" /* offset 667 */
- "\x77\xcc\x82\0" /* offset 671 */
- "\x59\xcc\x82\0" /* offset 675 */
- "\x79\xcc\x82\0" /* offset 679 */
- "\x59\xcc\x88\0" /* offset 683 */
- "\x5a\xcc\x81\0" /* offset 687 */
- "\x7a\xcc\x81\0" /* offset 691 */
- "\x5a\xcc\x87\0" /* offset 695 */
- "\x7a\xcc\x87\0" /* offset 699 */
- "\x5a\xcc\x8c\0" /* offset 703 */
- "\x7a\xcc\x8c\0" /* offset 707 */
- "\x73\0" /* offset 711 */
- "\x4f\xcc\x9b\0" /* offset 713 */
- "\x6f\xcc\x9b\0" /* offset 717 */
- "\x55\xcc\x9b\0" /* offset 721 */
- "\x75\xcc\x9b\0" /* offset 725 */
- "\x44\x5a\xcc\x8c\0" /* offset 729 */
- "\x44\x7a\xcc\x8c\0" /* offset 734 */
- "\x64\x7a\xcc\x8c\0" /* offset 739 */
- "\x4c\x4a\0" /* offset 744 */
- "\x4c\x6a\0" /* offset 747 */
- "\x6c\x6a\0" /* offset 750 */
- "\x4e\x4a\0" /* offset 753 */
- "\x4e\x6a\0" /* offset 756 */
- "\x6e\x6a\0" /* offset 759 */
- "\x41\xcc\x8c\0" /* offset 762 */
- "\x61\xcc\x8c\0" /* offset 766 */
- "\x49\xcc\x8c\0" /* offset 770 */
- "\x69\xcc\x8c\0" /* offset 774 */
- "\x4f\xcc\x8c\0" /* offset 778 */
- "\x6f\xcc\x8c\0" /* offset 782 */
- "\x55\xcc\x8c\0" /* offset 786 */
- "\x75\xcc\x8c\0" /* offset 790 */
- "\x55\xcc\x88\xcc\x84\0" /* offset 794 */
- "\x75\xcc\x88\xcc\x84\0" /* offset 800 */
- "\x55\xcc\x88\xcc\x81\0" /* offset 806 */
- "\x75\xcc\x88\xcc\x81\0" /* offset 812 */
- "\x55\xcc\x88\xcc\x8c\0" /* offset 818 */
- "\x75\xcc\x88\xcc\x8c\0" /* offset 824 */
- "\x55\xcc\x88\xcc\x80\0" /* offset 830 */
- "\x75\xcc\x88\xcc\x80\0" /* offset 836 */
- "\x41\xcc\x88\xcc\x84\0" /* offset 842 */
- "\x61\xcc\x88\xcc\x84\0" /* offset 848 */
- "\x41\xcc\x87\xcc\x84\0" /* offset 854 */
- "\x61\xcc\x87\xcc\x84\0" /* offset 860 */
- "\xc3\x86\xcc\x84\0" /* offset 866 */
- "\xc3\xa6\xcc\x84\0" /* offset 871 */
- "\x47\xcc\x8c\0" /* offset 876 */
- "\x67\xcc\x8c\0" /* offset 880 */
- "\x4b\xcc\x8c\0" /* offset 884 */
- "\x6b\xcc\x8c\0" /* offset 888 */
- "\x4f\xcc\xa8\0" /* offset 892 */
- "\x6f\xcc\xa8\0" /* offset 896 */
- "\x4f\xcc\xa8\xcc\x84\0" /* offset 900 */
- "\x6f\xcc\xa8\xcc\x84\0" /* offset 906 */
- "\xc6\xb7\xcc\x8c\0" /* offset 912 */
- "\xca\x92\xcc\x8c\0" /* offset 917 */
- "\x6a\xcc\x8c\0" /* offset 922 */
- "\x44\x5a\0" /* offset 926 */
- "\x44\x7a\0" /* offset 929 */
- "\x64\x7a\0" /* offset 932 */
- "\x47\xcc\x81\0" /* offset 935 */
- "\x67\xcc\x81\0" /* offset 939 */
- "\x4e\xcc\x80\0" /* offset 943 */
- "\x6e\xcc\x80\0" /* offset 947 */
- "\x41\xcc\x8a\xcc\x81\0" /* offset 951 */
- "\x61\xcc\x8a\xcc\x81\0" /* offset 957 */
- "\xc3\x86\xcc\x81\0" /* offset 963 */
- "\xc3\xa6\xcc\x81\0" /* offset 968 */
- "\xc3\x98\xcc\x81\0" /* offset 973 */
- "\xc3\xb8\xcc\x81\0" /* offset 978 */
- "\x41\xcc\x8f\0" /* offset 983 */
- "\x61\xcc\x8f\0" /* offset 987 */
- "\x41\xcc\x91\0" /* offset 991 */
- "\x61\xcc\x91\0" /* offset 995 */
- "\x45\xcc\x8f\0" /* offset 999 */
- "\x65\xcc\x8f\0" /* offset 1003 */
- "\x45\xcc\x91\0" /* offset 1007 */
- "\x65\xcc\x91\0" /* offset 1011 */
- "\x49\xcc\x8f\0" /* offset 1015 */
- "\x69\xcc\x8f\0" /* offset 1019 */
- "\x49\xcc\x91\0" /* offset 1023 */
- "\x69\xcc\x91\0" /* offset 1027 */
- "\x4f\xcc\x8f\0" /* offset 1031 */
- "\x6f\xcc\x8f\0" /* offset 1035 */
- "\x4f\xcc\x91\0" /* offset 1039 */
- "\x6f\xcc\x91\0" /* offset 1043 */
- "\x52\xcc\x8f\0" /* offset 1047 */
- "\x72\xcc\x8f\0" /* offset 1051 */
- "\x52\xcc\x91\0" /* offset 1055 */
- "\x72\xcc\x91\0" /* offset 1059 */
- "\x55\xcc\x8f\0" /* offset 1063 */
- "\x75\xcc\x8f\0" /* offset 1067 */
- "\x55\xcc\x91\0" /* offset 1071 */
- "\x75\xcc\x91\0" /* offset 1075 */
- "\x53\xcc\xa6\0" /* offset 1079 */
- "\x73\xcc\xa6\0" /* offset 1083 */
- "\x54\xcc\xa6\0" /* offset 1087 */
- "\x74\xcc\xa6\0" /* offset 1091 */
- "\x48\xcc\x8c\0" /* offset 1095 */
- "\x68\xcc\x8c\0" /* offset 1099 */
- "\x41\xcc\x87\0" /* offset 1103 */
- "\x61\xcc\x87\0" /* offset 1107 */
- "\x45\xcc\xa7\0" /* offset 1111 */
- "\x65\xcc\xa7\0" /* offset 1115 */
- "\x4f\xcc\x88\xcc\x84\0" /* offset 1119 */
- "\x6f\xcc\x88\xcc\x84\0" /* offset 1125 */
- "\x4f\xcc\x83\xcc\x84\0" /* offset 1131 */
- "\x6f\xcc\x83\xcc\x84\0" /* offset 1137 */
- "\x4f\xcc\x87\0" /* offset 1143 */
- "\x6f\xcc\x87\0" /* offset 1147 */
- "\x4f\xcc\x87\xcc\x84\0" /* offset 1151 */
- "\x6f\xcc\x87\xcc\x84\0" /* offset 1157 */
- "\x59\xcc\x84\0" /* offset 1163 */
- "\x79\xcc\x84\0" /* offset 1167 */
- "\x68\0" /* offset 1171 */
- "\xc9\xa6\0" /* offset 1173 */
- "\x6a\0" /* offset 1176 */
- "\x72\0" /* offset 1178 */
- "\xc9\xb9\0" /* offset 1180 */
- "\xc9\xbb\0" /* offset 1183 */
- "\xca\x81\0" /* offset 1186 */
- "\x77\0" /* offset 1189 */
- "\x79\0" /* offset 1191 */
- "\x20\xcc\x86\0" /* offset 1193 */
- "\x20\xcc\x87\0" /* offset 1197 */
- "\x20\xcc\x8a\0" /* offset 1201 */
- "\x20\xcc\xa8\0" /* offset 1205 */
- "\x20\xcc\x83\0" /* offset 1209 */
- "\x20\xcc\x8b\0" /* offset 1213 */
- "\xc9\xa3\0" /* offset 1217 */
- "\x6c\0" /* offset 1220 */
- "\x78\0" /* offset 1222 */
- "\xca\x95\0" /* offset 1224 */
- "\xcc\x80\0" /* offset 1227 */
- "\xcc\x81\0" /* offset 1230 */
- "\xcc\x93\0" /* offset 1233 */
- "\xcc\x88\xcc\x81\0" /* offset 1236 */
- "\xca\xb9\0" /* offset 1241 */
- "\x20\xcd\x85\0" /* offset 1244 */
- "\x3b\0" /* offset 1248 */
- "\xc2\xa8\xcc\x81\0" /* offset 1250 */
- "\x20\xcc\x88\xcc\x81\0" /* offset 1255 */
- "\xce\x91\xcc\x81\0" /* offset 1261 */
- "\xc2\xb7\0" /* offset 1266 */
- "\xce\x95\xcc\x81\0" /* offset 1269 */
- "\xce\x97\xcc\x81\0" /* offset 1274 */
- "\xce\x99\xcc\x81\0" /* offset 1279 */
- "\xce\x9f\xcc\x81\0" /* offset 1284 */
- "\xce\xa5\xcc\x81\0" /* offset 1289 */
- "\xce\xa9\xcc\x81\0" /* offset 1294 */
- "\xce\xb9\xcc\x88\xcc\x81\0" /* offset 1299 */
- "\xce\x99\xcc\x88\0" /* offset 1306 */
- "\xce\xa5\xcc\x88\0" /* offset 1311 */
- "\xce\xb1\xcc\x81\0" /* offset 1316 */
- "\xce\xb5\xcc\x81\0" /* offset 1321 */
- "\xce\xb7\xcc\x81\0" /* offset 1326 */
- "\xce\xb9\xcc\x81\0" /* offset 1331 */
- "\xcf\x85\xcc\x88\xcc\x81\0" /* offset 1336 */
- "\xce\xb9\xcc\x88\0" /* offset 1343 */
- "\xcf\x85\xcc\x88\0" /* offset 1348 */
- "\xce\xbf\xcc\x81\0" /* offset 1353 */
- "\xcf\x85\xcc\x81\0" /* offset 1358 */
- "\xcf\x89\xcc\x81\0" /* offset 1363 */
- "\xce\xb2\0" /* offset 1368 */
- "\xce\xb8\0" /* offset 1371 */
- "\xce\xa5\0" /* offset 1374 */
- "\xcf\x92\xcc\x81\0" /* offset 1377 */
- "\xcf\x92\xcc\x88\0" /* offset 1382 */
- "\xcf\x86\0" /* offset 1387 */
- "\xcf\x80\0" /* offset 1390 */
- "\xce\xba\0" /* offset 1393 */
- "\xcf\x81\0" /* offset 1396 */
- "\xcf\x82\0" /* offset 1399 */
- "\xce\x98\0" /* offset 1402 */
- "\xce\xb5\0" /* offset 1405 */
- "\xd0\x95\xcc\x80\0" /* offset 1408 */
- "\xd0\x95\xcc\x88\0" /* offset 1413 */
- "\xd0\x93\xcc\x81\0" /* offset 1418 */
- "\xd0\x86\xcc\x88\0" /* offset 1423 */
- "\xd0\x9a\xcc\x81\0" /* offset 1428 */
- "\xd0\x98\xcc\x80\0" /* offset 1433 */
- "\xd0\xa3\xcc\x86\0" /* offset 1438 */
- "\xd0\x98\xcc\x86\0" /* offset 1443 */
- "\xd0\xb8\xcc\x86\0" /* offset 1448 */
- "\xd0\xb5\xcc\x80\0" /* offset 1453 */
- "\xd0\xb5\xcc\x88\0" /* offset 1458 */
- "\xd0\xb3\xcc\x81\0" /* offset 1463 */
- "\xd1\x96\xcc\x88\0" /* offset 1468 */
- "\xd0\xba\xcc\x81\0" /* offset 1473 */
- "\xd0\xb8\xcc\x80\0" /* offset 1478 */
- "\xd1\x83\xcc\x86\0" /* offset 1483 */
- "\xd1\xb4\xcc\x8f\0" /* offset 1488 */
- "\xd1\xb5\xcc\x8f\0" /* offset 1493 */
- "\xd0\x96\xcc\x86\0" /* offset 1498 */
- "\xd0\xb6\xcc\x86\0" /* offset 1503 */
- "\xd0\x90\xcc\x86\0" /* offset 1508 */
- "\xd0\xb0\xcc\x86\0" /* offset 1513 */
- "\xd0\x90\xcc\x88\0" /* offset 1518 */
- "\xd0\xb0\xcc\x88\0" /* offset 1523 */
- "\xd0\x95\xcc\x86\0" /* offset 1528 */
- "\xd0\xb5\xcc\x86\0" /* offset 1533 */
- "\xd3\x98\xcc\x88\0" /* offset 1538 */
- "\xd3\x99\xcc\x88\0" /* offset 1543 */
- "\xd0\x96\xcc\x88\0" /* offset 1548 */
- "\xd0\xb6\xcc\x88\0" /* offset 1553 */
- "\xd0\x97\xcc\x88\0" /* offset 1558 */
- "\xd0\xb7\xcc\x88\0" /* offset 1563 */
- "\xd0\x98\xcc\x84\0" /* offset 1568 */
- "\xd0\xb8\xcc\x84\0" /* offset 1573 */
- "\xd0\x98\xcc\x88\0" /* offset 1578 */
- "\xd0\xb8\xcc\x88\0" /* offset 1583 */
- "\xd0\x9e\xcc\x88\0" /* offset 1588 */
- "\xd0\xbe\xcc\x88\0" /* offset 1593 */
- "\xd3\xa8\xcc\x88\0" /* offset 1598 */
- "\xd3\xa9\xcc\x88\0" /* offset 1603 */
- "\xd0\xad\xcc\x88\0" /* offset 1608 */
- "\xd1\x8d\xcc\x88\0" /* offset 1613 */
- "\xd0\xa3\xcc\x84\0" /* offset 1618 */
- "\xd1\x83\xcc\x84\0" /* offset 1623 */
- "\xd0\xa3\xcc\x88\0" /* offset 1628 */
- "\xd1\x83\xcc\x88\0" /* offset 1633 */
- "\xd0\xa3\xcc\x8b\0" /* offset 1638 */
- "\xd1\x83\xcc\x8b\0" /* offset 1643 */
- "\xd0\xa7\xcc\x88\0" /* offset 1648 */
- "\xd1\x87\xcc\x88\0" /* offset 1653 */
- "\xd0\xab\xcc\x88\0" /* offset 1658 */
- "\xd1\x8b\xcc\x88\0" /* offset 1663 */
- "\xd5\xa5\xd6\x82\0" /* offset 1668 */
- "\xd8\xa7\xd9\x93\0" /* offset 1673 */
- "\xd8\xa7\xd9\x94\0" /* offset 1678 */
- "\xd9\x88\xd9\x94\0" /* offset 1683 */
- "\xd8\xa7\xd9\x95\0" /* offset 1688 */
- "\xd9\x8a\xd9\x94\0" /* offset 1693 */
- "\xd8\xa7\xd9\xb4\0" /* offset 1698 */
- "\xd9\x88\xd9\xb4\0" /* offset 1703 */
- "\xdb\x87\xd9\xb4\0" /* offset 1708 */
- "\xd9\x8a\xd9\xb4\0" /* offset 1713 */
- "\xdb\x95\xd9\x94\0" /* offset 1718 */
- "\xdb\x81\xd9\x94\0" /* offset 1723 */
- "\xdb\x92\xd9\x94\0" /* offset 1728 */
- "\xe0\xa4\xa8\xe0\xa4\xbc\0" /* offset 1733 */
- "\xe0\xa4\xb0\xe0\xa4\xbc\0" /* offset 1740 */
- "\xe0\xa4\xb3\xe0\xa4\xbc\0" /* offset 1747 */
- "\xe0\xa4\x95\xe0\xa4\xbc\0" /* offset 1754 */
- "\xe0\xa4\x96\xe0\xa4\xbc\0" /* offset 1761 */
- "\xe0\xa4\x97\xe0\xa4\xbc\0" /* offset 1768 */
- "\xe0\xa4\x9c\xe0\xa4\xbc\0" /* offset 1775 */
- "\xe0\xa4\xa1\xe0\xa4\xbc\0" /* offset 1782 */
- "\xe0\xa4\xa2\xe0\xa4\xbc\0" /* offset 1789 */
- "\xe0\xa4\xab\xe0\xa4\xbc\0" /* offset 1796 */
- "\xe0\xa4\xaf\xe0\xa4\xbc\0" /* offset 1803 */
- "\xe0\xa7\x87\xe0\xa6\xbe\0" /* offset 1810 */
- "\xe0\xa7\x87\xe0\xa7\x97\0" /* offset 1817 */
- "\xe0\xa6\xa1\xe0\xa6\xbc\0" /* offset 1824 */
- "\xe0\xa6\xa2\xe0\xa6\xbc\0" /* offset 1831 */
- "\xe0\xa6\xaf\xe0\xa6\xbc\0" /* offset 1838 */
- "\xe0\xa8\xb2\xe0\xa8\xbc\0" /* offset 1845 */
- "\xe0\xa8\xb8\xe0\xa8\xbc\0" /* offset 1852 */
- "\xe0\xa8\x96\xe0\xa8\xbc\0" /* offset 1859 */
- "\xe0\xa8\x97\xe0\xa8\xbc\0" /* offset 1866 */
- "\xe0\xa8\x9c\xe0\xa8\xbc\0" /* offset 1873 */
- "\xe0\xa8\xab\xe0\xa8\xbc\0" /* offset 1880 */
- "\xe0\xad\x87\xe0\xad\x96\0" /* offset 1887 */
- "\xe0\xad\x87\xe0\xac\xbe\0" /* offset 1894 */
- "\xe0\xad\x87\xe0\xad\x97\0" /* offset 1901 */
- "\xe0\xac\xa1\xe0\xac\xbc\0" /* offset 1908 */
- "\xe0\xac\xa2\xe0\xac\xbc\0" /* offset 1915 */
- "\xe0\xae\x92\xe0\xaf\x97\0" /* offset 1922 */
- "\xe0\xaf\x86\xe0\xae\xbe\0" /* offset 1929 */
- "\xe0\xaf\x87\xe0\xae\xbe\0" /* offset 1936 */
- "\xe0\xaf\x86\xe0\xaf\x97\0" /* offset 1943 */
- "\xe0\xb1\x86\xe0\xb1\x96\0" /* offset 1950 */
- "\xe0\xb2\xbf\xe0\xb3\x95\0" /* offset 1957 */
- "\xe0\xb3\x86\xe0\xb3\x95\0" /* offset 1964 */
- "\xe0\xb3\x86\xe0\xb3\x96\0" /* offset 1971 */
- "\xe0\xb3\x86\xe0\xb3\x82\0" /* offset 1978 */
- "\xe0\xb3\x86\xe0\xb3\x82\xe0\xb3\x95\0" /* offset 1985 */
- "\xe0\xb5\x86\xe0\xb4\xbe\0" /* offset 1995 */
- "\xe0\xb5\x87\xe0\xb4\xbe\0" /* offset 2002 */
- "\xe0\xb5\x86\xe0\xb5\x97\0" /* offset 2009 */
- "\xe0\xb7\x99\xe0\xb7\x8a\0" /* offset 2016 */
- "\xe0\xb7\x99\xe0\xb7\x8f\0" /* offset 2023 */
- "\xe0\xb7\x99\xe0\xb7\x8f\xe0\xb7\x8a\0" /* offset 2030 */
- "\xe0\xb7\x99\xe0\xb7\x9f\0" /* offset 2040 */
- "\xe0\xb9\x8d\xe0\xb8\xb2\0" /* offset 2047 */
- "\xe0\xbb\x8d\xe0\xba\xb2\0" /* offset 2054 */
- "\xe0\xba\xab\xe0\xba\x99\0" /* offset 2061 */
- "\xe0\xba\xab\xe0\xba\xa1\0" /* offset 2068 */
- "\xe0\xbc\x8b\0" /* offset 2075 */
- "\xe0\xbd\x82\xe0\xbe\xb7\0" /* offset 2079 */
- "\xe0\xbd\x8c\xe0\xbe\xb7\0" /* offset 2086 */
- "\xe0\xbd\x91\xe0\xbe\xb7\0" /* offset 2093 */
- "\xe0\xbd\x96\xe0\xbe\xb7\0" /* offset 2100 */
- "\xe0\xbd\x9b\xe0\xbe\xb7\0" /* offset 2107 */
- "\xe0\xbd\x80\xe0\xbe\xb5\0" /* offset 2114 */
- "\xe0\xbd\xb1\xe0\xbd\xb2\0" /* offset 2121 */
- "\xe0\xbd\xb1\xe0\xbd\xb4\0" /* offset 2128 */
- "\xe0\xbe\xb2\xe0\xbe\x80\0" /* offset 2135 */
- "\xe0\xbe\xb2\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2142 */
- "\xe0\xbe\xb3\xe0\xbe\x80\0" /* offset 2152 */
- "\xe0\xbe\xb3\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2159 */
- "\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2169 */
- "\xe0\xbe\x92\xe0\xbe\xb7\0" /* offset 2176 */
- "\xe0\xbe\x9c\xe0\xbe\xb7\0" /* offset 2183 */
- "\xe0\xbe\xa1\xe0\xbe\xb7\0" /* offset 2190 */
- "\xe0\xbe\xa6\xe0\xbe\xb7\0" /* offset 2197 */
- "\xe0\xbe\xab\xe0\xbe\xb7\0" /* offset 2204 */
- "\xe0\xbe\x90\xe0\xbe\xb5\0" /* offset 2211 */
- "\xe1\x80\xa5\xe1\x80\xae\0" /* offset 2218 */
- "\x41\xcc\xa5\0" /* offset 2225 */
- "\x61\xcc\xa5\0" /* offset 2229 */
- "\x42\xcc\x87\0" /* offset 2233 */
- "\x62\xcc\x87\0" /* offset 2237 */
- "\x42\xcc\xa3\0" /* offset 2241 */
- "\x62\xcc\xa3\0" /* offset 2245 */
- "\x42\xcc\xb1\0" /* offset 2249 */
- "\x62\xcc\xb1\0" /* offset 2253 */
- "\x43\xcc\xa7\xcc\x81\0" /* offset 2257 */
- "\x63\xcc\xa7\xcc\x81\0" /* offset 2263 */
- "\x44\xcc\x87\0" /* offset 2269 */
- "\x64\xcc\x87\0" /* offset 2273 */
- "\x44\xcc\xa3\0" /* offset 2277 */
- "\x64\xcc\xa3\0" /* offset 2281 */
- "\x44\xcc\xb1\0" /* offset 2285 */
- "\x64\xcc\xb1\0" /* offset 2289 */
- "\x44\xcc\xa7\0" /* offset 2293 */
- "\x64\xcc\xa7\0" /* offset 2297 */
- "\x44\xcc\xad\0" /* offset 2301 */
- "\x64\xcc\xad\0" /* offset 2305 */
- "\x45\xcc\x84\xcc\x80\0" /* offset 2309 */
- "\x65\xcc\x84\xcc\x80\0" /* offset 2315 */
- "\x45\xcc\x84\xcc\x81\0" /* offset 2321 */
- "\x65\xcc\x84\xcc\x81\0" /* offset 2327 */
- "\x45\xcc\xad\0" /* offset 2333 */
- "\x65\xcc\xad\0" /* offset 2337 */
- "\x45\xcc\xb0\0" /* offset 2341 */
- "\x65\xcc\xb0\0" /* offset 2345 */
- "\x45\xcc\xa7\xcc\x86\0" /* offset 2349 */
- "\x65\xcc\xa7\xcc\x86\0" /* offset 2355 */
- "\x46\xcc\x87\0" /* offset 2361 */
- "\x66\xcc\x87\0" /* offset 2365 */
- "\x47\xcc\x84\0" /* offset 2369 */
- "\x67\xcc\x84\0" /* offset 2373 */
- "\x48\xcc\x87\0" /* offset 2377 */
- "\x68\xcc\x87\0" /* offset 2381 */
- "\x48\xcc\xa3\0" /* offset 2385 */
- "\x68\xcc\xa3\0" /* offset 2389 */
- "\x48\xcc\x88\0" /* offset 2393 */
- "\x68\xcc\x88\0" /* offset 2397 */
- "\x48\xcc\xa7\0" /* offset 2401 */
- "\x68\xcc\xa7\0" /* offset 2405 */
- "\x48\xcc\xae\0" /* offset 2409 */
- "\x68\xcc\xae\0" /* offset 2413 */
- "\x49\xcc\xb0\0" /* offset 2417 */
- "\x69\xcc\xb0\0" /* offset 2421 */
- "\x49\xcc\x88\xcc\x81\0" /* offset 2425 */
- "\x69\xcc\x88\xcc\x81\0" /* offset 2431 */
- "\x4b\xcc\x81\0" /* offset 2437 */
- "\x6b\xcc\x81\0" /* offset 2441 */
- "\x4b\xcc\xa3\0" /* offset 2445 */
- "\x6b\xcc\xa3\0" /* offset 2449 */
- "\x4b\xcc\xb1\0" /* offset 2453 */
- "\x6b\xcc\xb1\0" /* offset 2457 */
- "\x4c\xcc\xa3\0" /* offset 2461 */
- "\x6c\xcc\xa3\0" /* offset 2465 */
- "\x4c\xcc\xa3\xcc\x84\0" /* offset 2469 */
- "\x6c\xcc\xa3\xcc\x84\0" /* offset 2475 */
- "\x4c\xcc\xb1\0" /* offset 2481 */
- "\x6c\xcc\xb1\0" /* offset 2485 */
- "\x4c\xcc\xad\0" /* offset 2489 */
- "\x6c\xcc\xad\0" /* offset 2493 */
- "\x4d\xcc\x81\0" /* offset 2497 */
- "\x6d\xcc\x81\0" /* offset 2501 */
- "\x4d\xcc\x87\0" /* offset 2505 */
- "\x6d\xcc\x87\0" /* offset 2509 */
- "\x4d\xcc\xa3\0" /* offset 2513 */
- "\x6d\xcc\xa3\0" /* offset 2517 */
- "\x4e\xcc\x87\0" /* offset 2521 */
- "\x6e\xcc\x87\0" /* offset 2525 */
- "\x4e\xcc\xa3\0" /* offset 2529 */
- "\x6e\xcc\xa3\0" /* offset 2533 */
- "\x4e\xcc\xb1\0" /* offset 2537 */
- "\x6e\xcc\xb1\0" /* offset 2541 */
- "\x4e\xcc\xad\0" /* offset 2545 */
- "\x6e\xcc\xad\0" /* offset 2549 */
- "\x4f\xcc\x83\xcc\x81\0" /* offset 2553 */
- "\x6f\xcc\x83\xcc\x81\0" /* offset 2559 */
- "\x4f\xcc\x83\xcc\x88\0" /* offset 2565 */
- "\x6f\xcc\x83\xcc\x88\0" /* offset 2571 */
- "\x4f\xcc\x84\xcc\x80\0" /* offset 2577 */
- "\x6f\xcc\x84\xcc\x80\0" /* offset 2583 */
- "\x4f\xcc\x84\xcc\x81\0" /* offset 2589 */
- "\x6f\xcc\x84\xcc\x81\0" /* offset 2595 */
- "\x50\xcc\x81\0" /* offset 2601 */
- "\x70\xcc\x81\0" /* offset 2605 */
- "\x50\xcc\x87\0" /* offset 2609 */
- "\x70\xcc\x87\0" /* offset 2613 */
- "\x52\xcc\x87\0" /* offset 2617 */
- "\x72\xcc\x87\0" /* offset 2621 */
- "\x52\xcc\xa3\0" /* offset 2625 */
- "\x72\xcc\xa3\0" /* offset 2629 */
- "\x52\xcc\xa3\xcc\x84\0" /* offset 2633 */
- "\x72\xcc\xa3\xcc\x84\0" /* offset 2639 */
- "\x52\xcc\xb1\0" /* offset 2645 */
- "\x72\xcc\xb1\0" /* offset 2649 */
- "\x53\xcc\x87\0" /* offset 2653 */
- "\x73\xcc\x87\0" /* offset 2657 */
- "\x53\xcc\xa3\0" /* offset 2661 */
- "\x73\xcc\xa3\0" /* offset 2665 */
- "\x53\xcc\x81\xcc\x87\0" /* offset 2669 */
- "\x73\xcc\x81\xcc\x87\0" /* offset 2675 */
- "\x53\xcc\x8c\xcc\x87\0" /* offset 2681 */
- "\x73\xcc\x8c\xcc\x87\0" /* offset 2687 */
- "\x53\xcc\xa3\xcc\x87\0" /* offset 2693 */
- "\x73\xcc\xa3\xcc\x87\0" /* offset 2699 */
- "\x54\xcc\x87\0" /* offset 2705 */
- "\x74\xcc\x87\0" /* offset 2709 */
- "\x54\xcc\xa3\0" /* offset 2713 */
- "\x74\xcc\xa3\0" /* offset 2717 */
- "\x54\xcc\xb1\0" /* offset 2721 */
- "\x74\xcc\xb1\0" /* offset 2725 */
- "\x54\xcc\xad\0" /* offset 2729 */
- "\x74\xcc\xad\0" /* offset 2733 */
- "\x55\xcc\xa4\0" /* offset 2737 */
- "\x75\xcc\xa4\0" /* offset 2741 */
- "\x55\xcc\xb0\0" /* offset 2745 */
- "\x75\xcc\xb0\0" /* offset 2749 */
- "\x55\xcc\xad\0" /* offset 2753 */
- "\x75\xcc\xad\0" /* offset 2757 */
- "\x55\xcc\x83\xcc\x81\0" /* offset 2761 */
- "\x75\xcc\x83\xcc\x81\0" /* offset 2767 */
- "\x55\xcc\x84\xcc\x88\0" /* offset 2773 */
- "\x75\xcc\x84\xcc\x88\0" /* offset 2779 */
- "\x56\xcc\x83\0" /* offset 2785 */
- "\x76\xcc\x83\0" /* offset 2789 */
- "\x56\xcc\xa3\0" /* offset 2793 */
- "\x76\xcc\xa3\0" /* offset 2797 */
- "\x57\xcc\x80\0" /* offset 2801 */
- "\x77\xcc\x80\0" /* offset 2805 */
- "\x57\xcc\x81\0" /* offset 2809 */
- "\x77\xcc\x81\0" /* offset 2813 */
- "\x57\xcc\x88\0" /* offset 2817 */
- "\x77\xcc\x88\0" /* offset 2821 */
- "\x57\xcc\x87\0" /* offset 2825 */
- "\x77\xcc\x87\0" /* offset 2829 */
- "\x57\xcc\xa3\0" /* offset 2833 */
- "\x77\xcc\xa3\0" /* offset 2837 */
- "\x58\xcc\x87\0" /* offset 2841 */
- "\x78\xcc\x87\0" /* offset 2845 */
- "\x58\xcc\x88\0" /* offset 2849 */
- "\x78\xcc\x88\0" /* offset 2853 */
- "\x59\xcc\x87\0" /* offset 2857 */
- "\x79\xcc\x87\0" /* offset 2861 */
- "\x5a\xcc\x82\0" /* offset 2865 */
- "\x7a\xcc\x82\0" /* offset 2869 */
- "\x5a\xcc\xa3\0" /* offset 2873 */
- "\x7a\xcc\xa3\0" /* offset 2877 */
- "\x5a\xcc\xb1\0" /* offset 2881 */
- "\x7a\xcc\xb1\0" /* offset 2885 */
- "\x68\xcc\xb1\0" /* offset 2889 */
- "\x74\xcc\x88\0" /* offset 2893 */
- "\x77\xcc\x8a\0" /* offset 2897 */
- "\x79\xcc\x8a\0" /* offset 2901 */
- "\x61\xca\xbe\0" /* offset 2905 */
- "\xc5\xbf\xcc\x87\0" /* offset 2909 */
- "\x41\xcc\xa3\0" /* offset 2914 */
- "\x61\xcc\xa3\0" /* offset 2918 */
- "\x41\xcc\x89\0" /* offset 2922 */
- "\x61\xcc\x89\0" /* offset 2926 */
- "\x41\xcc\x82\xcc\x81\0" /* offset 2930 */
- "\x61\xcc\x82\xcc\x81\0" /* offset 2936 */
- "\x41\xcc\x82\xcc\x80\0" /* offset 2942 */
- "\x61\xcc\x82\xcc\x80\0" /* offset 2948 */
- "\x41\xcc\x82\xcc\x89\0" /* offset 2954 */
- "\x61\xcc\x82\xcc\x89\0" /* offset 2960 */
- "\x41\xcc\x82\xcc\x83\0" /* offset 2966 */
- "\x61\xcc\x82\xcc\x83\0" /* offset 2972 */
- "\x41\xcc\xa3\xcc\x82\0" /* offset 2978 */
- "\x61\xcc\xa3\xcc\x82\0" /* offset 2984 */
- "\x41\xcc\x86\xcc\x81\0" /* offset 2990 */
- "\x61\xcc\x86\xcc\x81\0" /* offset 2996 */
- "\x41\xcc\x86\xcc\x80\0" /* offset 3002 */
- "\x61\xcc\x86\xcc\x80\0" /* offset 3008 */
- "\x41\xcc\x86\xcc\x89\0" /* offset 3014 */
- "\x61\xcc\x86\xcc\x89\0" /* offset 3020 */
- "\x41\xcc\x86\xcc\x83\0" /* offset 3026 */
- "\x61\xcc\x86\xcc\x83\0" /* offset 3032 */
- "\x41\xcc\xa3\xcc\x86\0" /* offset 3038 */
- "\x61\xcc\xa3\xcc\x86\0" /* offset 3044 */
- "\x45\xcc\xa3\0" /* offset 3050 */
- "\x65\xcc\xa3\0" /* offset 3054 */
- "\x45\xcc\x89\0" /* offset 3058 */
- "\x65\xcc\x89\0" /* offset 3062 */
- "\x45\xcc\x83\0" /* offset 3066 */
- "\x65\xcc\x83\0" /* offset 3070 */
- "\x45\xcc\x82\xcc\x81\0" /* offset 3074 */
- "\x65\xcc\x82\xcc\x81\0" /* offset 3080 */
- "\x45\xcc\x82\xcc\x80\0" /* offset 3086 */
- "\x65\xcc\x82\xcc\x80\0" /* offset 3092 */
- "\x45\xcc\x82\xcc\x89\0" /* offset 3098 */
- "\x65\xcc\x82\xcc\x89\0" /* offset 3104 */
- "\x45\xcc\x82\xcc\x83\0" /* offset 3110 */
- "\x65\xcc\x82\xcc\x83\0" /* offset 3116 */
- "\x45\xcc\xa3\xcc\x82\0" /* offset 3122 */
- "\x65\xcc\xa3\xcc\x82\0" /* offset 3128 */
- "\x49\xcc\x89\0" /* offset 3134 */
- "\x69\xcc\x89\0" /* offset 3138 */
- "\x49\xcc\xa3\0" /* offset 3142 */
- "\x69\xcc\xa3\0" /* offset 3146 */
- "\x4f\xcc\xa3\0" /* offset 3150 */
- "\x6f\xcc\xa3\0" /* offset 3154 */
- "\x4f\xcc\x89\0" /* offset 3158 */
- "\x6f\xcc\x89\0" /* offset 3162 */
- "\x4f\xcc\x82\xcc\x81\0" /* offset 3166 */
- "\x6f\xcc\x82\xcc\x81\0" /* offset 3172 */
- "\x4f\xcc\x82\xcc\x80\0" /* offset 3178 */
- "\x6f\xcc\x82\xcc\x80\0" /* offset 3184 */
- "\x4f\xcc\x82\xcc\x89\0" /* offset 3190 */
- "\x6f\xcc\x82\xcc\x89\0" /* offset 3196 */
- "\x4f\xcc\x82\xcc\x83\0" /* offset 3202 */
- "\x6f\xcc\x82\xcc\x83\0" /* offset 3208 */
- "\x4f\xcc\xa3\xcc\x82\0" /* offset 3214 */
- "\x6f\xcc\xa3\xcc\x82\0" /* offset 3220 */
- "\x4f\xcc\x9b\xcc\x81\0" /* offset 3226 */
- "\x6f\xcc\x9b\xcc\x81\0" /* offset 3232 */
- "\x4f\xcc\x9b\xcc\x80\0" /* offset 3238 */
- "\x6f\xcc\x9b\xcc\x80\0" /* offset 3244 */
- "\x4f\xcc\x9b\xcc\x89\0" /* offset 3250 */
- "\x6f\xcc\x9b\xcc\x89\0" /* offset 3256 */
- "\x4f\xcc\x9b\xcc\x83\0" /* offset 3262 */
- "\x6f\xcc\x9b\xcc\x83\0" /* offset 3268 */
- "\x4f\xcc\x9b\xcc\xa3\0" /* offset 3274 */
- "\x6f\xcc\x9b\xcc\xa3\0" /* offset 3280 */
- "\x55\xcc\xa3\0" /* offset 3286 */
- "\x75\xcc\xa3\0" /* offset 3290 */
- "\x55\xcc\x89\0" /* offset 3294 */
- "\x75\xcc\x89\0" /* offset 3298 */
- "\x55\xcc\x9b\xcc\x81\0" /* offset 3302 */
- "\x75\xcc\x9b\xcc\x81\0" /* offset 3308 */
- "\x55\xcc\x9b\xcc\x80\0" /* offset 3314 */
- "\x75\xcc\x9b\xcc\x80\0" /* offset 3320 */
- "\x55\xcc\x9b\xcc\x89\0" /* offset 3326 */
- "\x75\xcc\x9b\xcc\x89\0" /* offset 3332 */
- "\x55\xcc\x9b\xcc\x83\0" /* offset 3338 */
- "\x75\xcc\x9b\xcc\x83\0" /* offset 3344 */
- "\x55\xcc\x9b\xcc\xa3\0" /* offset 3350 */
- "\x75\xcc\x9b\xcc\xa3\0" /* offset 3356 */
- "\x59\xcc\x80\0" /* offset 3362 */
- "\x79\xcc\x80\0" /* offset 3366 */
- "\x59\xcc\xa3\0" /* offset 3370 */
- "\x79\xcc\xa3\0" /* offset 3374 */
- "\x59\xcc\x89\0" /* offset 3378 */
- "\x79\xcc\x89\0" /* offset 3382 */
- "\x59\xcc\x83\0" /* offset 3386 */
- "\x79\xcc\x83\0" /* offset 3390 */
- "\xce\xb1\xcc\x93\0" /* offset 3394 */
- "\xce\xb1\xcc\x94\0" /* offset 3399 */
- "\xce\xb1\xcc\x93\xcc\x80\0" /* offset 3404 */
- "\xce\xb1\xcc\x94\xcc\x80\0" /* offset 3411 */
- "\xce\xb1\xcc\x93\xcc\x81\0" /* offset 3418 */
- "\xce\xb1\xcc\x94\xcc\x81\0" /* offset 3425 */
- "\xce\xb1\xcc\x93\xcd\x82\0" /* offset 3432 */
- "\xce\xb1\xcc\x94\xcd\x82\0" /* offset 3439 */
- "\xce\x91\xcc\x93\0" /* offset 3446 */
- "\xce\x91\xcc\x94\0" /* offset 3451 */
- "\xce\x91\xcc\x93\xcc\x80\0" /* offset 3456 */
- "\xce\x91\xcc\x94\xcc\x80\0" /* offset 3463 */
- "\xce\x91\xcc\x93\xcc\x81\0" /* offset 3470 */
- "\xce\x91\xcc\x94\xcc\x81\0" /* offset 3477 */
- "\xce\x91\xcc\x93\xcd\x82\0" /* offset 3484 */
- "\xce\x91\xcc\x94\xcd\x82\0" /* offset 3491 */
- "\xce\xb5\xcc\x93\0" /* offset 3498 */
- "\xce\xb5\xcc\x94\0" /* offset 3503 */
- "\xce\xb5\xcc\x93\xcc\x80\0" /* offset 3508 */
- "\xce\xb5\xcc\x94\xcc\x80\0" /* offset 3515 */
- "\xce\xb5\xcc\x93\xcc\x81\0" /* offset 3522 */
- "\xce\xb5\xcc\x94\xcc\x81\0" /* offset 3529 */
- "\xce\x95\xcc\x93\0" /* offset 3536 */
- "\xce\x95\xcc\x94\0" /* offset 3541 */
- "\xce\x95\xcc\x93\xcc\x80\0" /* offset 3546 */
- "\xce\x95\xcc\x94\xcc\x80\0" /* offset 3553 */
- "\xce\x95\xcc\x93\xcc\x81\0" /* offset 3560 */
- "\xce\x95\xcc\x94\xcc\x81\0" /* offset 3567 */
- "\xce\xb7\xcc\x93\0" /* offset 3574 */
- "\xce\xb7\xcc\x94\0" /* offset 3579 */
- "\xce\xb7\xcc\x93\xcc\x80\0" /* offset 3584 */
- "\xce\xb7\xcc\x94\xcc\x80\0" /* offset 3591 */
- "\xce\xb7\xcc\x93\xcc\x81\0" /* offset 3598 */
- "\xce\xb7\xcc\x94\xcc\x81\0" /* offset 3605 */
- "\xce\xb7\xcc\x93\xcd\x82\0" /* offset 3612 */
- "\xce\xb7\xcc\x94\xcd\x82\0" /* offset 3619 */
- "\xce\x97\xcc\x93\0" /* offset 3626 */
- "\xce\x97\xcc\x94\0" /* offset 3631 */
- "\xce\x97\xcc\x93\xcc\x80\0" /* offset 3636 */
- "\xce\x97\xcc\x94\xcc\x80\0" /* offset 3643 */
- "\xce\x97\xcc\x93\xcc\x81\0" /* offset 3650 */
- "\xce\x97\xcc\x94\xcc\x81\0" /* offset 3657 */
- "\xce\x97\xcc\x93\xcd\x82\0" /* offset 3664 */
- "\xce\x97\xcc\x94\xcd\x82\0" /* offset 3671 */
- "\xce\xb9\xcc\x93\0" /* offset 3678 */
- "\xce\xb9\xcc\x94\0" /* offset 3683 */
- "\xce\xb9\xcc\x93\xcc\x80\0" /* offset 3688 */
- "\xce\xb9\xcc\x94\xcc\x80\0" /* offset 3695 */
- "\xce\xb9\xcc\x93\xcc\x81\0" /* offset 3702 */
- "\xce\xb9\xcc\x94\xcc\x81\0" /* offset 3709 */
- "\xce\xb9\xcc\x93\xcd\x82\0" /* offset 3716 */
- "\xce\xb9\xcc\x94\xcd\x82\0" /* offset 3723 */
- "\xce\x99\xcc\x93\0" /* offset 3730 */
- "\xce\x99\xcc\x94\0" /* offset 3735 */
- "\xce\x99\xcc\x93\xcc\x80\0" /* offset 3740 */
- "\xce\x99\xcc\x94\xcc\x80\0" /* offset 3747 */
- "\xce\x99\xcc\x93\xcc\x81\0" /* offset 3754 */
- "\xce\x99\xcc\x94\xcc\x81\0" /* offset 3761 */
- "\xce\x99\xcc\x93\xcd\x82\0" /* offset 3768 */
- "\xce\x99\xcc\x94\xcd\x82\0" /* offset 3775 */
- "\xce\xbf\xcc\x93\0" /* offset 3782 */
- "\xce\xbf\xcc\x94\0" /* offset 3787 */
- "\xce\xbf\xcc\x93\xcc\x80\0" /* offset 3792 */
- "\xce\xbf\xcc\x94\xcc\x80\0" /* offset 3799 */
- "\xce\xbf\xcc\x93\xcc\x81\0" /* offset 3806 */
- "\xce\xbf\xcc\x94\xcc\x81\0" /* offset 3813 */
- "\xce\x9f\xcc\x93\0" /* offset 3820 */
- "\xce\x9f\xcc\x94\0" /* offset 3825 */
- "\xce\x9f\xcc\x93\xcc\x80\0" /* offset 3830 */
- "\xce\x9f\xcc\x94\xcc\x80\0" /* offset 3837 */
- "\xce\x9f\xcc\x93\xcc\x81\0" /* offset 3844 */
- "\xce\x9f\xcc\x94\xcc\x81\0" /* offset 3851 */
- "\xcf\x85\xcc\x93\0" /* offset 3858 */
- "\xcf\x85\xcc\x94\0" /* offset 3863 */
- "\xcf\x85\xcc\x93\xcc\x80\0" /* offset 3868 */
- "\xcf\x85\xcc\x94\xcc\x80\0" /* offset 3875 */
- "\xcf\x85\xcc\x93\xcc\x81\0" /* offset 3882 */
- "\xcf\x85\xcc\x94\xcc\x81\0" /* offset 3889 */
- "\xcf\x85\xcc\x93\xcd\x82\0" /* offset 3896 */
- "\xcf\x85\xcc\x94\xcd\x82\0" /* offset 3903 */
- "\xce\xa5\xcc\x94\0" /* offset 3910 */
- "\xce\xa5\xcc\x94\xcc\x80\0" /* offset 3915 */
- "\xce\xa5\xcc\x94\xcc\x81\0" /* offset 3922 */
- "\xce\xa5\xcc\x94\xcd\x82\0" /* offset 3929 */
- "\xcf\x89\xcc\x93\0" /* offset 3936 */
- "\xcf\x89\xcc\x94\0" /* offset 3941 */
- "\xcf\x89\xcc\x93\xcc\x80\0" /* offset 3946 */
- "\xcf\x89\xcc\x94\xcc\x80\0" /* offset 3953 */
- "\xcf\x89\xcc\x93\xcc\x81\0" /* offset 3960 */
- "\xcf\x89\xcc\x94\xcc\x81\0" /* offset 3967 */
- "\xcf\x89\xcc\x93\xcd\x82\0" /* offset 3974 */
- "\xcf\x89\xcc\x94\xcd\x82\0" /* offset 3981 */
- "\xce\xa9\xcc\x93\0" /* offset 3988 */
- "\xce\xa9\xcc\x94\0" /* offset 3993 */
- "\xce\xa9\xcc\x93\xcc\x80\0" /* offset 3998 */
- "\xce\xa9\xcc\x94\xcc\x80\0" /* offset 4005 */
- "\xce\xa9\xcc\x93\xcc\x81\0" /* offset 4012 */
- "\xce\xa9\xcc\x94\xcc\x81\0" /* offset 4019 */
- "\xce\xa9\xcc\x93\xcd\x82\0" /* offset 4026 */
- "\xce\xa9\xcc\x94\xcd\x82\0" /* offset 4033 */
- "\xce\xb1\xcc\x80\0" /* offset 4040 */
- "\xce\xb5\xcc\x80\0" /* offset 4045 */
- "\xce\xb7\xcc\x80\0" /* offset 4050 */
- "\xce\xb9\xcc\x80\0" /* offset 4055 */
- "\xce\xbf\xcc\x80\0" /* offset 4060 */
- "\xcf\x85\xcc\x80\0" /* offset 4065 */
- "\xcf\x89\xcc\x80\0" /* offset 4070 */
- "\xce\xb1\xcc\x93\xcd\x85\0" /* offset 4075 */
- "\xce\xb1\xcc\x94\xcd\x85\0" /* offset 4082 */
- "\xce\xb1\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4089 */
- "\xce\xb1\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4098 */
- "\xce\xb1\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4107 */
- "\xce\xb1\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4116 */
- "\xce\xb1\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4125 */
- "\xce\xb1\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4134 */
- "\xce\x91\xcc\x93\xcd\x85\0" /* offset 4143 */
- "\xce\x91\xcc\x94\xcd\x85\0" /* offset 4150 */
- "\xce\x91\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4157 */
- "\xce\x91\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4166 */
- "\xce\x91\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4175 */
- "\xce\x91\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4184 */
- "\xce\x91\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4193 */
- "\xce\x91\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4202 */
- "\xce\xb7\xcc\x93\xcd\x85\0" /* offset 4211 */
- "\xce\xb7\xcc\x94\xcd\x85\0" /* offset 4218 */
- "\xce\xb7\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4225 */
- "\xce\xb7\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4234 */
- "\xce\xb7\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4243 */
- "\xce\xb7\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4252 */
- "\xce\xb7\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4261 */
- "\xce\xb7\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4270 */
- "\xce\x97\xcc\x93\xcd\x85\0" /* offset 4279 */
- "\xce\x97\xcc\x94\xcd\x85\0" /* offset 4286 */
- "\xce\x97\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4293 */
- "\xce\x97\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4302 */
- "\xce\x97\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4311 */
- "\xce\x97\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4320 */
- "\xce\x97\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4329 */
- "\xce\x97\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4338 */
- "\xcf\x89\xcc\x93\xcd\x85\0" /* offset 4347 */
- "\xcf\x89\xcc\x94\xcd\x85\0" /* offset 4354 */
- "\xcf\x89\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4361 */
- "\xcf\x89\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4370 */
- "\xcf\x89\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4379 */
- "\xcf\x89\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4388 */
- "\xcf\x89\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4397 */
- "\xcf\x89\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4406 */
- "\xce\xa9\xcc\x93\xcd\x85\0" /* offset 4415 */
- "\xce\xa9\xcc\x94\xcd\x85\0" /* offset 4422 */
- "\xce\xa9\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4429 */
- "\xce\xa9\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4438 */
- "\xce\xa9\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4447 */
- "\xce\xa9\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4456 */
- "\xce\xa9\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4465 */
- "\xce\xa9\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4474 */
- "\xce\xb1\xcc\x86\0" /* offset 4483 */
- "\xce\xb1\xcc\x84\0" /* offset 4488 */
- "\xce\xb1\xcc\x80\xcd\x85\0" /* offset 4493 */
- "\xce\xb1\xcd\x85\0" /* offset 4500 */
- "\xce\xb1\xcc\x81\xcd\x85\0" /* offset 4505 */
- "\xce\xb1\xcd\x82\0" /* offset 4512 */
- "\xce\xb1\xcd\x82\xcd\x85\0" /* offset 4517 */
- "\xce\x91\xcc\x86\0" /* offset 4524 */
- "\xce\x91\xcc\x84\0" /* offset 4529 */
- "\xce\x91\xcc\x80\0" /* offset 4534 */
- "\xce\x91\xcd\x85\0" /* offset 4539 */
- "\x20\xcc\x93\0" /* offset 4544 */
- "\xce\xb9\0" /* offset 4548 */
- "\x20\xcd\x82\0" /* offset 4551 */
- "\xc2\xa8\xcd\x82\0" /* offset 4555 */
- "\x20\xcc\x88\xcd\x82\0" /* offset 4560 */
- "\xce\xb7\xcc\x80\xcd\x85\0" /* offset 4566 */
- "\xce\xb7\xcd\x85\0" /* offset 4573 */
- "\xce\xb7\xcc\x81\xcd\x85\0" /* offset 4578 */
- "\xce\xb7\xcd\x82\0" /* offset 4585 */
- "\xce\xb7\xcd\x82\xcd\x85\0" /* offset 4590 */
- "\xce\x95\xcc\x80\0" /* offset 4597 */
- "\xce\x97\xcc\x80\0" /* offset 4602 */
- "\xce\x97\xcd\x85\0" /* offset 4607 */
- "\xe1\xbe\xbf\xcc\x80\0" /* offset 4612 */
- "\x20\xcc\x93\xcc\x80\0" /* offset 4618 */
- "\xe1\xbe\xbf\xcc\x81\0" /* offset 4624 */
- "\x20\xcc\x93\xcc\x81\0" /* offset 4630 */
- "\xe1\xbe\xbf\xcd\x82\0" /* offset 4636 */
- "\x20\xcc\x93\xcd\x82\0" /* offset 4642 */
- "\xce\xb9\xcc\x86\0" /* offset 4648 */
- "\xce\xb9\xcc\x84\0" /* offset 4653 */
- "\xce\xb9\xcc\x88\xcc\x80\0" /* offset 4658 */
- "\xce\xb9\xcd\x82\0" /* offset 4665 */
- "\xce\xb9\xcc\x88\xcd\x82\0" /* offset 4670 */
- "\xce\x99\xcc\x86\0" /* offset 4677 */
- "\xce\x99\xcc\x84\0" /* offset 4682 */
- "\xce\x99\xcc\x80\0" /* offset 4687 */
- "\xe1\xbf\xbe\xcc\x80\0" /* offset 4692 */
- "\x20\xcc\x94\xcc\x80\0" /* offset 4698 */
- "\xe1\xbf\xbe\xcc\x81\0" /* offset 4704 */
- "\x20\xcc\x94\xcc\x81\0" /* offset 4710 */
- "\xe1\xbf\xbe\xcd\x82\0" /* offset 4716 */
- "\x20\xcc\x94\xcd\x82\0" /* offset 4722 */
- "\xcf\x85\xcc\x86\0" /* offset 4728 */
- "\xcf\x85\xcc\x84\0" /* offset 4733 */
- "\xcf\x85\xcc\x88\xcc\x80\0" /* offset 4738 */
- "\xcf\x81\xcc\x93\0" /* offset 4745 */
- "\xcf\x81\xcc\x94\0" /* offset 4750 */
- "\xcf\x85\xcd\x82\0" /* offset 4755 */
- "\xcf\x85\xcc\x88\xcd\x82\0" /* offset 4760 */
- "\xce\xa5\xcc\x86\0" /* offset 4767 */
- "\xce\xa5\xcc\x84\0" /* offset 4772 */
- "\xce\xa5\xcc\x80\0" /* offset 4777 */
- "\xce\xa1\xcc\x94\0" /* offset 4782 */
- "\xc2\xa8\xcc\x80\0" /* offset 4787 */
- "\x20\xcc\x88\xcc\x80\0" /* offset 4792 */
- "\x60\0" /* offset 4798 */
- "\xcf\x89\xcc\x80\xcd\x85\0" /* offset 4800 */
- "\xcf\x89\xcd\x85\0" /* offset 4807 */
- "\xcf\x89\xcc\x81\xcd\x85\0" /* offset 4812 */
- "\xcf\x89\xcd\x82\0" /* offset 4819 */
- "\xcf\x89\xcd\x82\xcd\x85\0" /* offset 4824 */
- "\xce\x9f\xcc\x80\0" /* offset 4831 */
- "\xce\xa9\xcc\x80\0" /* offset 4836 */
- "\xce\xa9\xcd\x85\0" /* offset 4841 */
- "\xc2\xb4\0" /* offset 4846 */
- "\x20\xcc\x94\0" /* offset 4849 */
- "\xe2\x80\x82\0" /* offset 4853 */
- "\xe2\x80\x83\0" /* offset 4857 */
- "\xe2\x80\x90\0" /* offset 4861 */
- "\x20\xcc\xb3\0" /* offset 4865 */
- "\x2e\0" /* offset 4869 */
- "\x2e\x2e\0" /* offset 4871 */
- "\x2e\x2e\x2e\0" /* offset 4874 */
- "\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 4878 */
- "\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 4885 */
- "\xe2\x80\xb5\xe2\x80\xb5\0" /* offset 4895 */
- "\xe2\x80\xb5\xe2\x80\xb5\xe2\x80\xb5\0" /* offset 4902 */
- "\x21\x21\0" /* offset 4912 */
- "\x20\xcc\x85\0" /* offset 4915 */
- "\x3f\x3f\0" /* offset 4919 */
- "\x3f\x21\0" /* offset 4922 */
- "\x21\x3f\0" /* offset 4925 */
- "\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 4928 */
- "\x30\0" /* offset 4941 */
- "\x69\0" /* offset 4943 */
- "\x34\0" /* offset 4945 */
- "\x35\0" /* offset 4947 */
- "\x36\0" /* offset 4949 */
- "\x37\0" /* offset 4951 */
- "\x38\0" /* offset 4953 */
- "\x39\0" /* offset 4955 */
- "\x2b\0" /* offset 4957 */
- "\xe2\x88\x92\0" /* offset 4959 */
- "\x3d\0" /* offset 4963 */
- "\x28\0" /* offset 4965 */
- "\x29\0" /* offset 4967 */
- "\x6e\0" /* offset 4969 */
- "\x52\x73\0" /* offset 4971 */
- "\x61\x2f\x63\0" /* offset 4974 */
- "\x61\x2f\x73\0" /* offset 4978 */
- "\x43\0" /* offset 4982 */
- "\xc2\xb0\x43\0" /* offset 4984 */
- "\x63\x2f\x6f\0" /* offset 4988 */
- "\x63\x2f\x75\0" /* offset 4992 */
- "\xc6\x90\0" /* offset 4996 */
- "\xc2\xb0\x46\0" /* offset 4999 */
- "\x67\0" /* offset 5003 */
- "\x48\0" /* offset 5005 */
- "\xc4\xa7\0" /* offset 5007 */
- "\x49\0" /* offset 5010 */
- "\x4c\0" /* offset 5012 */
- "\x4e\0" /* offset 5014 */
- "\x4e\x6f\0" /* offset 5016 */
- "\x50\0" /* offset 5019 */
- "\x51\0" /* offset 5021 */
- "\x52\0" /* offset 5023 */
- "\x53\x4d\0" /* offset 5025 */
- "\x54\x45\x4c\0" /* offset 5028 */
- "\x54\x4d\0" /* offset 5032 */
- "\x5a\0" /* offset 5035 */
- "\xce\xa9\0" /* offset 5037 */
- "\x4b\0" /* offset 5040 */
- "\x42\0" /* offset 5042 */
- "\x65\0" /* offset 5044 */
- "\x45\0" /* offset 5046 */
- "\x46\0" /* offset 5048 */
- "\x4d\0" /* offset 5050 */
- "\xd7\x90\0" /* offset 5052 */
- "\xd7\x91\0" /* offset 5055 */
- "\xd7\x92\0" /* offset 5058 */
- "\xd7\x93\0" /* offset 5061 */
- "\xce\xb3\0" /* offset 5064 */
- "\xce\x93\0" /* offset 5067 */
- "\xce\xa0\0" /* offset 5070 */
- "\xe2\x88\x91\0" /* offset 5073 */
- "\x44\0" /* offset 5077 */
- "\x64\0" /* offset 5079 */
- "\x31\xe2\x81\x84\x33\0" /* offset 5081 */
- "\x32\xe2\x81\x84\x33\0" /* offset 5087 */
- "\x31\xe2\x81\x84\x35\0" /* offset 5093 */
- "\x32\xe2\x81\x84\x35\0" /* offset 5099 */
- "\x33\xe2\x81\x84\x35\0" /* offset 5105 */
- "\x34\xe2\x81\x84\x35\0" /* offset 5111 */
- "\x31\xe2\x81\x84\x36\0" /* offset 5117 */
- "\x35\xe2\x81\x84\x36\0" /* offset 5123 */
- "\x31\xe2\x81\x84\x38\0" /* offset 5129 */
- "\x33\xe2\x81\x84\x38\0" /* offset 5135 */
- "\x35\xe2\x81\x84\x38\0" /* offset 5141 */
- "\x37\xe2\x81\x84\x38\0" /* offset 5147 */
- "\x31\xe2\x81\x84\0" /* offset 5153 */
- "\x49\x49\0" /* offset 5158 */
- "\x49\x49\x49\0" /* offset 5161 */
- "\x49\x56\0" /* offset 5165 */
- "\x56\0" /* offset 5168 */
- "\x56\x49\0" /* offset 5170 */
- "\x56\x49\x49\0" /* offset 5173 */
- "\x56\x49\x49\x49\0" /* offset 5177 */
- "\x49\x58\0" /* offset 5182 */
- "\x58\0" /* offset 5185 */
- "\x58\x49\0" /* offset 5187 */
- "\x58\x49\x49\0" /* offset 5190 */
- "\x69\x69\0" /* offset 5194 */
- "\x69\x69\x69\0" /* offset 5197 */
- "\x69\x76\0" /* offset 5201 */
- "\x76\0" /* offset 5204 */
- "\x76\x69\0" /* offset 5206 */
- "\x76\x69\x69\0" /* offset 5209 */
- "\x76\x69\x69\x69\0" /* offset 5213 */
- "\x69\x78\0" /* offset 5218 */
- "\x78\x69\0" /* offset 5221 */
- "\x78\x69\x69\0" /* offset 5224 */
- "\x63\0" /* offset 5228 */
- "\x6d\0" /* offset 5230 */
- "\xe2\x86\x90\xcc\xb8\0" /* offset 5232 */
- "\xe2\x86\x92\xcc\xb8\0" /* offset 5238 */
- "\xe2\x86\x94\xcc\xb8\0" /* offset 5244 */
- "\xe2\x87\x90\xcc\xb8\0" /* offset 5250 */
- "\xe2\x87\x94\xcc\xb8\0" /* offset 5256 */
- "\xe2\x87\x92\xcc\xb8\0" /* offset 5262 */
- "\xe2\x88\x83\xcc\xb8\0" /* offset 5268 */
- "\xe2\x88\x88\xcc\xb8\0" /* offset 5274 */
- "\xe2\x88\x8b\xcc\xb8\0" /* offset 5280 */
- "\xe2\x88\xa3\xcc\xb8\0" /* offset 5286 */
- "\xe2\x88\xa5\xcc\xb8\0" /* offset 5292 */
- "\xe2\x88\xab\xe2\x88\xab\0" /* offset 5298 */
- "\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\0" /* offset 5305 */
- "\xe2\x88\xae\xe2\x88\xae\0" /* offset 5315 */
- "\xe2\x88\xae\xe2\x88\xae\xe2\x88\xae\0" /* offset 5322 */
- "\xe2\x88\xbc\xcc\xb8\0" /* offset 5332 */
- "\xe2\x89\x83\xcc\xb8\0" /* offset 5338 */
- "\xe2\x89\x85\xcc\xb8\0" /* offset 5344 */
- "\xe2\x89\x88\xcc\xb8\0" /* offset 5350 */
- "\x3d\xcc\xb8\0" /* offset 5356 */
- "\xe2\x89\xa1\xcc\xb8\0" /* offset 5360 */
- "\xe2\x89\x8d\xcc\xb8\0" /* offset 5366 */
- "\x3c\xcc\xb8\0" /* offset 5372 */
- "\x3e\xcc\xb8\0" /* offset 5376 */
- "\xe2\x89\xa4\xcc\xb8\0" /* offset 5380 */
- "\xe2\x89\xa5\xcc\xb8\0" /* offset 5386 */
- "\xe2\x89\xb2\xcc\xb8\0" /* offset 5392 */
- "\xe2\x89\xb3\xcc\xb8\0" /* offset 5398 */
- "\xe2\x89\xb6\xcc\xb8\0" /* offset 5404 */
- "\xe2\x89\xb7\xcc\xb8\0" /* offset 5410 */
- "\xe2\x89\xba\xcc\xb8\0" /* offset 5416 */
- "\xe2\x89\xbb\xcc\xb8\0" /* offset 5422 */
- "\xe2\x8a\x82\xcc\xb8\0" /* offset 5428 */
- "\xe2\x8a\x83\xcc\xb8\0" /* offset 5434 */
- "\xe2\x8a\x86\xcc\xb8\0" /* offset 5440 */
- "\xe2\x8a\x87\xcc\xb8\0" /* offset 5446 */
- "\xe2\x8a\xa2\xcc\xb8\0" /* offset 5452 */
- "\xe2\x8a\xa8\xcc\xb8\0" /* offset 5458 */
- "\xe2\x8a\xa9\xcc\xb8\0" /* offset 5464 */
- "\xe2\x8a\xab\xcc\xb8\0" /* offset 5470 */
- "\xe2\x89\xbc\xcc\xb8\0" /* offset 5476 */
- "\xe2\x89\xbd\xcc\xb8\0" /* offset 5482 */
- "\xe2\x8a\x91\xcc\xb8\0" /* offset 5488 */
- "\xe2\x8a\x92\xcc\xb8\0" /* offset 5494 */
- "\xe2\x8a\xb2\xcc\xb8\0" /* offset 5500 */
- "\xe2\x8a\xb3\xcc\xb8\0" /* offset 5506 */
- "\xe2\x8a\xb4\xcc\xb8\0" /* offset 5512 */
- "\xe2\x8a\xb5\xcc\xb8\0" /* offset 5518 */
- "\xe3\x80\x88\0" /* offset 5524 */
- "\xe3\x80\x89\0" /* offset 5528 */
- "\x31\x30\0" /* offset 5532 */
- "\x31\x31\0" /* offset 5535 */
- "\x31\x32\0" /* offset 5538 */
- "\x31\x33\0" /* offset 5541 */
- "\x31\x34\0" /* offset 5544 */
- "\x31\x35\0" /* offset 5547 */
- "\x31\x36\0" /* offset 5550 */
- "\x31\x37\0" /* offset 5553 */
- "\x31\x38\0" /* offset 5556 */
- "\x31\x39\0" /* offset 5559 */
- "\x32\x30\0" /* offset 5562 */
- "\x28\x31\x29\0" /* offset 5565 */
- "\x28\x32\x29\0" /* offset 5569 */
- "\x28\x33\x29\0" /* offset 5573 */
- "\x28\x34\x29\0" /* offset 5577 */
- "\x28\x35\x29\0" /* offset 5581 */
- "\x28\x36\x29\0" /* offset 5585 */
- "\x28\x37\x29\0" /* offset 5589 */
- "\x28\x38\x29\0" /* offset 5593 */
- "\x28\x39\x29\0" /* offset 5597 */
- "\x28\x31\x30\x29\0" /* offset 5601 */
- "\x28\x31\x31\x29\0" /* offset 5606 */
- "\x28\x31\x32\x29\0" /* offset 5611 */
- "\x28\x31\x33\x29\0" /* offset 5616 */
- "\x28\x31\x34\x29\0" /* offset 5621 */
- "\x28\x31\x35\x29\0" /* offset 5626 */
- "\x28\x31\x36\x29\0" /* offset 5631 */
- "\x28\x31\x37\x29\0" /* offset 5636 */
- "\x28\x31\x38\x29\0" /* offset 5641 */
- "\x28\x31\x39\x29\0" /* offset 5646 */
- "\x28\x32\x30\x29\0" /* offset 5651 */
- "\x31\x2e\0" /* offset 5656 */
- "\x32\x2e\0" /* offset 5659 */
- "\x33\x2e\0" /* offset 5662 */
- "\x34\x2e\0" /* offset 5665 */
- "\x35\x2e\0" /* offset 5668 */
- "\x36\x2e\0" /* offset 5671 */
- "\x37\x2e\0" /* offset 5674 */
- "\x38\x2e\0" /* offset 5677 */
- "\x39\x2e\0" /* offset 5680 */
- "\x31\x30\x2e\0" /* offset 5683 */
- "\x31\x31\x2e\0" /* offset 5687 */
- "\x31\x32\x2e\0" /* offset 5691 */
- "\x31\x33\x2e\0" /* offset 5695 */
- "\x31\x34\x2e\0" /* offset 5699 */
- "\x31\x35\x2e\0" /* offset 5703 */
- "\x31\x36\x2e\0" /* offset 5707 */
- "\x31\x37\x2e\0" /* offset 5711 */
- "\x31\x38\x2e\0" /* offset 5715 */
- "\x31\x39\x2e\0" /* offset 5719 */
- "\x32\x30\x2e\0" /* offset 5723 */
- "\x28\x61\x29\0" /* offset 5727 */
- "\x28\x62\x29\0" /* offset 5731 */
- "\x28\x63\x29\0" /* offset 5735 */
- "\x28\x64\x29\0" /* offset 5739 */
- "\x28\x65\x29\0" /* offset 5743 */
- "\x28\x66\x29\0" /* offset 5747 */
- "\x28\x67\x29\0" /* offset 5751 */
- "\x28\x68\x29\0" /* offset 5755 */
- "\x28\x69\x29\0" /* offset 5759 */
- "\x28\x6a\x29\0" /* offset 5763 */
- "\x28\x6b\x29\0" /* offset 5767 */
- "\x28\x6c\x29\0" /* offset 5771 */
- "\x28\x6d\x29\0" /* offset 5775 */
- "\x28\x6e\x29\0" /* offset 5779 */
- "\x28\x6f\x29\0" /* offset 5783 */
- "\x28\x70\x29\0" /* offset 5787 */
- "\x28\x71\x29\0" /* offset 5791 */
- "\x28\x72\x29\0" /* offset 5795 */
- "\x28\x73\x29\0" /* offset 5799 */
- "\x28\x74\x29\0" /* offset 5803 */
- "\x28\x75\x29\0" /* offset 5807 */
- "\x28\x76\x29\0" /* offset 5811 */
- "\x28\x77\x29\0" /* offset 5815 */
- "\x28\x78\x29\0" /* offset 5819 */
- "\x28\x79\x29\0" /* offset 5823 */
- "\x28\x7a\x29\0" /* offset 5827 */
- "\x41\0" /* offset 5831 */
- "\x47\0" /* offset 5833 */
- "\x4a\0" /* offset 5835 */
- "\x4f\0" /* offset 5837 */
- "\x53\0" /* offset 5839 */
- "\x54\0" /* offset 5841 */
- "\x55\0" /* offset 5843 */
- "\x57\0" /* offset 5845 */
- "\x59\0" /* offset 5847 */
- "\x62\0" /* offset 5849 */
- "\x66\0" /* offset 5851 */
- "\x6b\0" /* offset 5853 */
- "\x70\0" /* offset 5855 */
- "\x71\0" /* offset 5857 */
- "\x74\0" /* offset 5859 */
- "\x75\0" /* offset 5861 */
- "\x7a\0" /* offset 5863 */
- "\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\0" /* offset 5865 */
- "\x3a\x3a\x3d\0" /* offset 5878 */
- "\x3d\x3d\0" /* offset 5882 */
- "\x3d\x3d\x3d\0" /* offset 5885 */
- "\xe2\xab\x9d\xcc\xb8\0" /* offset 5889 */
- "\xe6\xaf\x8d\0" /* offset 5895 */
- "\xe9\xbe\x9f\0" /* offset 5899 */
- "\xe4\xb8\x80\0" /* offset 5903 */
- "\xe4\xb8\xa8\0" /* offset 5907 */
- "\xe4\xb8\xb6\0" /* offset 5911 */
- "\xe4\xb8\xbf\0" /* offset 5915 */
- "\xe4\xb9\x99\0" /* offset 5919 */
- "\xe4\xba\x85\0" /* offset 5923 */
- "\xe4\xba\x8c\0" /* offset 5927 */
- "\xe4\xba\xa0\0" /* offset 5931 */
- "\xe4\xba\xba\0" /* offset 5935 */
- "\xe5\x84\xbf\0" /* offset 5939 */
- "\xe5\x85\xa5\0" /* offset 5943 */
- "\xe5\x85\xab\0" /* offset 5947 */
- "\xe5\x86\x82\0" /* offset 5951 */
- "\xe5\x86\x96\0" /* offset 5955 */
- "\xe5\x86\xab\0" /* offset 5959 */
- "\xe5\x87\xa0\0" /* offset 5963 */
- "\xe5\x87\xb5\0" /* offset 5967 */
- "\xe5\x88\x80\0" /* offset 5971 */
- "\xe5\x8a\x9b\0" /* offset 5975 */
- "\xe5\x8b\xb9\0" /* offset 5979 */
- "\xe5\x8c\x95\0" /* offset 5983 */
- "\xe5\x8c\x9a\0" /* offset 5987 */
- "\xe5\x8c\xb8\0" /* offset 5991 */
- "\xe5\x8d\x81\0" /* offset 5995 */
- "\xe5\x8d\x9c\0" /* offset 5999 */
- "\xe5\x8d\xa9\0" /* offset 6003 */
- "\xe5\x8e\x82\0" /* offset 6007 */
- "\xe5\x8e\xb6\0" /* offset 6011 */
- "\xe5\x8f\x88\0" /* offset 6015 */
- "\xe5\x8f\xa3\0" /* offset 6019 */
- "\xe5\x9b\x97\0" /* offset 6023 */
- "\xe5\x9c\x9f\0" /* offset 6027 */
- "\xe5\xa3\xab\0" /* offset 6031 */
- "\xe5\xa4\x82\0" /* offset 6035 */
- "\xe5\xa4\x8a\0" /* offset 6039 */
- "\xe5\xa4\x95\0" /* offset 6043 */
- "\xe5\xa4\xa7\0" /* offset 6047 */
- "\xe5\xa5\xb3\0" /* offset 6051 */
- "\xe5\xad\x90\0" /* offset 6055 */
- "\xe5\xae\x80\0" /* offset 6059 */
- "\xe5\xaf\xb8\0" /* offset 6063 */
- "\xe5\xb0\x8f\0" /* offset 6067 */
- "\xe5\xb0\xa2\0" /* offset 6071 */
- "\xe5\xb0\xb8\0" /* offset 6075 */
- "\xe5\xb1\xae\0" /* offset 6079 */
- "\xe5\xb1\xb1\0" /* offset 6083 */
- "\xe5\xb7\x9b\0" /* offset 6087 */
- "\xe5\xb7\xa5\0" /* offset 6091 */
- "\xe5\xb7\xb1\0" /* offset 6095 */
- "\xe5\xb7\xbe\0" /* offset 6099 */
- "\xe5\xb9\xb2\0" /* offset 6103 */
- "\xe5\xb9\xba\0" /* offset 6107 */
- "\xe5\xb9\xbf\0" /* offset 6111 */
- "\xe5\xbb\xb4\0" /* offset 6115 */
- "\xe5\xbb\xbe\0" /* offset 6119 */
- "\xe5\xbc\x8b\0" /* offset 6123 */
- "\xe5\xbc\x93\0" /* offset 6127 */
- "\xe5\xbd\x90\0" /* offset 6131 */
- "\xe5\xbd\xa1\0" /* offset 6135 */
- "\xe5\xbd\xb3\0" /* offset 6139 */
- "\xe5\xbf\x83\0" /* offset 6143 */
- "\xe6\x88\x88\0" /* offset 6147 */
- "\xe6\x88\xb6\0" /* offset 6151 */
- "\xe6\x89\x8b\0" /* offset 6155 */
- "\xe6\x94\xaf\0" /* offset 6159 */
- "\xe6\x94\xb4\0" /* offset 6163 */
- "\xe6\x96\x87\0" /* offset 6167 */
- "\xe6\x96\x97\0" /* offset 6171 */
- "\xe6\x96\xa4\0" /* offset 6175 */
- "\xe6\x96\xb9\0" /* offset 6179 */
- "\xe6\x97\xa0\0" /* offset 6183 */
- "\xe6\x97\xa5\0" /* offset 6187 */
- "\xe6\x9b\xb0\0" /* offset 6191 */
- "\xe6\x9c\x88\0" /* offset 6195 */
- "\xe6\x9c\xa8\0" /* offset 6199 */
- "\xe6\xac\xa0\0" /* offset 6203 */
- "\xe6\xad\xa2\0" /* offset 6207 */
- "\xe6\xad\xb9\0" /* offset 6211 */
- "\xe6\xae\xb3\0" /* offset 6215 */
- "\xe6\xaf\x8b\0" /* offset 6219 */
- "\xe6\xaf\x94\0" /* offset 6223 */
- "\xe6\xaf\x9b\0" /* offset 6227 */
- "\xe6\xb0\x8f\0" /* offset 6231 */
- "\xe6\xb0\x94\0" /* offset 6235 */
- "\xe6\xb0\xb4\0" /* offset 6239 */
- "\xe7\x81\xab\0" /* offset 6243 */
- "\xe7\x88\xaa\0" /* offset 6247 */
- "\xe7\x88\xb6\0" /* offset 6251 */
- "\xe7\x88\xbb\0" /* offset 6255 */
- "\xe7\x88\xbf\0" /* offset 6259 */
- "\xe7\x89\x87\0" /* offset 6263 */
- "\xe7\x89\x99\0" /* offset 6267 */
- "\xe7\x89\x9b\0" /* offset 6271 */
- "\xe7\x8a\xac\0" /* offset 6275 */
- "\xe7\x8e\x84\0" /* offset 6279 */
- "\xe7\x8e\x89\0" /* offset 6283 */
- "\xe7\x93\x9c\0" /* offset 6287 */
- "\xe7\x93\xa6\0" /* offset 6291 */
- "\xe7\x94\x98\0" /* offset 6295 */
- "\xe7\x94\x9f\0" /* offset 6299 */
- "\xe7\x94\xa8\0" /* offset 6303 */
- "\xe7\x94\xb0\0" /* offset 6307 */
- "\xe7\x96\x8b\0" /* offset 6311 */
- "\xe7\x96\x92\0" /* offset 6315 */
- "\xe7\x99\xb6\0" /* offset 6319 */
- "\xe7\x99\xbd\0" /* offset 6323 */
- "\xe7\x9a\xae\0" /* offset 6327 */
- "\xe7\x9a\xbf\0" /* offset 6331 */
- "\xe7\x9b\xae\0" /* offset 6335 */
- "\xe7\x9f\x9b\0" /* offset 6339 */
- "\xe7\x9f\xa2\0" /* offset 6343 */
- "\xe7\x9f\xb3\0" /* offset 6347 */
- "\xe7\xa4\xba\0" /* offset 6351 */
- "\xe7\xa6\xb8\0" /* offset 6355 */
- "\xe7\xa6\xbe\0" /* offset 6359 */
- "\xe7\xa9\xb4\0" /* offset 6363 */
- "\xe7\xab\x8b\0" /* offset 6367 */
- "\xe7\xab\xb9\0" /* offset 6371 */
- "\xe7\xb1\xb3\0" /* offset 6375 */
- "\xe7\xb3\xb8\0" /* offset 6379 */
- "\xe7\xbc\xb6\0" /* offset 6383 */
- "\xe7\xbd\x91\0" /* offset 6387 */
- "\xe7\xbe\x8a\0" /* offset 6391 */
- "\xe7\xbe\xbd\0" /* offset 6395 */
- "\xe8\x80\x81\0" /* offset 6399 */
- "\xe8\x80\x8c\0" /* offset 6403 */
- "\xe8\x80\x92\0" /* offset 6407 */
- "\xe8\x80\xb3\0" /* offset 6411 */
- "\xe8\x81\xbf\0" /* offset 6415 */
- "\xe8\x82\x89\0" /* offset 6419 */
- "\xe8\x87\xa3\0" /* offset 6423 */
- "\xe8\x87\xaa\0" /* offset 6427 */
- "\xe8\x87\xb3\0" /* offset 6431 */
- "\xe8\x87\xbc\0" /* offset 6435 */
- "\xe8\x88\x8c\0" /* offset 6439 */
- "\xe8\x88\x9b\0" /* offset 6443 */
- "\xe8\x88\x9f\0" /* offset 6447 */
- "\xe8\x89\xae\0" /* offset 6451 */
- "\xe8\x89\xb2\0" /* offset 6455 */
- "\xe8\x89\xb8\0" /* offset 6459 */
- "\xe8\x99\x8d\0" /* offset 6463 */
- "\xe8\x99\xab\0" /* offset 6467 */
- "\xe8\xa1\x80\0" /* offset 6471 */
- "\xe8\xa1\x8c\0" /* offset 6475 */
- "\xe8\xa1\xa3\0" /* offset 6479 */
- "\xe8\xa5\xbe\0" /* offset 6483 */
- "\xe8\xa6\x8b\0" /* offset 6487 */
- "\xe8\xa7\x92\0" /* offset 6491 */
- "\xe8\xa8\x80\0" /* offset 6495 */
- "\xe8\xb0\xb7\0" /* offset 6499 */
- "\xe8\xb1\x86\0" /* offset 6503 */
- "\xe8\xb1\x95\0" /* offset 6507 */
- "\xe8\xb1\xb8\0" /* offset 6511 */
- "\xe8\xb2\x9d\0" /* offset 6515 */
- "\xe8\xb5\xa4\0" /* offset 6519 */
- "\xe8\xb5\xb0\0" /* offset 6523 */
- "\xe8\xb6\xb3\0" /* offset 6527 */
- "\xe8\xba\xab\0" /* offset 6531 */
- "\xe8\xbb\x8a\0" /* offset 6535 */
- "\xe8\xbe\x9b\0" /* offset 6539 */
- "\xe8\xbe\xb0\0" /* offset 6543 */
- "\xe8\xbe\xb5\0" /* offset 6547 */
- "\xe9\x82\x91\0" /* offset 6551 */
- "\xe9\x85\x89\0" /* offset 6555 */
- "\xe9\x87\x86\0" /* offset 6559 */
- "\xe9\x87\x8c\0" /* offset 6563 */
- "\xe9\x87\x91\0" /* offset 6567 */
- "\xe9\x95\xb7\0" /* offset 6571 */
- "\xe9\x96\x80\0" /* offset 6575 */
- "\xe9\x98\x9c\0" /* offset 6579 */
- "\xe9\x9a\xb6\0" /* offset 6583 */
- "\xe9\x9a\xb9\0" /* offset 6587 */
- "\xe9\x9b\xa8\0" /* offset 6591 */
- "\xe9\x9d\x91\0" /* offset 6595 */
- "\xe9\x9d\x9e\0" /* offset 6599 */
- "\xe9\x9d\xa2\0" /* offset 6603 */
- "\xe9\x9d\xa9\0" /* offset 6607 */
- "\xe9\x9f\x8b\0" /* offset 6611 */
- "\xe9\x9f\xad\0" /* offset 6615 */
- "\xe9\x9f\xb3\0" /* offset 6619 */
- "\xe9\xa0\x81\0" /* offset 6623 */
- "\xe9\xa2\xa8\0" /* offset 6627 */
- "\xe9\xa3\x9b\0" /* offset 6631 */
- "\xe9\xa3\x9f\0" /* offset 6635 */
- "\xe9\xa6\x96\0" /* offset 6639 */
- "\xe9\xa6\x99\0" /* offset 6643 */
- "\xe9\xa6\xac\0" /* offset 6647 */
- "\xe9\xaa\xa8\0" /* offset 6651 */
- "\xe9\xab\x98\0" /* offset 6655 */
- "\xe9\xab\x9f\0" /* offset 6659 */
- "\xe9\xac\xa5\0" /* offset 6663 */
- "\xe9\xac\xaf\0" /* offset 6667 */
- "\xe9\xac\xb2\0" /* offset 6671 */
- "\xe9\xac\xbc\0" /* offset 6675 */
- "\xe9\xad\x9a\0" /* offset 6679 */
- "\xe9\xb3\xa5\0" /* offset 6683 */
- "\xe9\xb9\xb5\0" /* offset 6687 */
- "\xe9\xb9\xbf\0" /* offset 6691 */
- "\xe9\xba\xa5\0" /* offset 6695 */
- "\xe9\xba\xbb\0" /* offset 6699 */
- "\xe9\xbb\x83\0" /* offset 6703 */
- "\xe9\xbb\x8d\0" /* offset 6707 */
- "\xe9\xbb\x91\0" /* offset 6711 */
- "\xe9\xbb\xb9\0" /* offset 6715 */
- "\xe9\xbb\xbd\0" /* offset 6719 */
- "\xe9\xbc\x8e\0" /* offset 6723 */
- "\xe9\xbc\x93\0" /* offset 6727 */
- "\xe9\xbc\xa0\0" /* offset 6731 */
- "\xe9\xbc\xbb\0" /* offset 6735 */
- "\xe9\xbd\x8a\0" /* offset 6739 */
- "\xe9\xbd\x92\0" /* offset 6743 */
- "\xe9\xbe\x8d\0" /* offset 6747 */
- "\xe9\xbe\x9c\0" /* offset 6751 */
- "\xe9\xbe\xa0\0" /* offset 6755 */
- "\xe3\x80\x92\0" /* offset 6759 */
- "\xe5\x8d\x84\0" /* offset 6763 */
- "\xe5\x8d\x85\0" /* offset 6767 */
- "\xe3\x81\x8b\xe3\x82\x99\0" /* offset 6771 */
- "\xe3\x81\x8d\xe3\x82\x99\0" /* offset 6778 */
- "\xe3\x81\x8f\xe3\x82\x99\0" /* offset 6785 */
- "\xe3\x81\x91\xe3\x82\x99\0" /* offset 6792 */
- "\xe3\x81\x93\xe3\x82\x99\0" /* offset 6799 */
- "\xe3\x81\x95\xe3\x82\x99\0" /* offset 6806 */
- "\xe3\x81\x97\xe3\x82\x99\0" /* offset 6813 */
- "\xe3\x81\x99\xe3\x82\x99\0" /* offset 6820 */
- "\xe3\x81\x9b\xe3\x82\x99\0" /* offset 6827 */
- "\xe3\x81\x9d\xe3\x82\x99\0" /* offset 6834 */
- "\xe3\x81\x9f\xe3\x82\x99\0" /* offset 6841 */
- "\xe3\x81\xa1\xe3\x82\x99\0" /* offset 6848 */
- "\xe3\x81\xa4\xe3\x82\x99\0" /* offset 6855 */
- "\xe3\x81\xa6\xe3\x82\x99\0" /* offset 6862 */
- "\xe3\x81\xa8\xe3\x82\x99\0" /* offset 6869 */
- "\xe3\x81\xaf\xe3\x82\x99\0" /* offset 6876 */
- "\xe3\x81\xaf\xe3\x82\x9a\0" /* offset 6883 */
- "\xe3\x81\xb2\xe3\x82\x99\0" /* offset 6890 */
- "\xe3\x81\xb2\xe3\x82\x9a\0" /* offset 6897 */
- "\xe3\x81\xb5\xe3\x82\x99\0" /* offset 6904 */
- "\xe3\x81\xb5\xe3\x82\x9a\0" /* offset 6911 */
- "\xe3\x81\xb8\xe3\x82\x99\0" /* offset 6918 */
- "\xe3\x81\xb8\xe3\x82\x9a\0" /* offset 6925 */
- "\xe3\x81\xbb\xe3\x82\x99\0" /* offset 6932 */
- "\xe3\x81\xbb\xe3\x82\x9a\0" /* offset 6939 */
- "\xe3\x81\x86\xe3\x82\x99\0" /* offset 6946 */
- "\x20\xe3\x82\x99\0" /* offset 6953 */
- "\x20\xe3\x82\x9a\0" /* offset 6958 */
- "\xe3\x82\x9d\xe3\x82\x99\0" /* offset 6963 */
- "\xe3\x82\x88\xe3\x82\x8a\0" /* offset 6970 */
- "\xe3\x82\xab\xe3\x82\x99\0" /* offset 6977 */
- "\xe3\x82\xad\xe3\x82\x99\0" /* offset 6984 */
- "\xe3\x82\xaf\xe3\x82\x99\0" /* offset 6991 */
- "\xe3\x82\xb1\xe3\x82\x99\0" /* offset 6998 */
- "\xe3\x82\xb3\xe3\x82\x99\0" /* offset 7005 */
- "\xe3\x82\xb5\xe3\x82\x99\0" /* offset 7012 */
- "\xe3\x82\xb7\xe3\x82\x99\0" /* offset 7019 */
- "\xe3\x82\xb9\xe3\x82\x99\0" /* offset 7026 */
- "\xe3\x82\xbb\xe3\x82\x99\0" /* offset 7033 */
- "\xe3\x82\xbd\xe3\x82\x99\0" /* offset 7040 */
- "\xe3\x82\xbf\xe3\x82\x99\0" /* offset 7047 */
- "\xe3\x83\x81\xe3\x82\x99\0" /* offset 7054 */
- "\xe3\x83\x84\xe3\x82\x99\0" /* offset 7061 */
- "\xe3\x83\x86\xe3\x82\x99\0" /* offset 7068 */
- "\xe3\x83\x88\xe3\x82\x99\0" /* offset 7075 */
- "\xe3\x83\x8f\xe3\x82\x99\0" /* offset 7082 */
- "\xe3\x83\x8f\xe3\x82\x9a\0" /* offset 7089 */
- "\xe3\x83\x92\xe3\x82\x99\0" /* offset 7096 */
- "\xe3\x83\x92\xe3\x82\x9a\0" /* offset 7103 */
- "\xe3\x83\x95\xe3\x82\x99\0" /* offset 7110 */
- "\xe3\x83\x95\xe3\x82\x9a\0" /* offset 7117 */
- "\xe3\x83\x98\xe3\x82\x99\0" /* offset 7124 */
- "\xe3\x83\x98\xe3\x82\x9a\0" /* offset 7131 */
- "\xe3\x83\x9b\xe3\x82\x99\0" /* offset 7138 */
- "\xe3\x83\x9b\xe3\x82\x9a\0" /* offset 7145 */
- "\xe3\x82\xa6\xe3\x82\x99\0" /* offset 7152 */
- "\xe3\x83\xaf\xe3\x82\x99\0" /* offset 7159 */
- "\xe3\x83\xb0\xe3\x82\x99\0" /* offset 7166 */
- "\xe3\x83\xb1\xe3\x82\x99\0" /* offset 7173 */
- "\xe3\x83\xb2\xe3\x82\x99\0" /* offset 7180 */
- "\xe3\x83\xbd\xe3\x82\x99\0" /* offset 7187 */
- "\xe3\x82\xb3\xe3\x83\x88\0" /* offset 7194 */
- "\xe1\x84\x80\0" /* offset 7201 */
- "\xe1\x84\x81\0" /* offset 7205 */
- "\xe1\x86\xaa\0" /* offset 7209 */
- "\xe1\x84\x82\0" /* offset 7213 */
- "\xe1\x86\xac\0" /* offset 7217 */
- "\xe1\x86\xad\0" /* offset 7221 */
- "\xe1\x84\x83\0" /* offset 7225 */
- "\xe1\x84\x84\0" /* offset 7229 */
- "\xe1\x84\x85\0" /* offset 7233 */
- "\xe1\x86\xb0\0" /* offset 7237 */
- "\xe1\x86\xb1\0" /* offset 7241 */
- "\xe1\x86\xb2\0" /* offset 7245 */
- "\xe1\x86\xb3\0" /* offset 7249 */
- "\xe1\x86\xb4\0" /* offset 7253 */
- "\xe1\x86\xb5\0" /* offset 7257 */
- "\xe1\x84\x9a\0" /* offset 7261 */
- "\xe1\x84\x86\0" /* offset 7265 */
- "\xe1\x84\x87\0" /* offset 7269 */
- "\xe1\x84\x88\0" /* offset 7273 */
- "\xe1\x84\xa1\0" /* offset 7277 */
- "\xe1\x84\x89\0" /* offset 7281 */
- "\xe1\x84\x8a\0" /* offset 7285 */
- "\xe1\x84\x8b\0" /* offset 7289 */
- "\xe1\x84\x8c\0" /* offset 7293 */
- "\xe1\x84\x8d\0" /* offset 7297 */
- "\xe1\x84\x8e\0" /* offset 7301 */
- "\xe1\x84\x8f\0" /* offset 7305 */
- "\xe1\x84\x90\0" /* offset 7309 */
- "\xe1\x84\x91\0" /* offset 7313 */
- "\xe1\x84\x92\0" /* offset 7317 */
- "\xe1\x85\xa1\0" /* offset 7321 */
- "\xe1\x85\xa2\0" /* offset 7325 */
- "\xe1\x85\xa3\0" /* offset 7329 */
- "\xe1\x85\xa4\0" /* offset 7333 */
- "\xe1\x85\xa5\0" /* offset 7337 */
- "\xe1\x85\xa6\0" /* offset 7341 */
- "\xe1\x85\xa7\0" /* offset 7345 */
- "\xe1\x85\xa8\0" /* offset 7349 */
- "\xe1\x85\xa9\0" /* offset 7353 */
- "\xe1\x85\xaa\0" /* offset 7357 */
- "\xe1\x85\xab\0" /* offset 7361 */
- "\xe1\x85\xac\0" /* offset 7365 */
- "\xe1\x85\xad\0" /* offset 7369 */
- "\xe1\x85\xae\0" /* offset 7373 */
- "\xe1\x85\xaf\0" /* offset 7377 */
- "\xe1\x85\xb0\0" /* offset 7381 */
- "\xe1\x85\xb1\0" /* offset 7385 */
- "\xe1\x85\xb2\0" /* offset 7389 */
- "\xe1\x85\xb3\0" /* offset 7393 */
- "\xe1\x85\xb4\0" /* offset 7397 */
- "\xe1\x85\xb5\0" /* offset 7401 */
- "\xe1\x85\xa0\0" /* offset 7405 */
- "\xe1\x84\x94\0" /* offset 7409 */
- "\xe1\x84\x95\0" /* offset 7413 */
- "\xe1\x87\x87\0" /* offset 7417 */
- "\xe1\x87\x88\0" /* offset 7421 */
- "\xe1\x87\x8c\0" /* offset 7425 */
- "\xe1\x87\x8e\0" /* offset 7429 */
- "\xe1\x87\x93\0" /* offset 7433 */
- "\xe1\x87\x97\0" /* offset 7437 */
- "\xe1\x87\x99\0" /* offset 7441 */
- "\xe1\x84\x9c\0" /* offset 7445 */
- "\xe1\x87\x9d\0" /* offset 7449 */
- "\xe1\x87\x9f\0" /* offset 7453 */
- "\xe1\x84\x9d\0" /* offset 7457 */
- "\xe1\x84\x9e\0" /* offset 7461 */
- "\xe1\x84\xa0\0" /* offset 7465 */
- "\xe1\x84\xa2\0" /* offset 7469 */
- "\xe1\x84\xa3\0" /* offset 7473 */
- "\xe1\x84\xa7\0" /* offset 7477 */
- "\xe1\x84\xa9\0" /* offset 7481 */
- "\xe1\x84\xab\0" /* offset 7485 */
- "\xe1\x84\xac\0" /* offset 7489 */
- "\xe1\x84\xad\0" /* offset 7493 */
- "\xe1\x84\xae\0" /* offset 7497 */
- "\xe1\x84\xaf\0" /* offset 7501 */
- "\xe1\x84\xb2\0" /* offset 7505 */
- "\xe1\x84\xb6\0" /* offset 7509 */
- "\xe1\x85\x80\0" /* offset 7513 */
- "\xe1\x85\x87\0" /* offset 7517 */
- "\xe1\x85\x8c\0" /* offset 7521 */
- "\xe1\x87\xb1\0" /* offset 7525 */
- "\xe1\x87\xb2\0" /* offset 7529 */
- "\xe1\x85\x97\0" /* offset 7533 */
- "\xe1\x85\x98\0" /* offset 7537 */
- "\xe1\x85\x99\0" /* offset 7541 */
- "\xe1\x86\x84\0" /* offset 7545 */
- "\xe1\x86\x85\0" /* offset 7549 */
- "\xe1\x86\x88\0" /* offset 7553 */
- "\xe1\x86\x91\0" /* offset 7557 */
- "\xe1\x86\x92\0" /* offset 7561 */
- "\xe1\x86\x94\0" /* offset 7565 */
- "\xe1\x86\x9e\0" /* offset 7569 */
- "\xe1\x86\xa1\0" /* offset 7573 */
- "\xe4\xb8\x89\0" /* offset 7577 */
- "\xe5\x9b\x9b\0" /* offset 7581 */
- "\xe4\xb8\x8a\0" /* offset 7585 */
- "\xe4\xb8\xad\0" /* offset 7589 */
- "\xe4\xb8\x8b\0" /* offset 7593 */
- "\xe7\x94\xb2\0" /* offset 7597 */
- "\xe4\xb8\x99\0" /* offset 7601 */
- "\xe4\xb8\x81\0" /* offset 7605 */
- "\xe5\xa4\xa9\0" /* offset 7609 */
- "\xe5\x9c\xb0\0" /* offset 7613 */
- "\x28\xe1\x84\x80\x29\0" /* offset 7617 */
- "\x28\xe1\x84\x82\x29\0" /* offset 7623 */
- "\x28\xe1\x84\x83\x29\0" /* offset 7629 */
- "\x28\xe1\x84\x85\x29\0" /* offset 7635 */
- "\x28\xe1\x84\x86\x29\0" /* offset 7641 */
- "\x28\xe1\x84\x87\x29\0" /* offset 7647 */
- "\x28\xe1\x84\x89\x29\0" /* offset 7653 */
- "\x28\xe1\x84\x8b\x29\0" /* offset 7659 */
- "\x28\xe1\x84\x8c\x29\0" /* offset 7665 */
- "\x28\xe1\x84\x8e\x29\0" /* offset 7671 */
- "\x28\xe1\x84\x8f\x29\0" /* offset 7677 */
- "\x28\xe1\x84\x90\x29\0" /* offset 7683 */
- "\x28\xe1\x84\x91\x29\0" /* offset 7689 */
- "\x28\xe1\x84\x92\x29\0" /* offset 7695 */
- "\x28\xe1\x84\x80\xe1\x85\xa1\x29\0" /* offset 7701 */
- "\x28\xe1\x84\x82\xe1\x85\xa1\x29\0" /* offset 7710 */
- "\x28\xe1\x84\x83\xe1\x85\xa1\x29\0" /* offset 7719 */
- "\x28\xe1\x84\x85\xe1\x85\xa1\x29\0" /* offset 7728 */
- "\x28\xe1\x84\x86\xe1\x85\xa1\x29\0" /* offset 7737 */
- "\x28\xe1\x84\x87\xe1\x85\xa1\x29\0" /* offset 7746 */
- "\x28\xe1\x84\x89\xe1\x85\xa1\x29\0" /* offset 7755 */
- "\x28\xe1\x84\x8b\xe1\x85\xa1\x29\0" /* offset 7764 */
- "\x28\xe1\x84\x8c\xe1\x85\xa1\x29\0" /* offset 7773 */
- "\x28\xe1\x84\x8e\xe1\x85\xa1\x29\0" /* offset 7782 */
- "\x28\xe1\x84\x8f\xe1\x85\xa1\x29\0" /* offset 7791 */
- "\x28\xe1\x84\x90\xe1\x85\xa1\x29\0" /* offset 7800 */
- "\x28\xe1\x84\x91\xe1\x85\xa1\x29\0" /* offset 7809 */
- "\x28\xe1\x84\x92\xe1\x85\xa1\x29\0" /* offset 7818 */
- "\x28\xe1\x84\x8c\xe1\x85\xae\x29\0" /* offset 7827 */
- "\x28\xe4\xb8\x80\x29\0" /* offset 7836 */
- "\x28\xe4\xba\x8c\x29\0" /* offset 7842 */
- "\x28\xe4\xb8\x89\x29\0" /* offset 7848 */
- "\x28\xe5\x9b\x9b\x29\0" /* offset 7854 */
- "\x28\xe4\xba\x94\x29\0" /* offset 7860 */
- "\x28\xe5\x85\xad\x29\0" /* offset 7866 */
- "\x28\xe4\xb8\x83\x29\0" /* offset 7872 */
- "\x28\xe5\x85\xab\x29\0" /* offset 7878 */
- "\x28\xe4\xb9\x9d\x29\0" /* offset 7884 */
- "\x28\xe5\x8d\x81\x29\0" /* offset 7890 */
- "\x28\xe6\x9c\x88\x29\0" /* offset 7896 */
- "\x28\xe7\x81\xab\x29\0" /* offset 7902 */
- "\x28\xe6\xb0\xb4\x29\0" /* offset 7908 */
- "\x28\xe6\x9c\xa8\x29\0" /* offset 7914 */
- "\x28\xe9\x87\x91\x29\0" /* offset 7920 */
- "\x28\xe5\x9c\x9f\x29\0" /* offset 7926 */
- "\x28\xe6\x97\xa5\x29\0" /* offset 7932 */
- "\x28\xe6\xa0\xaa\x29\0" /* offset 7938 */
- "\x28\xe6\x9c\x89\x29\0" /* offset 7944 */
- "\x28\xe7\xa4\xbe\x29\0" /* offset 7950 */
- "\x28\xe5\x90\x8d\x29\0" /* offset 7956 */
- "\x28\xe7\x89\xb9\x29\0" /* offset 7962 */
- "\x28\xe8\xb2\xa1\x29\0" /* offset 7968 */
- "\x28\xe7\xa5\x9d\x29\0" /* offset 7974 */
- "\x28\xe5\x8a\xb4\x29\0" /* offset 7980 */
- "\x28\xe4\xbb\xa3\x29\0" /* offset 7986 */
- "\x28\xe5\x91\xbc\x29\0" /* offset 7992 */
- "\x28\xe5\xad\xa6\x29\0" /* offset 7998 */
- "\x28\xe7\x9b\xa3\x29\0" /* offset 8004 */
- "\x28\xe4\xbc\x81\x29\0" /* offset 8010 */
- "\x28\xe8\xb3\x87\x29\0" /* offset 8016 */
- "\x28\xe5\x8d\x94\x29\0" /* offset 8022 */
- "\x28\xe7\xa5\xad\x29\0" /* offset 8028 */
- "\x28\xe4\xbc\x91\x29\0" /* offset 8034 */
- "\x28\xe8\x87\xaa\x29\0" /* offset 8040 */
- "\x28\xe8\x87\xb3\x29\0" /* offset 8046 */
- "\x32\x31\0" /* offset 8052 */
- "\x32\x32\0" /* offset 8055 */
- "\x32\x33\0" /* offset 8058 */
- "\x32\x34\0" /* offset 8061 */
- "\x32\x35\0" /* offset 8064 */
- "\x32\x36\0" /* offset 8067 */
- "\x32\x37\0" /* offset 8070 */
- "\x32\x38\0" /* offset 8073 */
- "\x32\x39\0" /* offset 8076 */
- "\x33\x30\0" /* offset 8079 */
- "\x33\x31\0" /* offset 8082 */
- "\x33\x32\0" /* offset 8085 */
- "\x33\x33\0" /* offset 8088 */
- "\x33\x34\0" /* offset 8091 */
- "\x33\x35\0" /* offset 8094 */
- "\xe1\x84\x80\xe1\x85\xa1\0" /* offset 8097 */
- "\xe1\x84\x82\xe1\x85\xa1\0" /* offset 8104 */
- "\xe1\x84\x83\xe1\x85\xa1\0" /* offset 8111 */
- "\xe1\x84\x85\xe1\x85\xa1\0" /* offset 8118 */
- "\xe1\x84\x86\xe1\x85\xa1\0" /* offset 8125 */
- "\xe1\x84\x87\xe1\x85\xa1\0" /* offset 8132 */
- "\xe1\x84\x89\xe1\x85\xa1\0" /* offset 8139 */
- "\xe1\x84\x8b\xe1\x85\xa1\0" /* offset 8146 */
- "\xe1\x84\x8c\xe1\x85\xa1\0" /* offset 8153 */
- "\xe1\x84\x8e\xe1\x85\xa1\0" /* offset 8160 */
- "\xe1\x84\x8f\xe1\x85\xa1\0" /* offset 8167 */
- "\xe1\x84\x90\xe1\x85\xa1\0" /* offset 8174 */
- "\xe1\x84\x91\xe1\x85\xa1\0" /* offset 8181 */
- "\xe1\x84\x92\xe1\x85\xa1\0" /* offset 8188 */
- "\xe4\xba\x94\0" /* offset 8195 */
- "\xe5\x85\xad\0" /* offset 8199 */
- "\xe4\xb8\x83\0" /* offset 8203 */
- "\xe4\xb9\x9d\0" /* offset 8207 */
- "\xe6\xa0\xaa\0" /* offset 8211 */
- "\xe6\x9c\x89\0" /* offset 8215 */
- "\xe7\xa4\xbe\0" /* offset 8219 */
- "\xe5\x90\x8d\0" /* offset 8223 */
- "\xe7\x89\xb9\0" /* offset 8227 */
- "\xe8\xb2\xa1\0" /* offset 8231 */
- "\xe7\xa5\x9d\0" /* offset 8235 */
- "\xe5\x8a\xb4\0" /* offset 8239 */
- "\xe7\xa7\x98\0" /* offset 8243 */
- "\xe7\x94\xb7\0" /* offset 8247 */
- "\xe9\x81\xa9\0" /* offset 8251 */
- "\xe5\x84\xaa\0" /* offset 8255 */
- "\xe5\x8d\xb0\0" /* offset 8259 */
- "\xe6\xb3\xa8\0" /* offset 8263 */
- "\xe9\xa0\x85\0" /* offset 8267 */
- "\xe4\xbc\x91\0" /* offset 8271 */
- "\xe5\x86\x99\0" /* offset 8275 */
- "\xe6\xad\xa3\0" /* offset 8279 */
- "\xe5\xb7\xa6\0" /* offset 8283 */
- "\xe5\x8f\xb3\0" /* offset 8287 */
- "\xe5\x8c\xbb\0" /* offset 8291 */
- "\xe5\xae\x97\0" /* offset 8295 */
- "\xe5\xad\xa6\0" /* offset 8299 */
- "\xe7\x9b\xa3\0" /* offset 8303 */
- "\xe4\xbc\x81\0" /* offset 8307 */
- "\xe8\xb3\x87\0" /* offset 8311 */
- "\xe5\x8d\x94\0" /* offset 8315 */
- "\xe5\xa4\x9c\0" /* offset 8319 */
- "\x33\x36\0" /* offset 8323 */
- "\x33\x37\0" /* offset 8326 */
- "\x33\x38\0" /* offset 8329 */
- "\x33\x39\0" /* offset 8332 */
- "\x34\x30\0" /* offset 8335 */
- "\x34\x31\0" /* offset 8338 */
- "\x34\x32\0" /* offset 8341 */
- "\x34\x33\0" /* offset 8344 */
- "\x34\x34\0" /* offset 8347 */
- "\x34\x35\0" /* offset 8350 */
- "\x34\x36\0" /* offset 8353 */
- "\x34\x37\0" /* offset 8356 */
- "\x34\x38\0" /* offset 8359 */
- "\x34\x39\0" /* offset 8362 */
- "\x35\x30\0" /* offset 8365 */
- "\x31\xe6\x9c\x88\0" /* offset 8368 */
- "\x32\xe6\x9c\x88\0" /* offset 8373 */
- "\x33\xe6\x9c\x88\0" /* offset 8378 */
- "\x34\xe6\x9c\x88\0" /* offset 8383 */
- "\x35\xe6\x9c\x88\0" /* offset 8388 */
- "\x36\xe6\x9c\x88\0" /* offset 8393 */
- "\x37\xe6\x9c\x88\0" /* offset 8398 */
- "\x38\xe6\x9c\x88\0" /* offset 8403 */
- "\x39\xe6\x9c\x88\0" /* offset 8408 */
- "\x31\x30\xe6\x9c\x88\0" /* offset 8413 */
- "\x31\x31\xe6\x9c\x88\0" /* offset 8419 */
- "\x31\x32\xe6\x9c\x88\0" /* offset 8425 */
- "\xe3\x82\xa2\0" /* offset 8431 */
- "\xe3\x82\xa4\0" /* offset 8435 */
- "\xe3\x82\xa6\0" /* offset 8439 */
- "\xe3\x82\xa8\0" /* offset 8443 */
- "\xe3\x82\xaa\0" /* offset 8447 */
- "\xe3\x82\xab\0" /* offset 8451 */
- "\xe3\x82\xad\0" /* offset 8455 */
- "\xe3\x82\xaf\0" /* offset 8459 */
- "\xe3\x82\xb1\0" /* offset 8463 */
- "\xe3\x82\xb3\0" /* offset 8467 */
- "\xe3\x82\xb5\0" /* offset 8471 */
- "\xe3\x82\xb7\0" /* offset 8475 */
- "\xe3\x82\xb9\0" /* offset 8479 */
- "\xe3\x82\xbb\0" /* offset 8483 */
- "\xe3\x82\xbd\0" /* offset 8487 */
- "\xe3\x82\xbf\0" /* offset 8491 */
- "\xe3\x83\x81\0" /* offset 8495 */
- "\xe3\x83\x84\0" /* offset 8499 */
- "\xe3\x83\x86\0" /* offset 8503 */
- "\xe3\x83\x88\0" /* offset 8507 */
- "\xe3\x83\x8a\0" /* offset 8511 */
- "\xe3\x83\x8b\0" /* offset 8515 */
- "\xe3\x83\x8c\0" /* offset 8519 */
- "\xe3\x83\x8d\0" /* offset 8523 */
- "\xe3\x83\x8e\0" /* offset 8527 */
- "\xe3\x83\x8f\0" /* offset 8531 */
- "\xe3\x83\x92\0" /* offset 8535 */
- "\xe3\x83\x95\0" /* offset 8539 */
- "\xe3\x83\x98\0" /* offset 8543 */
- "\xe3\x83\x9b\0" /* offset 8547 */
- "\xe3\x83\x9e\0" /* offset 8551 */
- "\xe3\x83\x9f\0" /* offset 8555 */
- "\xe3\x83\xa0\0" /* offset 8559 */
- "\xe3\x83\xa1\0" /* offset 8563 */
- "\xe3\x83\xa2\0" /* offset 8567 */
- "\xe3\x83\xa4\0" /* offset 8571 */
- "\xe3\x83\xa6\0" /* offset 8575 */
- "\xe3\x83\xa8\0" /* offset 8579 */
- "\xe3\x83\xa9\0" /* offset 8583 */
- "\xe3\x83\xaa\0" /* offset 8587 */
- "\xe3\x83\xab\0" /* offset 8591 */
- "\xe3\x83\xac\0" /* offset 8595 */
- "\xe3\x83\xad\0" /* offset 8599 */
- "\xe3\x83\xaf\0" /* offset 8603 */
- "\xe3\x83\xb0\0" /* offset 8607 */
- "\xe3\x83\xb1\0" /* offset 8611 */
- "\xe3\x83\xb2\0" /* offset 8615 */
- "\xe3\x82\xa2\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x83\x88\0" /* offset 8619 */
- "\xe3\x82\xa2\xe3\x83\xab\xe3\x83\x95\xe3\x82\xa1\0" /* offset 8635 */
- "\xe3\x82\xa2\xe3\x83\xb3\xe3\x83\x98\xe3\x82\x9a\xe3\x82\xa2\0" /* offset 8648 */
- "\xe3\x82\xa2\xe3\x83\xbc\xe3\x83\xab\0" /* offset 8664 */
- "\xe3\x82\xa4\xe3\x83\x8b\xe3\x83\xb3\xe3\x82\xaf\xe3\x82\x99\0" /* offset 8674 */
- "\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x81\0" /* offset 8690 */
- "\xe3\x82\xa6\xe3\x82\xa9\xe3\x83\xb3\0" /* offset 8700 */
- "\xe3\x82\xa8\xe3\x82\xb9\xe3\x82\xaf\xe3\x83\xbc\xe3\x83\x88\xe3\x82\x99\0" /* offset 8710 */
- "\xe3\x82\xa8\xe3\x83\xbc\xe3\x82\xab\xe3\x83\xbc\0" /* offset 8729 */
- "\xe3\x82\xaa\xe3\x83\xb3\xe3\x82\xb9\0" /* offset 8742 */
- "\xe3\x82\xaa\xe3\x83\xbc\xe3\x83\xa0\0" /* offset 8752 */
- "\xe3\x82\xab\xe3\x82\xa4\xe3\x83\xaa\0" /* offset 8762 */
- "\xe3\x82\xab\xe3\x83\xa9\xe3\x83\x83\xe3\x83\x88\0" /* offset 8772 */
- "\xe3\x82\xab\xe3\x83\xad\xe3\x83\xaa\xe3\x83\xbc\0" /* offset 8785 */
- "\xe3\x82\xab\xe3\x82\x99\xe3\x83\xad\xe3\x83\xb3\0" /* offset 8798 */
- "\xe3\x82\xab\xe3\x82\x99\xe3\x83\xb3\xe3\x83\x9e\0" /* offset 8811 */
- "\xe3\x82\xad\xe3\x82\x99\xe3\x82\xab\xe3\x82\x99\0" /* offset 8824 */
- "\xe3\x82\xad\xe3\x82\x99\xe3\x83\x8b\xe3\x83\xbc\0" /* offset 8837 */
- "\xe3\x82\xad\xe3\x83\xa5\xe3\x83\xaa\xe3\x83\xbc\0" /* offset 8850 */
- "\xe3\x82\xad\xe3\x82\x99\xe3\x83\xab\xe3\x82\xbf\xe3\x82\x99\xe3\x83\xbc\0" /* offset 8863 */
- "\xe3\x82\xad\xe3\x83\xad\0" /* offset 8882 */
- "\xe3\x82\xad\xe3\x83\xad\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\0" /* offset 8889 */
- "\xe3\x82\xad\xe3\x83\xad\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xab\0" /* offset 8908 */
- "\xe3\x82\xad\xe3\x83\xad\xe3\x83\xaf\xe3\x83\x83\xe3\x83\x88\0" /* offset 8927 */
- "\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\0" /* offset 8943 */
- "\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\xe3\x83\x88\xe3\x83\xb3\0" /* offset 8956 */
- "\xe3\x82\xaf\xe3\x83\xab\xe3\x82\xbb\xe3\x82\x99\xe3\x82\xa4\xe3\x83\xad\0" /* offset 8975 */
- "\xe3\x82\xaf\xe3\x83\xad\xe3\x83\xbc\xe3\x83\x8d\0" /* offset 8994 */
- "\xe3\x82\xb1\xe3\x83\xbc\xe3\x82\xb9\0" /* offset 9007 */
- "\xe3\x82\xb3\xe3\x83\xab\xe3\x83\x8a\0" /* offset 9017 */
- "\xe3\x82\xb3\xe3\x83\xbc\xe3\x83\x9b\xe3\x82\x9a\0" /* offset 9027 */
- "\xe3\x82\xb5\xe3\x82\xa4\xe3\x82\xaf\xe3\x83\xab\0" /* offset 9040 */
- "\xe3\x82\xb5\xe3\x83\xb3\xe3\x83\x81\xe3\x83\xbc\xe3\x83\xa0\0" /* offset 9053 */
- "\xe3\x82\xb7\xe3\x83\xaa\xe3\x83\xb3\xe3\x82\xaf\xe3\x82\x99\0" /* offset 9069 */
- "\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x81\0" /* offset 9085 */
- "\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9095 */
- "\xe3\x82\xbf\xe3\x82\x99\xe3\x83\xbc\xe3\x82\xb9\0" /* offset 9105 */
- "\xe3\x83\x86\xe3\x82\x99\xe3\x82\xb7\0" /* offset 9118 */
- "\xe3\x83\x88\xe3\x82\x99\xe3\x83\xab\0" /* offset 9128 */
- "\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9138 */
- "\xe3\x83\x8a\xe3\x83\x8e\0" /* offset 9145 */
- "\xe3\x83\x8e\xe3\x83\x83\xe3\x83\x88\0" /* offset 9152 */
- "\xe3\x83\x8f\xe3\x82\xa4\xe3\x83\x84\0" /* offset 9162 */
- "\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9172 */
- "\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x83\x84\0" /* offset 9191 */
- "\xe3\x83\x8f\xe3\x82\x99\xe3\x83\xbc\xe3\x83\xac\xe3\x83\xab\0" /* offset 9204 */
- "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xa2\xe3\x82\xb9\xe3\x83\x88\xe3\x83\xab\0" /* offset 9220 */
- "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xaf\xe3\x83\xab\0" /* offset 9239 */
- "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xb3\0" /* offset 9252 */
- "\xe3\x83\x92\xe3\x82\x99\xe3\x83\xab\0" /* offset 9262 */
- "\xe3\x83\x95\xe3\x82\xa1\xe3\x83\xa9\xe3\x83\x83\xe3\x83\x88\xe3\x82\x99\0" /* offset 9272 */
- "\xe3\x83\x95\xe3\x82\xa3\xe3\x83\xbc\xe3\x83\x88\0" /* offset 9291 */
- "\xe3\x83\x95\xe3\x82\x99\xe3\x83\x83\xe3\x82\xb7\xe3\x82\xa7\xe3\x83\xab\0" /* offset 9304 */
- "\xe3\x83\x95\xe3\x83\xa9\xe3\x83\xb3\0" /* offset 9323 */
- "\xe3\x83\x98\xe3\x82\xaf\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9333 */
- "\xe3\x83\x98\xe3\x82\x9a\xe3\x82\xbd\0" /* offset 9349 */
- "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\x8b\xe3\x83\x92\0" /* offset 9359 */
- "\xe3\x83\x98\xe3\x83\xab\xe3\x83\x84\0" /* offset 9372 */
- "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\xb3\xe3\x82\xb9\0" /* offset 9382 */
- "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\xbc\xe3\x82\xb7\xe3\x82\x99\0" /* offset 9395 */
- "\xe3\x83\x98\xe3\x82\x99\xe3\x83\xbc\xe3\x82\xbf\0" /* offset 9411 */
- "\xe3\x83\x9b\xe3\x82\x9a\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9424 */
- "\xe3\x83\x9b\xe3\x82\x99\xe3\x83\xab\xe3\x83\x88\0" /* offset 9440 */
- "\xe3\x83\x9b\xe3\x83\xb3\0" /* offset 9453 */
- "\xe3\x83\x9b\xe3\x82\x9a\xe3\x83\xb3\xe3\x83\x88\xe3\x82\x99\0" /* offset 9460 */
- "\xe3\x83\x9b\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9476 */
- "\xe3\x83\x9b\xe3\x83\xbc\xe3\x83\xb3\0" /* offset 9486 */
- "\xe3\x83\x9e\xe3\x82\xa4\xe3\x82\xaf\xe3\x83\xad\0" /* offset 9496 */
- "\xe3\x83\x9e\xe3\x82\xa4\xe3\x83\xab\0" /* offset 9509 */
- "\xe3\x83\x9e\xe3\x83\x83\xe3\x83\x8f\0" /* offset 9519 */
- "\xe3\x83\x9e\xe3\x83\xab\xe3\x82\xaf\0" /* offset 9529 */
- "\xe3\x83\x9e\xe3\x83\xb3\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" /* offset 9539 */
- "\xe3\x83\x9f\xe3\x82\xaf\xe3\x83\xad\xe3\x83\xb3\0" /* offset 9555 */
- "\xe3\x83\x9f\xe3\x83\xaa\0" /* offset 9568 */
- "\xe3\x83\x9f\xe3\x83\xaa\xe3\x83\x8f\xe3\x82\x99\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9575 */
- "\xe3\x83\xa1\xe3\x82\xab\xe3\x82\x99\0" /* offset 9594 */
- "\xe3\x83\xa1\xe3\x82\xab\xe3\x82\x99\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9604 */
- "\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xab\0" /* offset 9620 */
- "\xe3\x83\xa4\xe3\x83\xbc\xe3\x83\x88\xe3\x82\x99\0" /* offset 9633 */
- "\xe3\x83\xa4\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9646 */
- "\xe3\x83\xa6\xe3\x82\xa2\xe3\x83\xb3\0" /* offset 9656 */
- "\xe3\x83\xaa\xe3\x83\x83\xe3\x83\x88\xe3\x83\xab\0" /* offset 9666 */
- "\xe3\x83\xaa\xe3\x83\xa9\0" /* offset 9679 */
- "\xe3\x83\xab\xe3\x83\x92\xe3\x82\x9a\xe3\x83\xbc\0" /* offset 9686 */
- "\xe3\x83\xab\xe3\x83\xbc\xe3\x83\x95\xe3\x82\x99\xe3\x83\xab\0" /* offset 9699 */
- "\xe3\x83\xac\xe3\x83\xa0\0" /* offset 9715 */
- "\xe3\x83\xac\xe3\x83\xb3\xe3\x83\x88\xe3\x82\xb1\xe3\x82\x99\xe3\x83\xb3\0" /* offset 9722 */
- "\xe3\x83\xaf\xe3\x83\x83\xe3\x83\x88\0" /* offset 9741 */
- "\x30\xe7\x82\xb9\0" /* offset 9751 */
- "\x31\xe7\x82\xb9\0" /* offset 9756 */
- "\x32\xe7\x82\xb9\0" /* offset 9761 */
- "\x33\xe7\x82\xb9\0" /* offset 9766 */
- "\x34\xe7\x82\xb9\0" /* offset 9771 */
- "\x35\xe7\x82\xb9\0" /* offset 9776 */
- "\x36\xe7\x82\xb9\0" /* offset 9781 */
- "\x37\xe7\x82\xb9\0" /* offset 9786 */
- "\x38\xe7\x82\xb9\0" /* offset 9791 */
- "\x39\xe7\x82\xb9\0" /* offset 9796 */
- "\x31\x30\xe7\x82\xb9\0" /* offset 9801 */
- "\x31\x31\xe7\x82\xb9\0" /* offset 9807 */
- "\x31\x32\xe7\x82\xb9\0" /* offset 9813 */
- "\x31\x33\xe7\x82\xb9\0" /* offset 9819 */
- "\x31\x34\xe7\x82\xb9\0" /* offset 9825 */
- "\x31\x35\xe7\x82\xb9\0" /* offset 9831 */
- "\x31\x36\xe7\x82\xb9\0" /* offset 9837 */
- "\x31\x37\xe7\x82\xb9\0" /* offset 9843 */
- "\x31\x38\xe7\x82\xb9\0" /* offset 9849 */
- "\x31\x39\xe7\x82\xb9\0" /* offset 9855 */
- "\x32\x30\xe7\x82\xb9\0" /* offset 9861 */
- "\x32\x31\xe7\x82\xb9\0" /* offset 9867 */
- "\x32\x32\xe7\x82\xb9\0" /* offset 9873 */
- "\x32\x33\xe7\x82\xb9\0" /* offset 9879 */
- "\x32\x34\xe7\x82\xb9\0" /* offset 9885 */
- "\x68\x50\x61\0" /* offset 9891 */
- "\x64\x61\0" /* offset 9895 */
- "\x41\x55\0" /* offset 9898 */
- "\x62\x61\x72\0" /* offset 9901 */
- "\x6f\x56\0" /* offset 9905 */
- "\x70\x63\0" /* offset 9908 */
- "\xe5\xb9\xb3\xe6\x88\x90\0" /* offset 9911 */
- "\xe6\x98\xad\xe5\x92\x8c\0" /* offset 9918 */
- "\xe5\xa4\xa7\xe6\xad\xa3\0" /* offset 9925 */
- "\xe6\x98\x8e\xe6\xb2\xbb\0" /* offset 9932 */
- "\xe6\xa0\xaa\xe5\xbc\x8f\xe4\xbc\x9a\xe7\xa4\xbe\0" /* offset 9939 */
- "\x70\x41\0" /* offset 9952 */
- "\x6e\x41\0" /* offset 9955 */
- "\xce\xbc\x41\0" /* offset 9958 */
- "\x6d\x41\0" /* offset 9962 */
- "\x6b\x41\0" /* offset 9965 */
- "\x4b\x42\0" /* offset 9968 */
- "\x4d\x42\0" /* offset 9971 */
- "\x47\x42\0" /* offset 9974 */
- "\x63\x61\x6c\0" /* offset 9977 */
- "\x6b\x63\x61\x6c\0" /* offset 9981 */
- "\x70\x46\0" /* offset 9986 */
- "\x6e\x46\0" /* offset 9989 */
- "\xce\xbc\x46\0" /* offset 9992 */
- "\xce\xbc\x67\0" /* offset 9996 */
- "\x6d\x67\0" /* offset 10000 */
- "\x6b\x67\0" /* offset 10003 */
- "\x48\x7a\0" /* offset 10006 */
- "\x6b\x48\x7a\0" /* offset 10009 */
- "\x4d\x48\x7a\0" /* offset 10013 */
- "\x47\x48\x7a\0" /* offset 10017 */
- "\x54\x48\x7a\0" /* offset 10021 */
- "\xce\xbc\x6c\0" /* offset 10025 */
- "\x6d\x6c\0" /* offset 10029 */
- "\x64\x6c\0" /* offset 10032 */
- "\x6b\x6c\0" /* offset 10035 */
- "\x66\x6d\0" /* offset 10038 */
- "\x6e\x6d\0" /* offset 10041 */
- "\xce\xbc\x6d\0" /* offset 10044 */
- "\x6d\x6d\0" /* offset 10048 */
- "\x63\x6d\0" /* offset 10051 */
- "\x6b\x6d\0" /* offset 10054 */
- "\x6d\x6d\x32\0" /* offset 10057 */
- "\x63\x6d\x32\0" /* offset 10061 */
- "\x6d\x32\0" /* offset 10065 */
- "\x6b\x6d\x32\0" /* offset 10068 */
- "\x6d\x6d\x33\0" /* offset 10072 */
- "\x63\x6d\x33\0" /* offset 10076 */
- "\x6d\x33\0" /* offset 10080 */
- "\x6b\x6d\x33\0" /* offset 10083 */
- "\x6d\xe2\x88\x95\x73\0" /* offset 10087 */
- "\x6d\xe2\x88\x95\x73\x32\0" /* offset 10093 */
- "\x50\x61\0" /* offset 10100 */
- "\x6b\x50\x61\0" /* offset 10103 */
- "\x4d\x50\x61\0" /* offset 10107 */
- "\x47\x50\x61\0" /* offset 10111 */
- "\x72\x61\x64\0" /* offset 10115 */
- "\x72\x61\x64\xe2\x88\x95\x73\0" /* offset 10119 */
- "\x72\x61\x64\xe2\x88\x95\x73\x32\0" /* offset 10127 */
- "\x70\x73\0" /* offset 10136 */
- "\x6e\x73\0" /* offset 10139 */
- "\xce\xbc\x73\0" /* offset 10142 */
- "\x6d\x73\0" /* offset 10146 */
- "\x70\x56\0" /* offset 10149 */
- "\x6e\x56\0" /* offset 10152 */
- "\xce\xbc\x56\0" /* offset 10155 */
- "\x6d\x56\0" /* offset 10159 */
- "\x6b\x56\0" /* offset 10162 */
- "\x4d\x56\0" /* offset 10165 */
- "\x70\x57\0" /* offset 10168 */
- "\x6e\x57\0" /* offset 10171 */
- "\xce\xbc\x57\0" /* offset 10174 */
- "\x6d\x57\0" /* offset 10178 */
- "\x6b\x57\0" /* offset 10181 */
- "\x4d\x57\0" /* offset 10184 */
- "\x6b\xce\xa9\0" /* offset 10187 */
- "\x4d\xce\xa9\0" /* offset 10191 */
- "\x61\x2e\x6d\x2e\0" /* offset 10195 */
- "\x42\x71\0" /* offset 10200 */
- "\x63\x63\0" /* offset 10203 */
- "\x63\x64\0" /* offset 10206 */
- "\x43\xe2\x88\x95\x6b\x67\0" /* offset 10209 */
- "\x43\x6f\x2e\0" /* offset 10216 */
- "\x64\x42\0" /* offset 10220 */
- "\x47\x79\0" /* offset 10223 */
- "\x68\x61\0" /* offset 10226 */
- "\x48\x50\0" /* offset 10229 */
- "\x69\x6e\0" /* offset 10232 */
- "\x4b\x4b\0" /* offset 10235 */
- "\x4b\x4d\0" /* offset 10238 */
- "\x6b\x74\0" /* offset 10241 */
- "\x6c\x6d\0" /* offset 10244 */
- "\x6c\x6e\0" /* offset 10247 */
- "\x6c\x6f\x67\0" /* offset 10250 */
- "\x6c\x78\0" /* offset 10254 */
- "\x6d\x62\0" /* offset 10257 */
- "\x6d\x69\x6c\0" /* offset 10260 */
- "\x6d\x6f\x6c\0" /* offset 10264 */
- "\x50\x48\0" /* offset 10268 */
- "\x70\x2e\x6d\x2e\0" /* offset 10271 */
- "\x50\x50\x4d\0" /* offset 10276 */
- "\x50\x52\0" /* offset 10280 */
- "\x73\x72\0" /* offset 10283 */
- "\x53\x76\0" /* offset 10286 */
- "\x57\x62\0" /* offset 10289 */
- "\x31\xe6\x97\xa5\0" /* offset 10292 */
- "\x32\xe6\x97\xa5\0" /* offset 10297 */
- "\x33\xe6\x97\xa5\0" /* offset 10302 */
- "\x34\xe6\x97\xa5\0" /* offset 10307 */
- "\x35\xe6\x97\xa5\0" /* offset 10312 */
- "\x36\xe6\x97\xa5\0" /* offset 10317 */
- "\x37\xe6\x97\xa5\0" /* offset 10322 */
- "\x38\xe6\x97\xa5\0" /* offset 10327 */
- "\x39\xe6\x97\xa5\0" /* offset 10332 */
- "\x31\x30\xe6\x97\xa5\0" /* offset 10337 */
- "\x31\x31\xe6\x97\xa5\0" /* offset 10343 */
- "\x31\x32\xe6\x97\xa5\0" /* offset 10349 */
- "\x31\x33\xe6\x97\xa5\0" /* offset 10355 */
- "\x31\x34\xe6\x97\xa5\0" /* offset 10361 */
- "\x31\x35\xe6\x97\xa5\0" /* offset 10367 */
- "\x31\x36\xe6\x97\xa5\0" /* offset 10373 */
- "\x31\x37\xe6\x97\xa5\0" /* offset 10379 */
- "\x31\x38\xe6\x97\xa5\0" /* offset 10385 */
- "\x31\x39\xe6\x97\xa5\0" /* offset 10391 */
- "\x32\x30\xe6\x97\xa5\0" /* offset 10397 */
- "\x32\x31\xe6\x97\xa5\0" /* offset 10403 */
- "\x32\x32\xe6\x97\xa5\0" /* offset 10409 */
- "\x32\x33\xe6\x97\xa5\0" /* offset 10415 */
- "\x32\x34\xe6\x97\xa5\0" /* offset 10421 */
- "\x32\x35\xe6\x97\xa5\0" /* offset 10427 */
- "\x32\x36\xe6\x97\xa5\0" /* offset 10433 */
- "\x32\x37\xe6\x97\xa5\0" /* offset 10439 */
- "\x32\x38\xe6\x97\xa5\0" /* offset 10445 */
- "\x32\x39\xe6\x97\xa5\0" /* offset 10451 */
- "\x33\x30\xe6\x97\xa5\0" /* offset 10457 */
- "\x33\x31\xe6\x97\xa5\0" /* offset 10463 */
- "\xe8\xb1\x88\0" /* offset 10469 */
- "\xe6\x9b\xb4\0" /* offset 10473 */
- "\xe8\xb3\x88\0" /* offset 10477 */
- "\xe6\xbb\x91\0" /* offset 10481 */
- "\xe4\xb8\xb2\0" /* offset 10485 */
- "\xe5\x8f\xa5\0" /* offset 10489 */
- "\xe5\xa5\x91\0" /* offset 10493 */
- "\xe5\x96\x87\0" /* offset 10497 */
- "\xe5\xa5\x88\0" /* offset 10501 */
- "\xe6\x87\xb6\0" /* offset 10505 */
- "\xe7\x99\xa9\0" /* offset 10509 */
- "\xe7\xbe\x85\0" /* offset 10513 */
- "\xe8\x98\xbf\0" /* offset 10517 */
- "\xe8\x9e\xba\0" /* offset 10521 */
- "\xe8\xa3\xb8\0" /* offset 10525 */
- "\xe9\x82\x8f\0" /* offset 10529 */
- "\xe6\xa8\x82\0" /* offset 10533 */
- "\xe6\xb4\x9b\0" /* offset 10537 */
- "\xe7\x83\x99\0" /* offset 10541 */
- "\xe7\x8f\x9e\0" /* offset 10545 */
- "\xe8\x90\xbd\0" /* offset 10549 */
- "\xe9\x85\xaa\0" /* offset 10553 */
- "\xe9\xa7\xb1\0" /* offset 10557 */
- "\xe4\xba\x82\0" /* offset 10561 */
- "\xe5\x8d\xb5\0" /* offset 10565 */
- "\xe6\xac\x84\0" /* offset 10569 */
- "\xe7\x88\x9b\0" /* offset 10573 */
- "\xe8\x98\xad\0" /* offset 10577 */
- "\xe9\xb8\x9e\0" /* offset 10581 */
- "\xe5\xb5\x90\0" /* offset 10585 */
- "\xe6\xbf\xab\0" /* offset 10589 */
- "\xe8\x97\x8d\0" /* offset 10593 */
- "\xe8\xa5\xa4\0" /* offset 10597 */
- "\xe6\x8b\x89\0" /* offset 10601 */
- "\xe8\x87\x98\0" /* offset 10605 */
- "\xe8\xa0\x9f\0" /* offset 10609 */
- "\xe5\xbb\x8a\0" /* offset 10613 */
- "\xe6\x9c\x97\0" /* offset 10617 */
- "\xe6\xb5\xaa\0" /* offset 10621 */
- "\xe7\x8b\xbc\0" /* offset 10625 */
- "\xe9\x83\x8e\0" /* offset 10629 */
- "\xe4\xbe\x86\0" /* offset 10633 */
- "\xe5\x86\xb7\0" /* offset 10637 */
- "\xe5\x8b\x9e\0" /* offset 10641 */
- "\xe6\x93\x84\0" /* offset 10645 */
- "\xe6\xab\x93\0" /* offset 10649 */
- "\xe7\x88\x90\0" /* offset 10653 */
- "\xe7\x9b\xa7\0" /* offset 10657 */
- "\xe8\x98\x86\0" /* offset 10661 */
- "\xe8\x99\x9c\0" /* offset 10665 */
- "\xe8\xb7\xaf\0" /* offset 10669 */
- "\xe9\x9c\xb2\0" /* offset 10673 */
- "\xe9\xad\xaf\0" /* offset 10677 */
- "\xe9\xb7\xba\0" /* offset 10681 */
- "\xe7\xa2\x8c\0" /* offset 10685 */
- "\xe7\xa5\xbf\0" /* offset 10689 */
- "\xe7\xb6\xa0\0" /* offset 10693 */
- "\xe8\x8f\x89\0" /* offset 10697 */
- "\xe9\x8c\x84\0" /* offset 10701 */
- "\xe8\xab\x96\0" /* offset 10705 */
- "\xe5\xa3\x9f\0" /* offset 10709 */
- "\xe5\xbc\x84\0" /* offset 10713 */
- "\xe7\xb1\xa0\0" /* offset 10717 */
- "\xe8\x81\xbe\0" /* offset 10721 */
- "\xe7\x89\xa2\0" /* offset 10725 */
- "\xe7\xa3\x8a\0" /* offset 10729 */
- "\xe8\xb3\x82\0" /* offset 10733 */
- "\xe9\x9b\xb7\0" /* offset 10737 */
- "\xe5\xa3\x98\0" /* offset 10741 */
- "\xe5\xb1\xa2\0" /* offset 10745 */
- "\xe6\xa8\x93\0" /* offset 10749 */
- "\xe6\xb7\x9a\0" /* offset 10753 */
- "\xe6\xbc\x8f\0" /* offset 10757 */
- "\xe7\xb4\xaf\0" /* offset 10761 */
- "\xe7\xb8\xb7\0" /* offset 10765 */
- "\xe9\x99\x8b\0" /* offset 10769 */
- "\xe5\x8b\x92\0" /* offset 10773 */
- "\xe8\x82\x8b\0" /* offset 10777 */
- "\xe5\x87\x9c\0" /* offset 10781 */
- "\xe5\x87\x8c\0" /* offset 10785 */
- "\xe7\xa8\x9c\0" /* offset 10789 */
- "\xe7\xb6\xbe\0" /* offset 10793 */
- "\xe8\x8f\xb1\0" /* offset 10797 */
- "\xe9\x99\xb5\0" /* offset 10801 */
- "\xe8\xae\x80\0" /* offset 10805 */
- "\xe6\x8b\x8f\0" /* offset 10809 */
- "\xe8\xab\xbe\0" /* offset 10813 */
- "\xe4\xb8\xb9\0" /* offset 10817 */
- "\xe5\xaf\xa7\0" /* offset 10821 */
- "\xe6\x80\x92\0" /* offset 10825 */
- "\xe7\x8e\x87\0" /* offset 10829 */
- "\xe7\x95\xb0\0" /* offset 10833 */
- "\xe5\x8c\x97\0" /* offset 10837 */
- "\xe7\xa3\xbb\0" /* offset 10841 */
- "\xe4\xbe\xbf\0" /* offset 10845 */
- "\xe5\xbe\xa9\0" /* offset 10849 */
- "\xe4\xb8\x8d\0" /* offset 10853 */
- "\xe6\xb3\x8c\0" /* offset 10857 */
- "\xe6\x95\xb8\0" /* offset 10861 */
- "\xe7\xb4\xa2\0" /* offset 10865 */
- "\xe5\x8f\x83\0" /* offset 10869 */
- "\xe5\xa1\x9e\0" /* offset 10873 */
- "\xe7\x9c\x81\0" /* offset 10877 */
- "\xe8\x91\x89\0" /* offset 10881 */
- "\xe8\xaa\xaa\0" /* offset 10885 */
- "\xe6\xae\xba\0" /* offset 10889 */
- "\xe6\xb2\x88\0" /* offset 10893 */
- "\xe6\x8b\xbe\0" /* offset 10897 */
- "\xe8\x8b\xa5\0" /* offset 10901 */
- "\xe6\x8e\xa0\0" /* offset 10905 */
- "\xe7\x95\xa5\0" /* offset 10909 */
- "\xe4\xba\xae\0" /* offset 10913 */
- "\xe5\x85\xa9\0" /* offset 10917 */
- "\xe5\x87\x89\0" /* offset 10921 */
- "\xe6\xa2\x81\0" /* offset 10925 */
- "\xe7\xb3\xa7\0" /* offset 10929 */
- "\xe8\x89\xaf\0" /* offset 10933 */
- "\xe8\xab\x92\0" /* offset 10937 */
- "\xe9\x87\x8f\0" /* offset 10941 */
- "\xe5\x8b\xb5\0" /* offset 10945 */
- "\xe5\x91\x82\0" /* offset 10949 */
- "\xe5\xbb\xac\0" /* offset 10953 */
- "\xe6\x97\x85\0" /* offset 10957 */
- "\xe6\xbf\xbe\0" /* offset 10961 */
- "\xe7\xa4\xaa\0" /* offset 10965 */
- "\xe9\x96\xad\0" /* offset 10969 */
- "\xe9\xa9\xaa\0" /* offset 10973 */
- "\xe9\xba\x97\0" /* offset 10977 */
- "\xe9\xbb\x8e\0" /* offset 10981 */
- "\xe6\x9b\x86\0" /* offset 10985 */
- "\xe6\xad\xb7\0" /* offset 10989 */
- "\xe8\xbd\xa2\0" /* offset 10993 */
- "\xe5\xb9\xb4\0" /* offset 10997 */
- "\xe6\x86\x90\0" /* offset 11001 */
- "\xe6\x88\x80\0" /* offset 11005 */
- "\xe6\x92\x9a\0" /* offset 11009 */
- "\xe6\xbc\xa3\0" /* offset 11013 */
- "\xe7\x85\x89\0" /* offset 11017 */
- "\xe7\x92\x89\0" /* offset 11021 */
- "\xe7\xa7\x8a\0" /* offset 11025 */
- "\xe7\xb7\xb4\0" /* offset 11029 */
- "\xe8\x81\xaf\0" /* offset 11033 */
- "\xe8\xbc\xa6\0" /* offset 11037 */
- "\xe8\x93\xae\0" /* offset 11041 */
- "\xe9\x80\xa3\0" /* offset 11045 */
- "\xe9\x8d\x8a\0" /* offset 11049 */
- "\xe5\x88\x97\0" /* offset 11053 */
- "\xe5\x8a\xa3\0" /* offset 11057 */
- "\xe5\x92\xbd\0" /* offset 11061 */
- "\xe7\x83\x88\0" /* offset 11065 */
- "\xe8\xa3\x82\0" /* offset 11069 */
- "\xe5\xbb\x89\0" /* offset 11073 */
- "\xe5\xbf\xb5\0" /* offset 11077 */
- "\xe6\x8d\xbb\0" /* offset 11081 */
- "\xe6\xae\xae\0" /* offset 11085 */
- "\xe7\xb0\xbe\0" /* offset 11089 */
- "\xe7\x8d\xb5\0" /* offset 11093 */
- "\xe4\xbb\xa4\0" /* offset 11097 */
- "\xe5\x9b\xb9\0" /* offset 11101 */
- "\xe5\xb6\xba\0" /* offset 11105 */
- "\xe6\x80\x9c\0" /* offset 11109 */
- "\xe7\x8e\xb2\0" /* offset 11113 */
- "\xe7\x91\xa9\0" /* offset 11117 */
- "\xe7\xbe\x9a\0" /* offset 11121 */
- "\xe8\x81\x86\0" /* offset 11125 */
- "\xe9\x88\xb4\0" /* offset 11129 */
- "\xe9\x9b\xb6\0" /* offset 11133 */
- "\xe9\x9d\x88\0" /* offset 11137 */
- "\xe9\xa0\x98\0" /* offset 11141 */
- "\xe4\xbe\x8b\0" /* offset 11145 */
- "\xe7\xa6\xae\0" /* offset 11149 */
- "\xe9\x86\xb4\0" /* offset 11153 */
- "\xe9\x9a\xb8\0" /* offset 11157 */
- "\xe6\x83\xa1\0" /* offset 11161 */
- "\xe4\xba\x86\0" /* offset 11165 */
- "\xe5\x83\x9a\0" /* offset 11169 */
- "\xe5\xaf\xae\0" /* offset 11173 */
- "\xe5\xb0\xbf\0" /* offset 11177 */
- "\xe6\x96\x99\0" /* offset 11181 */
- "\xe7\x87\x8e\0" /* offset 11185 */
- "\xe7\x99\x82\0" /* offset 11189 */
- "\xe8\x93\xbc\0" /* offset 11193 */
- "\xe9\x81\xbc\0" /* offset 11197 */
- "\xe6\x9a\x88\0" /* offset 11201 */
- "\xe9\x98\xae\0" /* offset 11205 */
- "\xe5\x8a\x89\0" /* offset 11209 */
- "\xe6\x9d\xbb\0" /* offset 11213 */
- "\xe6\x9f\xb3\0" /* offset 11217 */
- "\xe6\xb5\x81\0" /* offset 11221 */
- "\xe6\xba\x9c\0" /* offset 11225 */
- "\xe7\x90\x89\0" /* offset 11229 */
- "\xe7\x95\x99\0" /* offset 11233 */
- "\xe7\xa1\xab\0" /* offset 11237 */
- "\xe7\xb4\x90\0" /* offset 11241 */
- "\xe9\xa1\x9e\0" /* offset 11245 */
- "\xe6\x88\xae\0" /* offset 11249 */
- "\xe9\x99\xb8\0" /* offset 11253 */
- "\xe5\x80\xab\0" /* offset 11257 */
- "\xe5\xb4\x99\0" /* offset 11261 */
- "\xe6\xb7\xaa\0" /* offset 11265 */
- "\xe8\xbc\xaa\0" /* offset 11269 */
- "\xe5\xbe\x8b\0" /* offset 11273 */
- "\xe6\x85\x84\0" /* offset 11277 */
- "\xe6\xa0\x97\0" /* offset 11281 */
- "\xe9\x9a\x86\0" /* offset 11285 */
- "\xe5\x88\xa9\0" /* offset 11289 */
- "\xe5\x90\x8f\0" /* offset 11293 */
- "\xe5\xb1\xa5\0" /* offset 11297 */
- "\xe6\x98\x93\0" /* offset 11301 */
- "\xe6\x9d\x8e\0" /* offset 11305 */
- "\xe6\xa2\xa8\0" /* offset 11309 */
- "\xe6\xb3\xa5\0" /* offset 11313 */
- "\xe7\x90\x86\0" /* offset 11317 */
- "\xe7\x97\xa2\0" /* offset 11321 */
- "\xe7\xbd\xb9\0" /* offset 11325 */
- "\xe8\xa3\x8f\0" /* offset 11329 */
- "\xe8\xa3\xa1\0" /* offset 11333 */
- "\xe9\x9b\xa2\0" /* offset 11337 */
- "\xe5\x8c\xbf\0" /* offset 11341 */
- "\xe6\xba\xba\0" /* offset 11345 */
- "\xe5\x90\x9d\0" /* offset 11349 */
- "\xe7\x87\x90\0" /* offset 11353 */
- "\xe7\x92\x98\0" /* offset 11357 */
- "\xe8\x97\xba\0" /* offset 11361 */
- "\xe9\x9a\xa3\0" /* offset 11365 */
- "\xe9\xb1\x97\0" /* offset 11369 */
- "\xe9\xba\x9f\0" /* offset 11373 */
- "\xe6\x9e\x97\0" /* offset 11377 */
- "\xe6\xb7\x8b\0" /* offset 11381 */
- "\xe8\x87\xa8\0" /* offset 11385 */
- "\xe7\xac\xa0\0" /* offset 11389 */
- "\xe7\xb2\x92\0" /* offset 11393 */
- "\xe7\x8b\x80\0" /* offset 11397 */
- "\xe7\x82\x99\0" /* offset 11401 */
- "\xe8\xad\x98\0" /* offset 11405 */
- "\xe4\xbb\x80\0" /* offset 11409 */
- "\xe8\x8c\xb6\0" /* offset 11413 */
- "\xe5\x88\xba\0" /* offset 11417 */
- "\xe5\x88\x87\0" /* offset 11421 */
- "\xe5\xba\xa6\0" /* offset 11425 */
- "\xe6\x8b\x93\0" /* offset 11429 */
- "\xe7\xb3\x96\0" /* offset 11433 */
- "\xe5\xae\x85\0" /* offset 11437 */
- "\xe6\xb4\x9e\0" /* offset 11441 */
- "\xe6\x9a\xb4\0" /* offset 11445 */
- "\xe8\xbc\xbb\0" /* offset 11449 */
- "\xe9\x99\x8d\0" /* offset 11453 */
- "\xe5\xbb\x93\0" /* offset 11457 */
- "\xe5\x85\x80\0" /* offset 11461 */
- "\xe5\x97\x80\0" /* offset 11465 */
- "\xe5\xa1\x9a\0" /* offset 11469 */
- "\xe6\x99\xb4\0" /* offset 11473 */
- "\xe5\x87\x9e\0" /* offset 11477 */
- "\xe7\x8c\xaa\0" /* offset 11481 */
- "\xe7\x9b\x8a\0" /* offset 11485 */
- "\xe7\xa4\xbc\0" /* offset 11489 */
- "\xe7\xa5\x9e\0" /* offset 11493 */
- "\xe7\xa5\xa5\0" /* offset 11497 */
- "\xe7\xa6\x8f\0" /* offset 11501 */
- "\xe9\x9d\x96\0" /* offset 11505 */
- "\xe7\xb2\xbe\0" /* offset 11509 */
- "\xe8\x98\x92\0" /* offset 11513 */
- "\xe8\xab\xb8\0" /* offset 11517 */
- "\xe9\x80\xb8\0" /* offset 11521 */
- "\xe9\x83\xbd\0" /* offset 11525 */
- "\xe9\xa3\xaf\0" /* offset 11529 */
- "\xe9\xa3\xbc\0" /* offset 11533 */
- "\xe9\xa4\xa8\0" /* offset 11537 */
- "\xe9\xb6\xb4\0" /* offset 11541 */
- "\xe4\xbe\xae\0" /* offset 11545 */
- "\xe5\x83\xa7\0" /* offset 11549 */
- "\xe5\x85\x8d\0" /* offset 11553 */
- "\xe5\x8b\x89\0" /* offset 11557 */
- "\xe5\x8b\xa4\0" /* offset 11561 */
- "\xe5\x8d\x91\0" /* offset 11565 */
- "\xe5\x96\x9d\0" /* offset 11569 */
- "\xe5\x98\x86\0" /* offset 11573 */
- "\xe5\x99\xa8\0" /* offset 11577 */
- "\xe5\xa1\x80\0" /* offset 11581 */
- "\xe5\xa2\xa8\0" /* offset 11585 */
- "\xe5\xb1\xa4\0" /* offset 11589 */
- "\xe6\x82\x94\0" /* offset 11593 */
- "\xe6\x85\xa8\0" /* offset 11597 */
- "\xe6\x86\x8e\0" /* offset 11601 */
- "\xe6\x87\xb2\0" /* offset 11605 */
- "\xe6\x95\x8f\0" /* offset 11609 */
- "\xe6\x97\xa2\0" /* offset 11613 */
- "\xe6\x9a\x91\0" /* offset 11617 */
- "\xe6\xa2\x85\0" /* offset 11621 */
- "\xe6\xb5\xb7\0" /* offset 11625 */
- "\xe6\xb8\x9a\0" /* offset 11629 */
- "\xe6\xbc\xa2\0" /* offset 11633 */
- "\xe7\x85\xae\0" /* offset 11637 */
- "\xe7\x88\xab\0" /* offset 11641 */
- "\xe7\x90\xa2\0" /* offset 11645 */
- "\xe7\xa2\x91\0" /* offset 11649 */
- "\xe7\xa5\x89\0" /* offset 11653 */
- "\xe7\xa5\x88\0" /* offset 11657 */
- "\xe7\xa5\x90\0" /* offset 11661 */
- "\xe7\xa5\x96\0" /* offset 11665 */
- "\xe7\xa6\x8d\0" /* offset 11669 */
- "\xe7\xa6\x8e\0" /* offset 11673 */
- "\xe7\xa9\x80\0" /* offset 11677 */
- "\xe7\xaa\x81\0" /* offset 11681 */
- "\xe7\xaf\x80\0" /* offset 11685 */
- "\xe7\xb8\x89\0" /* offset 11689 */
- "\xe7\xb9\x81\0" /* offset 11693 */
- "\xe7\xbd\xb2\0" /* offset 11697 */
- "\xe8\x80\x85\0" /* offset 11701 */
- "\xe8\x87\xad\0" /* offset 11705 */
- "\xe8\x89\xb9\0" /* offset 11709 */
- "\xe8\x91\x97\0" /* offset 11713 */
- "\xe8\xa4\x90\0" /* offset 11717 */
- "\xe8\xa6\x96\0" /* offset 11721 */
- "\xe8\xac\x81\0" /* offset 11725 */
- "\xe8\xac\xb9\0" /* offset 11729 */
- "\xe8\xb3\x93\0" /* offset 11733 */
- "\xe8\xb4\x88\0" /* offset 11737 */
- "\xe8\xbe\xb6\0" /* offset 11741 */
- "\xe9\x9b\xa3\0" /* offset 11745 */
- "\xe9\x9f\xbf\0" /* offset 11749 */
- "\xe9\xa0\xbb\0" /* offset 11753 */
- "\x66\x66\0" /* offset 11757 */
- "\x66\x69\0" /* offset 11760 */
- "\x66\x6c\0" /* offset 11763 */
- "\x66\x66\x69\0" /* offset 11766 */
- "\x66\x66\x6c\0" /* offset 11770 */
- "\x73\x74\0" /* offset 11774 */
- "\xd5\xb4\xd5\xb6\0" /* offset 11777 */
- "\xd5\xb4\xd5\xa5\0" /* offset 11782 */
- "\xd5\xb4\xd5\xab\0" /* offset 11787 */
- "\xd5\xbe\xd5\xb6\0" /* offset 11792 */
- "\xd5\xb4\xd5\xad\0" /* offset 11797 */
- "\xd7\x99\xd6\xb4\0" /* offset 11802 */
- "\xd7\xb2\xd6\xb7\0" /* offset 11807 */
- "\xd7\xa2\0" /* offset 11812 */
- "\xd7\x94\0" /* offset 11815 */
- "\xd7\x9b\0" /* offset 11818 */
- "\xd7\x9c\0" /* offset 11821 */
- "\xd7\x9d\0" /* offset 11824 */
- "\xd7\xa8\0" /* offset 11827 */
- "\xd7\xaa\0" /* offset 11830 */
- "\xd7\xa9\xd7\x81\0" /* offset 11833 */
- "\xd7\xa9\xd7\x82\0" /* offset 11838 */
- "\xd7\xa9\xd6\xbc\xd7\x81\0" /* offset 11843 */
- "\xd7\xa9\xd6\xbc\xd7\x82\0" /* offset 11850 */
- "\xd7\x90\xd6\xb7\0" /* offset 11857 */
- "\xd7\x90\xd6\xb8\0" /* offset 11862 */
- "\xd7\x90\xd6\xbc\0" /* offset 11867 */
- "\xd7\x91\xd6\xbc\0" /* offset 11872 */
- "\xd7\x92\xd6\xbc\0" /* offset 11877 */
- "\xd7\x93\xd6\xbc\0" /* offset 11882 */
- "\xd7\x94\xd6\xbc\0" /* offset 11887 */
- "\xd7\x95\xd6\xbc\0" /* offset 11892 */
- "\xd7\x96\xd6\xbc\0" /* offset 11897 */
- "\xd7\x98\xd6\xbc\0" /* offset 11902 */
- "\xd7\x99\xd6\xbc\0" /* offset 11907 */
- "\xd7\x9a\xd6\xbc\0" /* offset 11912 */
- "\xd7\x9b\xd6\xbc\0" /* offset 11917 */
- "\xd7\x9c\xd6\xbc\0" /* offset 11922 */
- "\xd7\x9e\xd6\xbc\0" /* offset 11927 */
- "\xd7\xa0\xd6\xbc\0" /* offset 11932 */
- "\xd7\xa1\xd6\xbc\0" /* offset 11937 */
- "\xd7\xa3\xd6\xbc\0" /* offset 11942 */
- "\xd7\xa4\xd6\xbc\0" /* offset 11947 */
- "\xd7\xa6\xd6\xbc\0" /* offset 11952 */
- "\xd7\xa7\xd6\xbc\0" /* offset 11957 */
- "\xd7\xa8\xd6\xbc\0" /* offset 11962 */
- "\xd7\xa9\xd6\xbc\0" /* offset 11967 */
- "\xd7\xaa\xd6\xbc\0" /* offset 11972 */
- "\xd7\x95\xd6\xb9\0" /* offset 11977 */
- "\xd7\x91\xd6\xbf\0" /* offset 11982 */
- "\xd7\x9b\xd6\xbf\0" /* offset 11987 */
- "\xd7\xa4\xd6\xbf\0" /* offset 11992 */
- "\xd7\x90\xd7\x9c\0" /* offset 11997 */
- "\xd9\xb1\0" /* offset 12002 */
- "\xd9\xbb\0" /* offset 12005 */
- "\xd9\xbe\0" /* offset 12008 */
- "\xda\x80\0" /* offset 12011 */
- "\xd9\xba\0" /* offset 12014 */
- "\xd9\xbf\0" /* offset 12017 */
- "\xd9\xb9\0" /* offset 12020 */
- "\xda\xa4\0" /* offset 12023 */
- "\xda\xa6\0" /* offset 12026 */
- "\xda\x84\0" /* offset 12029 */
- "\xda\x83\0" /* offset 12032 */
- "\xda\x86\0" /* offset 12035 */
- "\xda\x87\0" /* offset 12038 */
- "\xda\x8d\0" /* offset 12041 */
- "\xda\x8c\0" /* offset 12044 */
- "\xda\x8e\0" /* offset 12047 */
- "\xda\x88\0" /* offset 12050 */
- "\xda\x98\0" /* offset 12053 */
- "\xda\x91\0" /* offset 12056 */
- "\xda\xa9\0" /* offset 12059 */
- "\xda\xaf\0" /* offset 12062 */
- "\xda\xb3\0" /* offset 12065 */
- "\xda\xb1\0" /* offset 12068 */
- "\xda\xba\0" /* offset 12071 */
- "\xda\xbb\0" /* offset 12074 */
- "\xdb\x81\0" /* offset 12077 */
- "\xda\xbe\0" /* offset 12080 */
- "\xdb\x92\0" /* offset 12083 */
- "\xda\xad\0" /* offset 12086 */
- "\xdb\x87\0" /* offset 12089 */
- "\xdb\x86\0" /* offset 12092 */
- "\xdb\x88\0" /* offset 12095 */
- "\xdb\x8b\0" /* offset 12098 */
- "\xdb\x85\0" /* offset 12101 */
- "\xdb\x89\0" /* offset 12104 */
- "\xdb\x90\0" /* offset 12107 */
- "\xd9\x89\0" /* offset 12110 */
- "\xd9\x8a\xd9\x94\xd8\xa7\0" /* offset 12113 */
- "\xd9\x8a\xd9\x94\xdb\x95\0" /* offset 12120 */
- "\xd9\x8a\xd9\x94\xd9\x88\0" /* offset 12127 */
- "\xd9\x8a\xd9\x94\xdb\x87\0" /* offset 12134 */
- "\xd9\x8a\xd9\x94\xdb\x86\0" /* offset 12141 */
- "\xd9\x8a\xd9\x94\xdb\x88\0" /* offset 12148 */
- "\xd9\x8a\xd9\x94\xdb\x90\0" /* offset 12155 */
- "\xd9\x8a\xd9\x94\xd9\x89\0" /* offset 12162 */
- "\xdb\x8c\0" /* offset 12169 */
- "\xd9\x8a\xd9\x94\xd8\xac\0" /* offset 12172 */
- "\xd9\x8a\xd9\x94\xd8\xad\0" /* offset 12179 */
- "\xd9\x8a\xd9\x94\xd9\x85\0" /* offset 12186 */
- "\xd9\x8a\xd9\x94\xd9\x8a\0" /* offset 12193 */
- "\xd8\xa8\xd8\xac\0" /* offset 12200 */
- "\xd8\xa8\xd8\xad\0" /* offset 12205 */
- "\xd8\xa8\xd8\xae\0" /* offset 12210 */
- "\xd8\xa8\xd9\x85\0" /* offset 12215 */
- "\xd8\xa8\xd9\x89\0" /* offset 12220 */
- "\xd8\xa8\xd9\x8a\0" /* offset 12225 */
- "\xd8\xaa\xd8\xac\0" /* offset 12230 */
- "\xd8\xaa\xd8\xad\0" /* offset 12235 */
- "\xd8\xaa\xd8\xae\0" /* offset 12240 */
- "\xd8\xaa\xd9\x85\0" /* offset 12245 */
- "\xd8\xaa\xd9\x89\0" /* offset 12250 */
- "\xd8\xaa\xd9\x8a\0" /* offset 12255 */
- "\xd8\xab\xd8\xac\0" /* offset 12260 */
- "\xd8\xab\xd9\x85\0" /* offset 12265 */
- "\xd8\xab\xd9\x89\0" /* offset 12270 */
- "\xd8\xab\xd9\x8a\0" /* offset 12275 */
- "\xd8\xac\xd8\xad\0" /* offset 12280 */
- "\xd8\xac\xd9\x85\0" /* offset 12285 */
- "\xd8\xad\xd8\xac\0" /* offset 12290 */
- "\xd8\xad\xd9\x85\0" /* offset 12295 */
- "\xd8\xae\xd8\xac\0" /* offset 12300 */
- "\xd8\xae\xd8\xad\0" /* offset 12305 */
- "\xd8\xae\xd9\x85\0" /* offset 12310 */
- "\xd8\xb3\xd8\xac\0" /* offset 12315 */
- "\xd8\xb3\xd8\xad\0" /* offset 12320 */
- "\xd8\xb3\xd8\xae\0" /* offset 12325 */
- "\xd8\xb3\xd9\x85\0" /* offset 12330 */
- "\xd8\xb5\xd8\xad\0" /* offset 12335 */
- "\xd8\xb5\xd9\x85\0" /* offset 12340 */
- "\xd8\xb6\xd8\xac\0" /* offset 12345 */
- "\xd8\xb6\xd8\xad\0" /* offset 12350 */
- "\xd8\xb6\xd8\xae\0" /* offset 12355 */
- "\xd8\xb6\xd9\x85\0" /* offset 12360 */
- "\xd8\xb7\xd8\xad\0" /* offset 12365 */
- "\xd8\xb7\xd9\x85\0" /* offset 12370 */
- "\xd8\xb8\xd9\x85\0" /* offset 12375 */
- "\xd8\xb9\xd8\xac\0" /* offset 12380 */
- "\xd8\xb9\xd9\x85\0" /* offset 12385 */
- "\xd8\xba\xd8\xac\0" /* offset 12390 */
- "\xd8\xba\xd9\x85\0" /* offset 12395 */
- "\xd9\x81\xd8\xac\0" /* offset 12400 */
- "\xd9\x81\xd8\xad\0" /* offset 12405 */
- "\xd9\x81\xd8\xae\0" /* offset 12410 */
- "\xd9\x81\xd9\x85\0" /* offset 12415 */
- "\xd9\x81\xd9\x89\0" /* offset 12420 */
- "\xd9\x81\xd9\x8a\0" /* offset 12425 */
- "\xd9\x82\xd8\xad\0" /* offset 12430 */
- "\xd9\x82\xd9\x85\0" /* offset 12435 */
- "\xd9\x82\xd9\x89\0" /* offset 12440 */
- "\xd9\x82\xd9\x8a\0" /* offset 12445 */
- "\xd9\x83\xd8\xa7\0" /* offset 12450 */
- "\xd9\x83\xd8\xac\0" /* offset 12455 */
- "\xd9\x83\xd8\xad\0" /* offset 12460 */
- "\xd9\x83\xd8\xae\0" /* offset 12465 */
- "\xd9\x83\xd9\x84\0" /* offset 12470 */
- "\xd9\x83\xd9\x85\0" /* offset 12475 */
- "\xd9\x83\xd9\x89\0" /* offset 12480 */
- "\xd9\x83\xd9\x8a\0" /* offset 12485 */
- "\xd9\x84\xd8\xac\0" /* offset 12490 */
- "\xd9\x84\xd8\xad\0" /* offset 12495 */
- "\xd9\x84\xd8\xae\0" /* offset 12500 */
- "\xd9\x84\xd9\x85\0" /* offset 12505 */
- "\xd9\x84\xd9\x89\0" /* offset 12510 */
- "\xd9\x84\xd9\x8a\0" /* offset 12515 */
- "\xd9\x85\xd8\xac\0" /* offset 12520 */
- "\xd9\x85\xd8\xad\0" /* offset 12525 */
- "\xd9\x85\xd8\xae\0" /* offset 12530 */
- "\xd9\x85\xd9\x85\0" /* offset 12535 */
- "\xd9\x85\xd9\x89\0" /* offset 12540 */
- "\xd9\x85\xd9\x8a\0" /* offset 12545 */
- "\xd9\x86\xd8\xac\0" /* offset 12550 */
- "\xd9\x86\xd8\xad\0" /* offset 12555 */
- "\xd9\x86\xd8\xae\0" /* offset 12560 */
- "\xd9\x86\xd9\x85\0" /* offset 12565 */
- "\xd9\x86\xd9\x89\0" /* offset 12570 */
- "\xd9\x86\xd9\x8a\0" /* offset 12575 */
- "\xd9\x87\xd8\xac\0" /* offset 12580 */
- "\xd9\x87\xd9\x85\0" /* offset 12585 */
- "\xd9\x87\xd9\x89\0" /* offset 12590 */
- "\xd9\x87\xd9\x8a\0" /* offset 12595 */
- "\xd9\x8a\xd8\xac\0" /* offset 12600 */
- "\xd9\x8a\xd8\xad\0" /* offset 12605 */
- "\xd9\x8a\xd8\xae\0" /* offset 12610 */
- "\xd9\x8a\xd9\x85\0" /* offset 12615 */
- "\xd9\x8a\xd9\x89\0" /* offset 12620 */
- "\xd9\x8a\xd9\x8a\0" /* offset 12625 */
- "\xd8\xb0\xd9\xb0\0" /* offset 12630 */
- "\xd8\xb1\xd9\xb0\0" /* offset 12635 */
- "\xd9\x89\xd9\xb0\0" /* offset 12640 */
- "\x20\xd9\x8c\xd9\x91\0" /* offset 12645 */
- "\x20\xd9\x8d\xd9\x91\0" /* offset 12651 */
- "\x20\xd9\x8e\xd9\x91\0" /* offset 12657 */
- "\x20\xd9\x8f\xd9\x91\0" /* offset 12663 */
- "\x20\xd9\x90\xd9\x91\0" /* offset 12669 */
- "\x20\xd9\x91\xd9\xb0\0" /* offset 12675 */
- "\xd9\x8a\xd9\x94\xd8\xb1\0" /* offset 12681 */
- "\xd9\x8a\xd9\x94\xd8\xb2\0" /* offset 12688 */
- "\xd9\x8a\xd9\x94\xd9\x86\0" /* offset 12695 */
- "\xd8\xa8\xd8\xb1\0" /* offset 12702 */
- "\xd8\xa8\xd8\xb2\0" /* offset 12707 */
- "\xd8\xa8\xd9\x86\0" /* offset 12712 */
- "\xd8\xaa\xd8\xb1\0" /* offset 12717 */
- "\xd8\xaa\xd8\xb2\0" /* offset 12722 */
- "\xd8\xaa\xd9\x86\0" /* offset 12727 */
- "\xd8\xab\xd8\xb1\0" /* offset 12732 */
- "\xd8\xab\xd8\xb2\0" /* offset 12737 */
- "\xd8\xab\xd9\x86\0" /* offset 12742 */
- "\xd9\x85\xd8\xa7\0" /* offset 12747 */
- "\xd9\x86\xd8\xb1\0" /* offset 12752 */
- "\xd9\x86\xd8\xb2\0" /* offset 12757 */
- "\xd9\x86\xd9\x86\0" /* offset 12762 */
- "\xd9\x8a\xd8\xb1\0" /* offset 12767 */
- "\xd9\x8a\xd8\xb2\0" /* offset 12772 */
- "\xd9\x8a\xd9\x86\0" /* offset 12777 */
- "\xd9\x8a\xd9\x94\xd8\xae\0" /* offset 12782 */
- "\xd9\x8a\xd9\x94\xd9\x87\0" /* offset 12789 */
- "\xd8\xa8\xd9\x87\0" /* offset 12796 */
- "\xd8\xaa\xd9\x87\0" /* offset 12801 */
- "\xd8\xb5\xd8\xae\0" /* offset 12806 */
- "\xd9\x84\xd9\x87\0" /* offset 12811 */
- "\xd9\x86\xd9\x87\0" /* offset 12816 */
- "\xd9\x87\xd9\xb0\0" /* offset 12821 */
- "\xd9\x8a\xd9\x87\0" /* offset 12826 */
- "\xd8\xab\xd9\x87\0" /* offset 12831 */
- "\xd8\xb3\xd9\x87\0" /* offset 12836 */
- "\xd8\xb4\xd9\x85\0" /* offset 12841 */
- "\xd8\xb4\xd9\x87\0" /* offset 12846 */
- "\xd9\x80\xd9\x8e\xd9\x91\0" /* offset 12851 */
- "\xd9\x80\xd9\x8f\xd9\x91\0" /* offset 12858 */
- "\xd9\x80\xd9\x90\xd9\x91\0" /* offset 12865 */
- "\xd8\xb7\xd9\x89\0" /* offset 12872 */
- "\xd8\xb7\xd9\x8a\0" /* offset 12877 */
- "\xd8\xb9\xd9\x89\0" /* offset 12882 */
- "\xd8\xb9\xd9\x8a\0" /* offset 12887 */
- "\xd8\xba\xd9\x89\0" /* offset 12892 */
- "\xd8\xba\xd9\x8a\0" /* offset 12897 */
- "\xd8\xb3\xd9\x89\0" /* offset 12902 */
- "\xd8\xb3\xd9\x8a\0" /* offset 12907 */
- "\xd8\xb4\xd9\x89\0" /* offset 12912 */
- "\xd8\xb4\xd9\x8a\0" /* offset 12917 */
- "\xd8\xad\xd9\x89\0" /* offset 12922 */
- "\xd8\xad\xd9\x8a\0" /* offset 12927 */
- "\xd8\xac\xd9\x89\0" /* offset 12932 */
- "\xd8\xac\xd9\x8a\0" /* offset 12937 */
- "\xd8\xae\xd9\x89\0" /* offset 12942 */
- "\xd8\xae\xd9\x8a\0" /* offset 12947 */
- "\xd8\xb5\xd9\x89\0" /* offset 12952 */
- "\xd8\xb5\xd9\x8a\0" /* offset 12957 */
- "\xd8\xb6\xd9\x89\0" /* offset 12962 */
- "\xd8\xb6\xd9\x8a\0" /* offset 12967 */
- "\xd8\xb4\xd8\xac\0" /* offset 12972 */
- "\xd8\xb4\xd8\xad\0" /* offset 12977 */
- "\xd8\xb4\xd8\xae\0" /* offset 12982 */
- "\xd8\xb4\xd8\xb1\0" /* offset 12987 */
- "\xd8\xb3\xd8\xb1\0" /* offset 12992 */
- "\xd8\xb5\xd8\xb1\0" /* offset 12997 */
- "\xd8\xb6\xd8\xb1\0" /* offset 13002 */
- "\xd8\xa7\xd9\x8b\0" /* offset 13007 */
- "\xd8\xaa\xd8\xac\xd9\x85\0" /* offset 13012 */
- "\xd8\xaa\xd8\xad\xd8\xac\0" /* offset 13019 */
- "\xd8\xaa\xd8\xad\xd9\x85\0" /* offset 13026 */
- "\xd8\xaa\xd8\xae\xd9\x85\0" /* offset 13033 */
- "\xd8\xaa\xd9\x85\xd8\xac\0" /* offset 13040 */
- "\xd8\xaa\xd9\x85\xd8\xad\0" /* offset 13047 */
- "\xd8\xaa\xd9\x85\xd8\xae\0" /* offset 13054 */
- "\xd8\xac\xd9\x85\xd8\xad\0" /* offset 13061 */
- "\xd8\xad\xd9\x85\xd9\x8a\0" /* offset 13068 */
- "\xd8\xad\xd9\x85\xd9\x89\0" /* offset 13075 */
- "\xd8\xb3\xd8\xad\xd8\xac\0" /* offset 13082 */
- "\xd8\xb3\xd8\xac\xd8\xad\0" /* offset 13089 */
- "\xd8\xb3\xd8\xac\xd9\x89\0" /* offset 13096 */
- "\xd8\xb3\xd9\x85\xd8\xad\0" /* offset 13103 */
- "\xd8\xb3\xd9\x85\xd8\xac\0" /* offset 13110 */
- "\xd8\xb3\xd9\x85\xd9\x85\0" /* offset 13117 */
- "\xd8\xb5\xd8\xad\xd8\xad\0" /* offset 13124 */
- "\xd8\xb5\xd9\x85\xd9\x85\0" /* offset 13131 */
- "\xd8\xb4\xd8\xad\xd9\x85\0" /* offset 13138 */
- "\xd8\xb4\xd8\xac\xd9\x8a\0" /* offset 13145 */
- "\xd8\xb4\xd9\x85\xd8\xae\0" /* offset 13152 */
- "\xd8\xb4\xd9\x85\xd9\x85\0" /* offset 13159 */
- "\xd8\xb6\xd8\xad\xd9\x89\0" /* offset 13166 */
- "\xd8\xb6\xd8\xae\xd9\x85\0" /* offset 13173 */
- "\xd8\xb7\xd9\x85\xd8\xad\0" /* offset 13180 */
- "\xd8\xb7\xd9\x85\xd9\x85\0" /* offset 13187 */
- "\xd8\xb7\xd9\x85\xd9\x8a\0" /* offset 13194 */
- "\xd8\xb9\xd8\xac\xd9\x85\0" /* offset 13201 */
- "\xd8\xb9\xd9\x85\xd9\x85\0" /* offset 13208 */
- "\xd8\xb9\xd9\x85\xd9\x89\0" /* offset 13215 */
- "\xd8\xba\xd9\x85\xd9\x85\0" /* offset 13222 */
- "\xd8\xba\xd9\x85\xd9\x8a\0" /* offset 13229 */
- "\xd8\xba\xd9\x85\xd9\x89\0" /* offset 13236 */
- "\xd9\x81\xd8\xae\xd9\x85\0" /* offset 13243 */
- "\xd9\x82\xd9\x85\xd8\xad\0" /* offset 13250 */
- "\xd9\x82\xd9\x85\xd9\x85\0" /* offset 13257 */
- "\xd9\x84\xd8\xad\xd9\x85\0" /* offset 13264 */
- "\xd9\x84\xd8\xad\xd9\x8a\0" /* offset 13271 */
- "\xd9\x84\xd8\xad\xd9\x89\0" /* offset 13278 */
- "\xd9\x84\xd8\xac\xd8\xac\0" /* offset 13285 */
- "\xd9\x84\xd8\xae\xd9\x85\0" /* offset 13292 */
- "\xd9\x84\xd9\x85\xd8\xad\0" /* offset 13299 */
- "\xd9\x85\xd8\xad\xd8\xac\0" /* offset 13306 */
- "\xd9\x85\xd8\xad\xd9\x85\0" /* offset 13313 */
- "\xd9\x85\xd8\xad\xd9\x8a\0" /* offset 13320 */
- "\xd9\x85\xd8\xac\xd8\xad\0" /* offset 13327 */
- "\xd9\x85\xd8\xac\xd9\x85\0" /* offset 13334 */
- "\xd9\x85\xd8\xae\xd8\xac\0" /* offset 13341 */
- "\xd9\x85\xd8\xae\xd9\x85\0" /* offset 13348 */
- "\xd9\x85\xd8\xac\xd8\xae\0" /* offset 13355 */
- "\xd9\x87\xd9\x85\xd8\xac\0" /* offset 13362 */
- "\xd9\x87\xd9\x85\xd9\x85\0" /* offset 13369 */
- "\xd9\x86\xd8\xad\xd9\x85\0" /* offset 13376 */
- "\xd9\x86\xd8\xad\xd9\x89\0" /* offset 13383 */
- "\xd9\x86\xd8\xac\xd9\x85\0" /* offset 13390 */
- "\xd9\x86\xd8\xac\xd9\x89\0" /* offset 13397 */
- "\xd9\x86\xd9\x85\xd9\x8a\0" /* offset 13404 */
- "\xd9\x86\xd9\x85\xd9\x89\0" /* offset 13411 */
- "\xd9\x8a\xd9\x85\xd9\x85\0" /* offset 13418 */
- "\xd8\xa8\xd8\xae\xd9\x8a\0" /* offset 13425 */
- "\xd8\xaa\xd8\xac\xd9\x8a\0" /* offset 13432 */
- "\xd8\xaa\xd8\xac\xd9\x89\0" /* offset 13439 */
- "\xd8\xaa\xd8\xae\xd9\x8a\0" /* offset 13446 */
- "\xd8\xaa\xd8\xae\xd9\x89\0" /* offset 13453 */
- "\xd8\xaa\xd9\x85\xd9\x8a\0" /* offset 13460 */
- "\xd8\xaa\xd9\x85\xd9\x89\0" /* offset 13467 */
- "\xd8\xac\xd9\x85\xd9\x8a\0" /* offset 13474 */
- "\xd8\xac\xd8\xad\xd9\x89\0" /* offset 13481 */
- "\xd8\xac\xd9\x85\xd9\x89\0" /* offset 13488 */
- "\xd8\xb3\xd8\xae\xd9\x89\0" /* offset 13495 */
- "\xd8\xb5\xd8\xad\xd9\x8a\0" /* offset 13502 */
- "\xd8\xb4\xd8\xad\xd9\x8a\0" /* offset 13509 */
- "\xd8\xb6\xd8\xad\xd9\x8a\0" /* offset 13516 */
- "\xd9\x84\xd8\xac\xd9\x8a\0" /* offset 13523 */
- "\xd9\x84\xd9\x85\xd9\x8a\0" /* offset 13530 */
- "\xd9\x8a\xd8\xad\xd9\x8a\0" /* offset 13537 */
- "\xd9\x8a\xd8\xac\xd9\x8a\0" /* offset 13544 */
- "\xd9\x8a\xd9\x85\xd9\x8a\0" /* offset 13551 */
- "\xd9\x85\xd9\x85\xd9\x8a\0" /* offset 13558 */
- "\xd9\x82\xd9\x85\xd9\x8a\0" /* offset 13565 */
- "\xd9\x86\xd8\xad\xd9\x8a\0" /* offset 13572 */
- "\xd8\xb9\xd9\x85\xd9\x8a\0" /* offset 13579 */
- "\xd9\x83\xd9\x85\xd9\x8a\0" /* offset 13586 */
- "\xd9\x86\xd8\xac\xd8\xad\0" /* offset 13593 */
- "\xd9\x85\xd8\xae\xd9\x8a\0" /* offset 13600 */
- "\xd9\x84\xd8\xac\xd9\x85\0" /* offset 13607 */
- "\xd9\x83\xd9\x85\xd9\x85\0" /* offset 13614 */
- "\xd8\xac\xd8\xad\xd9\x8a\0" /* offset 13621 */
- "\xd8\xad\xd8\xac\xd9\x8a\0" /* offset 13628 */
- "\xd9\x85\xd8\xac\xd9\x8a\0" /* offset 13635 */
- "\xd9\x81\xd9\x85\xd9\x8a\0" /* offset 13642 */
- "\xd8\xa8\xd8\xad\xd9\x8a\0" /* offset 13649 */
- "\xd8\xb3\xd8\xae\xd9\x8a\0" /* offset 13656 */
- "\xd9\x86\xd8\xac\xd9\x8a\0" /* offset 13663 */
- "\xd8\xb5\xd9\x84\xdb\x92\0" /* offset 13670 */
- "\xd9\x82\xd9\x84\xdb\x92\0" /* offset 13677 */
- "\xd8\xa7\xd9\x84\xd9\x84\xd9\x87\0" /* offset 13684 */
- "\xd8\xa7\xd9\x83\xd8\xa8\xd8\xb1\0" /* offset 13693 */
- "\xd9\x85\xd8\xad\xd9\x85\xd8\xaf\0" /* offset 13702 */
- "\xd8\xb5\xd9\x84\xd8\xb9\xd9\x85\0" /* offset 13711 */
- "\xd8\xb1\xd8\xb3\xd9\x88\xd9\x84\0" /* offset 13720 */
- "\xd8\xb9\xd9\x84\xd9\x8a\xd9\x87\0" /* offset 13729 */
- "\xd9\x88\xd8\xb3\xd9\x84\xd9\x85\0" /* offset 13738 */
- "\xd8\xb5\xd9\x84\xd9\x89\0" /* offset 13747 */
- "\xd8\xb5\xd9\x84\xd9\x89\x20\xd8\xa7\xd9\x84\xd9\x84\xd9\x87\x20\xd8\xb9\xd9\x84\xd9\x8a\xd9\x87\x20\xd9\x88\xd8\xb3\xd9\x84\xd9\x85\0" /* offset 13754 */
- "\xd8\xac\xd9\x84\x20\xd8\xac\xd9\x84\xd8\xa7\xd9\x84\xd9\x87\0" /* offset 13788 */
- "\xd8\xb1\xdb\x8c\xd8\xa7\xd9\x84\0" /* offset 13804 */
- "\xe2\x80\x94\0" /* offset 13813 */
- "\xe2\x80\x93\0" /* offset 13817 */
- "\x5f\0" /* offset 13821 */
- "\x7b\0" /* offset 13823 */
- "\x7d\0" /* offset 13825 */
- "\xe3\x80\x94\0" /* offset 13827 */
- "\xe3\x80\x95\0" /* offset 13831 */
- "\xe3\x80\x90\0" /* offset 13835 */
- "\xe3\x80\x91\0" /* offset 13839 */
- "\xe3\x80\x8a\0" /* offset 13843 */
- "\xe3\x80\x8b\0" /* offset 13847 */
- "\xe3\x80\x8c\0" /* offset 13851 */
- "\xe3\x80\x8d\0" /* offset 13855 */
- "\xe3\x80\x8e\0" /* offset 13859 */
- "\xe3\x80\x8f\0" /* offset 13863 */
- "\x2c\0" /* offset 13867 */
- "\xe3\x80\x81\0" /* offset 13869 */
- "\x3a\0" /* offset 13873 */
- "\x3f\0" /* offset 13875 */
- "\x21\0" /* offset 13877 */
- "\x23\0" /* offset 13879 */
- "\x26\0" /* offset 13881 */
- "\x2a\0" /* offset 13883 */
- "\x2d\0" /* offset 13885 */
- "\x3c\0" /* offset 13887 */
- "\x3e\0" /* offset 13889 */
- "\x5c\0" /* offset 13891 */
- "\x24\0" /* offset 13893 */
- "\x25\0" /* offset 13895 */
- "\x40\0" /* offset 13897 */
- "\x20\xd9\x8b\0" /* offset 13899 */
- "\xd9\x80\xd9\x8b\0" /* offset 13903 */
- "\x20\xd9\x8c\0" /* offset 13908 */
- "\x20\xd9\x8d\0" /* offset 13912 */
- "\x20\xd9\x8e\0" /* offset 13916 */
- "\xd9\x80\xd9\x8e\0" /* offset 13920 */
- "\x20\xd9\x8f\0" /* offset 13925 */
- "\xd9\x80\xd9\x8f\0" /* offset 13929 */
- "\x20\xd9\x90\0" /* offset 13934 */
- "\xd9\x80\xd9\x90\0" /* offset 13938 */
- "\x20\xd9\x91\0" /* offset 13943 */
- "\xd9\x80\xd9\x91\0" /* offset 13947 */
- "\x20\xd9\x92\0" /* offset 13952 */
- "\xd9\x80\xd9\x92\0" /* offset 13956 */
- "\xd8\xa1\0" /* offset 13961 */
- "\xd8\xa7\0" /* offset 13964 */
- "\xd8\xa8\0" /* offset 13967 */
- "\xd8\xa9\0" /* offset 13970 */
- "\xd8\xaa\0" /* offset 13973 */
- "\xd8\xab\0" /* offset 13976 */
- "\xd8\xac\0" /* offset 13979 */
- "\xd8\xad\0" /* offset 13982 */
- "\xd8\xae\0" /* offset 13985 */
- "\xd8\xaf\0" /* offset 13988 */
- "\xd8\xb0\0" /* offset 13991 */
- "\xd8\xb1\0" /* offset 13994 */
- "\xd8\xb2\0" /* offset 13997 */
- "\xd8\xb3\0" /* offset 14000 */
- "\xd8\xb4\0" /* offset 14003 */
- "\xd8\xb5\0" /* offset 14006 */
- "\xd8\xb6\0" /* offset 14009 */
- "\xd8\xb7\0" /* offset 14012 */
- "\xd8\xb8\0" /* offset 14015 */
- "\xd8\xb9\0" /* offset 14018 */
- "\xd8\xba\0" /* offset 14021 */
- "\xd9\x81\0" /* offset 14024 */
- "\xd9\x82\0" /* offset 14027 */
- "\xd9\x83\0" /* offset 14030 */
- "\xd9\x84\0" /* offset 14033 */
- "\xd9\x85\0" /* offset 14036 */
- "\xd9\x86\0" /* offset 14039 */
- "\xd9\x87\0" /* offset 14042 */
- "\xd9\x88\0" /* offset 14045 */
- "\xd9\x8a\0" /* offset 14048 */
- "\xd9\x84\xd8\xa7\xd9\x93\0" /* offset 14051 */
- "\xd9\x84\xd8\xa7\xd9\x94\0" /* offset 14058 */
- "\xd9\x84\xd8\xa7\xd9\x95\0" /* offset 14065 */
- "\xd9\x84\xd8\xa7\0" /* offset 14072 */
- "\x22\0" /* offset 14077 */
- "\x27\0" /* offset 14079 */
- "\x2f\0" /* offset 14081 */
- "\x5b\0" /* offset 14083 */
- "\x5d\0" /* offset 14085 */
- "\x5e\0" /* offset 14087 */
- "\x7c\0" /* offset 14089 */
- "\x7e\0" /* offset 14091 */
- "\xe2\xa6\x85\0" /* offset 14093 */
- "\xe2\xa6\x86\0" /* offset 14097 */
- "\xe3\x80\x82\0" /* offset 14101 */
- "\xe3\x83\xbb\0" /* offset 14105 */
- "\xe3\x82\xa1\0" /* offset 14109 */
- "\xe3\x82\xa3\0" /* offset 14113 */
- "\xe3\x82\xa5\0" /* offset 14117 */
- "\xe3\x82\xa7\0" /* offset 14121 */
- "\xe3\x82\xa9\0" /* offset 14125 */
- "\xe3\x83\xa3\0" /* offset 14129 */
- "\xe3\x83\xa5\0" /* offset 14133 */
- "\xe3\x83\xa7\0" /* offset 14137 */
- "\xe3\x83\x83\0" /* offset 14141 */
- "\xe3\x83\xbc\0" /* offset 14145 */
- "\xe3\x83\xb3\0" /* offset 14149 */
- "\xe3\x82\x99\0" /* offset 14153 */
- "\xe3\x82\x9a\0" /* offset 14157 */
- "\xc2\xa2\0" /* offset 14161 */
- "\xc2\xa3\0" /* offset 14164 */
- "\xc2\xac\0" /* offset 14167 */
- "\xc2\xa6\0" /* offset 14170 */
- "\xc2\xa5\0" /* offset 14173 */
- "\xe2\x82\xa9\0" /* offset 14176 */
- "\xe2\x94\x82\0" /* offset 14180 */
- "\xe2\x86\x90\0" /* offset 14184 */
- "\xe2\x86\x91\0" /* offset 14188 */
- "\xe2\x86\x92\0" /* offset 14192 */
- "\xe2\x86\x93\0" /* offset 14196 */
- "\xe2\x96\xa0\0" /* offset 14200 */
- "\xe2\x97\x8b\0" /* offset 14204 */
- "\xf0\x9d\x85\x97\xf0\x9d\x85\xa5\0" /* offset 14208 */
- "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\0" /* offset 14217 */
- "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 14226 */
- "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 14239 */
- "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb0\0" /* offset 14252 */
- "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb1\0" /* offset 14265 */
- "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb2\0" /* offset 14278 */
- "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\0" /* offset 14291 */
- "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\0" /* offset 14300 */
- "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 14309 */
- "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 14322 */
- "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 14335 */
- "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 14348 */
- "\xce\x91\0" /* offset 14361 */
- "\xce\x92\0" /* offset 14364 */
- "\xce\x94\0" /* offset 14367 */
- "\xce\x95\0" /* offset 14370 */
- "\xce\x96\0" /* offset 14373 */
- "\xce\x97\0" /* offset 14376 */
- "\xce\x99\0" /* offset 14379 */
- "\xce\x9a\0" /* offset 14382 */
- "\xce\x9b\0" /* offset 14385 */
- "\xce\x9c\0" /* offset 14388 */
- "\xce\x9d\0" /* offset 14391 */
- "\xce\x9e\0" /* offset 14394 */
- "\xce\x9f\0" /* offset 14397 */
- "\xce\xa1\0" /* offset 14400 */
- "\xce\xa3\0" /* offset 14403 */
- "\xce\xa4\0" /* offset 14406 */
- "\xce\xa6\0" /* offset 14409 */
- "\xce\xa7\0" /* offset 14412 */
- "\xce\xa8\0" /* offset 14415 */
- "\xe2\x88\x87\0" /* offset 14418 */
- "\xce\xb1\0" /* offset 14422 */
- "\xce\xb4\0" /* offset 14425 */
- "\xce\xb6\0" /* offset 14428 */
- "\xce\xb7\0" /* offset 14431 */
- "\xce\xbb\0" /* offset 14434 */
- "\xce\xbd\0" /* offset 14437 */
- "\xce\xbe\0" /* offset 14440 */
- "\xce\xbf\0" /* offset 14443 */
- "\xcf\x83\0" /* offset 14446 */
- "\xcf\x84\0" /* offset 14449 */
- "\xcf\x85\0" /* offset 14452 */
- "\xcf\x87\0" /* offset 14455 */
- "\xcf\x88\0" /* offset 14458 */
- "\xcf\x89\0" /* offset 14461 */
- "\xe2\x88\x82\0" /* offset 14464 */
- "\xe4\xb8\xbd\0" /* offset 14468 */
- "\xe4\xb8\xb8\0" /* offset 14472 */
- "\xe4\xb9\x81\0" /* offset 14476 */
- "\xf0\xa0\x84\xa2\0" /* offset 14480 */
- "\xe4\xbd\xa0\0" /* offset 14485 */
- "\xe4\xbe\xbb\0" /* offset 14489 */
- "\xe5\x80\x82\0" /* offset 14493 */
- "\xe5\x81\xba\0" /* offset 14497 */
- "\xe5\x82\x99\0" /* offset 14501 */
- "\xe5\x83\x8f\0" /* offset 14505 */
- "\xe3\x92\x9e\0" /* offset 14509 */
- "\xf0\xa0\x98\xba\0" /* offset 14513 */
- "\xe5\x85\x94\0" /* offset 14518 */
- "\xe5\x85\xa4\0" /* offset 14522 */
- "\xe5\x85\xb7\0" /* offset 14526 */
- "\xf0\xa0\x94\x9c\0" /* offset 14530 */
- "\xe3\x92\xb9\0" /* offset 14535 */
- "\xe5\x85\xa7\0" /* offset 14539 */
- "\xe5\x86\x8d\0" /* offset 14543 */
- "\xf0\xa0\x95\x8b\0" /* offset 14547 */
- "\xe5\x86\x97\0" /* offset 14552 */
- "\xe5\x86\xa4\0" /* offset 14556 */
- "\xe4\xbb\x8c\0" /* offset 14560 */
- "\xe5\x86\xac\0" /* offset 14564 */
- "\xe5\x86\xb5\0" /* offset 14568 */
- "\xf0\xa9\x87\x9f\0" /* offset 14572 */
- "\xe5\x88\x83\0" /* offset 14577 */
- "\xe3\x93\x9f\0" /* offset 14581 */
- "\xe5\x88\xbb\0" /* offset 14585 */
- "\xe5\x89\x86\0" /* offset 14589 */
- "\xe5\x89\xb2\0" /* offset 14593 */
- "\xe5\x89\xb7\0" /* offset 14597 */
- "\xe3\x94\x95\0" /* offset 14601 */
- "\xe5\x8b\x87\0" /* offset 14605 */
- "\xe5\x8b\xba\0" /* offset 14609 */
- "\xe5\x8c\x85\0" /* offset 14613 */
- "\xe5\x8c\x86\0" /* offset 14617 */
- "\xe5\x8d\x89\0" /* offset 14621 */
- "\xe5\x8d\x9a\0" /* offset 14625 */
- "\xe5\x8d\xb3\0" /* offset 14629 */
- "\xe5\x8d\xbd\0" /* offset 14633 */
- "\xe5\x8d\xbf\0" /* offset 14637 */
- "\xf0\xa0\xa8\xac\0" /* offset 14641 */
- "\xe7\x81\xb0\0" /* offset 14646 */
- "\xe5\x8f\x8a\0" /* offset 14650 */
- "\xe5\x8f\x9f\0" /* offset 14654 */
- "\xf0\xa0\xad\xa3\0" /* offset 14658 */
- "\xe5\x8f\xab\0" /* offset 14663 */
- "\xe5\x8f\xb1\0" /* offset 14667 */
- "\xe5\x90\x86\0" /* offset 14671 */
- "\xe5\x92\x9e\0" /* offset 14675 */
- "\xe5\x90\xb8\0" /* offset 14679 */
- "\xe5\x91\x88\0" /* offset 14683 */
- "\xe5\x91\xa8\0" /* offset 14687 */
- "\xe5\x92\xa2\0" /* offset 14691 */
- "\xe5\x93\xb6\0" /* offset 14695 */
- "\xe5\x94\x90\0" /* offset 14699 */
- "\xe5\x95\x93\0" /* offset 14703 */
- "\xe5\x95\xa3\0" /* offset 14707 */
- "\xe5\x96\x84\0" /* offset 14711 */
- "\xe5\x96\x99\0" /* offset 14715 */
- "\xe5\x96\xab\0" /* offset 14719 */
- "\xe5\x96\xb3\0" /* offset 14723 */
- "\xe5\x97\x82\0" /* offset 14727 */
- "\xe5\x9c\x96\0" /* offset 14731 */
- "\xe5\x9c\x97\0" /* offset 14735 */
- "\xe5\x99\x91\0" /* offset 14739 */
- "\xe5\x99\xb4\0" /* offset 14743 */
- "\xe5\xa3\xae\0" /* offset 14747 */
- "\xe5\x9f\x8e\0" /* offset 14751 */
- "\xe5\x9f\xb4\0" /* offset 14755 */
- "\xe5\xa0\x8d\0" /* offset 14759 */
- "\xe5\x9e\x8b\0" /* offset 14763 */
- "\xe5\xa0\xb2\0" /* offset 14767 */
- "\xe5\xa0\xb1\0" /* offset 14771 */
- "\xe5\xa2\xac\0" /* offset 14775 */
- "\xf0\xa1\x93\xa4\0" /* offset 14779 */
- "\xe5\xa3\xb2\0" /* offset 14784 */
- "\xe5\xa3\xb7\0" /* offset 14788 */
- "\xe5\xa4\x86\0" /* offset 14792 */
- "\xe5\xa4\x9a\0" /* offset 14796 */
- "\xe5\xa4\xa2\0" /* offset 14800 */
- "\xe5\xa5\xa2\0" /* offset 14804 */
- "\xf0\xa1\x9a\xa8\0" /* offset 14808 */
- "\xf0\xa1\x9b\xaa\0" /* offset 14813 */
- "\xe5\xa7\xac\0" /* offset 14818 */
- "\xe5\xa8\x9b\0" /* offset 14822 */
- "\xe5\xa8\xa7\0" /* offset 14826 */
- "\xe5\xa7\x98\0" /* offset 14830 */
- "\xe5\xa9\xa6\0" /* offset 14834 */
- "\xe3\x9b\xae\0" /* offset 14838 */
- "\xf0\xa1\x8d\xaa\0" /* offset 14842 */
- "\xe5\xac\x88\0" /* offset 14847 */
- "\xe5\xac\xbe\0" /* offset 14851 */
- "\xf0\xa1\xa7\x88\0" /* offset 14855 */
- "\xe5\xaf\x83\0" /* offset 14860 */
- "\xe5\xaf\x98\0" /* offset 14864 */
- "\xe5\xaf\xb3\0" /* offset 14868 */
- "\xf0\xa1\xac\x98\0" /* offset 14872 */
- "\xe5\xaf\xbf\0" /* offset 14877 */
- "\xe5\xb0\x86\0" /* offset 14881 */
- "\xe5\xbc\xb3\0" /* offset 14885 */
- "\xe3\x9e\x81\0" /* offset 14889 */
- "\xe5\xb1\xa0\0" /* offset 14893 */
- "\xe5\xb3\x80\0" /* offset 14897 */
- "\xe5\xb2\x8d\0" /* offset 14901 */
- "\xf0\xa1\xb7\xa4\0" /* offset 14905 */
- "\xe5\xb5\x83\0" /* offset 14910 */
- "\xf0\xa1\xb7\xa6\0" /* offset 14914 */
- "\xe5\xb5\xae\0" /* offset 14919 */
- "\xe5\xb5\xab\0" /* offset 14923 */
- "\xe5\xb5\xbc\0" /* offset 14927 */
- "\xe5\xb7\xa1\0" /* offset 14931 */
- "\xe5\xb7\xa2\0" /* offset 14935 */
- "\xe3\xa0\xaf\0" /* offset 14939 */
- "\xe5\xb7\xbd\0" /* offset 14943 */
- "\xe5\xb8\xa8\0" /* offset 14947 */
- "\xe5\xb8\xbd\0" /* offset 14951 */
- "\xe5\xb9\xa9\0" /* offset 14955 */
- "\xe3\xa1\xa2\0" /* offset 14959 */
- "\xf0\xa2\x86\x83\0" /* offset 14963 */
- "\xe3\xa1\xbc\0" /* offset 14968 */
- "\xe5\xba\xb0\0" /* offset 14972 */
- "\xe5\xba\xb3\0" /* offset 14976 */
- "\xe5\xba\xb6\0" /* offset 14980 */
- "\xf0\xaa\x8e\x92\0" /* offset 14984 */
- "\xf0\xa2\x8c\xb1\0" /* offset 14989 */
- "\xe8\x88\x81\0" /* offset 14994 */
- "\xe5\xbc\xa2\0" /* offset 14998 */
- "\xe3\xa3\x87\0" /* offset 15002 */
- "\xf0\xa3\x8a\xb8\0" /* offset 15006 */
- "\xf0\xa6\x87\x9a\0" /* offset 15011 */
- "\xe5\xbd\xa2\0" /* offset 15016 */
- "\xe5\xbd\xab\0" /* offset 15020 */
- "\xe3\xa3\xa3\0" /* offset 15024 */
- "\xe5\xbe\x9a\0" /* offset 15028 */
- "\xe5\xbf\x8d\0" /* offset 15032 */
- "\xe5\xbf\x97\0" /* offset 15036 */
- "\xe5\xbf\xb9\0" /* offset 15040 */
- "\xe6\x82\x81\0" /* offset 15044 */
- "\xe3\xa4\xba\0" /* offset 15048 */
- "\xe3\xa4\x9c\0" /* offset 15052 */
- "\xf0\xa2\x9b\x94\0" /* offset 15056 */
- "\xe6\x83\x87\0" /* offset 15061 */
- "\xe6\x85\x88\0" /* offset 15065 */
- "\xe6\x85\x8c\0" /* offset 15069 */
- "\xe6\x85\x8e\0" /* offset 15073 */
- "\xe6\x85\xba\0" /* offset 15077 */
- "\xe6\x86\xb2\0" /* offset 15081 */
- "\xe6\x86\xa4\0" /* offset 15085 */
- "\xe6\x86\xaf\0" /* offset 15089 */
- "\xe6\x87\x9e\0" /* offset 15093 */
- "\xe6\x88\x90\0" /* offset 15097 */
- "\xe6\x88\x9b\0" /* offset 15101 */
- "\xe6\x89\x9d\0" /* offset 15105 */
- "\xe6\x8a\xb1\0" /* offset 15109 */
- "\xe6\x8b\x94\0" /* offset 15113 */
- "\xe6\x8d\x90\0" /* offset 15117 */
- "\xf0\xa2\xac\x8c\0" /* offset 15121 */
- "\xe6\x8c\xbd\0" /* offset 15126 */
- "\xe6\x8b\xbc\0" /* offset 15130 */
- "\xe6\x8d\xa8\0" /* offset 15134 */
- "\xe6\x8e\x83\0" /* offset 15138 */
- "\xe6\x8f\xa4\0" /* offset 15142 */
- "\xf0\xa2\xaf\xb1\0" /* offset 15146 */
- "\xe6\x90\xa2\0" /* offset 15151 */
- "\xe6\x8f\x85\0" /* offset 15155 */
- "\xe6\x8e\xa9\0" /* offset 15159 */
- "\xe3\xa8\xae\0" /* offset 15163 */
- "\xe6\x91\xa9\0" /* offset 15167 */
- "\xe6\x91\xbe\0" /* offset 15171 */
- "\xe6\x92\x9d\0" /* offset 15175 */
- "\xe6\x91\xb7\0" /* offset 15179 */
- "\xe3\xa9\xac\0" /* offset 15183 */
- "\xe6\x95\xac\0" /* offset 15187 */
- "\xf0\xa3\x80\x8a\0" /* offset 15191 */
- "\xe6\x97\xa3\0" /* offset 15196 */
- "\xe6\x9b\xb8\0" /* offset 15200 */
- "\xe6\x99\x89\0" /* offset 15204 */
- "\xe3\xac\x99\0" /* offset 15208 */
- "\xe3\xac\x88\0" /* offset 15212 */
- "\xe3\xab\xa4\0" /* offset 15216 */
- "\xe5\x86\x92\0" /* offset 15220 */
- "\xe5\x86\x95\0" /* offset 15224 */
- "\xe6\x9c\x80\0" /* offset 15228 */
- "\xe6\x9a\x9c\0" /* offset 15232 */
- "\xe8\x82\xad\0" /* offset 15236 */
- "\xe4\x8f\x99\0" /* offset 15240 */
- "\xe6\x9c\x9b\0" /* offset 15244 */
- "\xe6\x9c\xa1\0" /* offset 15248 */
- "\xe6\x9d\x9e\0" /* offset 15252 */
- "\xe6\x9d\x93\0" /* offset 15256 */
- "\xf0\xa3\x8f\x83\0" /* offset 15260 */
- "\xe3\xad\x89\0" /* offset 15265 */
- "\xe6\x9f\xba\0" /* offset 15269 */
- "\xe6\x9e\x85\0" /* offset 15273 */
- "\xe6\xa1\x92\0" /* offset 15277 */
- "\xf0\xa3\x91\xad\0" /* offset 15281 */
- "\xe6\xa2\x8e\0" /* offset 15286 */
- "\xe6\xa0\x9f\0" /* offset 15290 */
- "\xe6\xa4\x94\0" /* offset 15294 */
- "\xe3\xae\x9d\0" /* offset 15298 */
- "\xe6\xa5\x82\0" /* offset 15302 */
- "\xe6\xa6\xa3\0" /* offset 15306 */
- "\xe6\xa7\xaa\0" /* offset 15310 */
- "\xe6\xaa\xa8\0" /* offset 15314 */
- "\xf0\xa3\x9a\xa3\0" /* offset 15318 */
- "\xe6\xab\x9b\0" /* offset 15323 */
- "\xe3\xb0\x98\0" /* offset 15327 */
- "\xe6\xac\xa1\0" /* offset 15331 */
- "\xf0\xa3\xa2\xa7\0" /* offset 15335 */
- "\xe6\xad\x94\0" /* offset 15340 */
- "\xe3\xb1\x8e\0" /* offset 15344 */
- "\xe6\xad\xb2\0" /* offset 15348 */
- "\xe6\xae\x9f\0" /* offset 15352 */
- "\xe6\xae\xbb\0" /* offset 15356 */
- "\xf0\xa3\xaa\x8d\0" /* offset 15360 */
- "\xf0\xa1\xb4\x8b\0" /* offset 15365 */
- "\xf0\xa3\xab\xba\0" /* offset 15370 */
- "\xe6\xb1\x8e\0" /* offset 15375 */
- "\xf0\xa3\xb2\xbc\0" /* offset 15379 */
- "\xe6\xb2\xbf\0" /* offset 15384 */
- "\xe6\xb3\x8d\0" /* offset 15388 */
- "\xe6\xb1\xa7\0" /* offset 15392 */
- "\xe6\xb4\x96\0" /* offset 15396 */
- "\xe6\xb4\xbe\0" /* offset 15400 */
- "\xe6\xb5\xa9\0" /* offset 15404 */
- "\xe6\xb5\xb8\0" /* offset 15408 */
- "\xe6\xb6\x85\0" /* offset 15412 */
- "\xf0\xa3\xb4\x9e\0" /* offset 15416 */
- "\xe6\xb4\xb4\0" /* offset 15421 */
- "\xe6\xb8\xaf\0" /* offset 15425 */
- "\xe6\xb9\xae\0" /* offset 15429 */
- "\xe3\xb4\xb3\0" /* offset 15433 */
- "\xe6\xbb\x8b\0" /* offset 15437 */
- "\xe6\xbb\x87\0" /* offset 15441 */
- "\xf0\xa3\xbb\x91\0" /* offset 15445 */
- "\xe6\xb7\xb9\0" /* offset 15450 */
- "\xe6\xbd\xae\0" /* offset 15454 */
- "\xf0\xa3\xbd\x9e\0" /* offset 15458 */
- "\xf0\xa3\xbe\x8e\0" /* offset 15463 */
- "\xe6\xbf\x86\0" /* offset 15468 */
- "\xe7\x80\xb9\0" /* offset 15472 */
- "\xe7\x80\x9e\0" /* offset 15476 */
- "\xe7\x80\x9b\0" /* offset 15480 */
- "\xe3\xb6\x96\0" /* offset 15484 */
- "\xe7\x81\x8a\0" /* offset 15488 */
- "\xe7\x81\xbd\0" /* offset 15492 */
- "\xe7\x81\xb7\0" /* offset 15496 */
- "\xe7\x82\xad\0" /* offset 15500 */
- "\xf0\xa0\x94\xa5\0" /* offset 15504 */
- "\xe7\x85\x85\0" /* offset 15509 */
- "\xf0\xa4\x89\xa3\0" /* offset 15513 */
- "\xe7\x86\x9c\0" /* offset 15518 */
- "\xe4\x8e\xab\0" /* offset 15522 */
- "\xe7\x88\xa8\0" /* offset 15526 */
- "\xe7\x88\xb5\0" /* offset 15530 */
- "\xe7\x89\x90\0" /* offset 15534 */
- "\xf0\xa4\x98\x88\0" /* offset 15538 */
- "\xe7\x8a\x80\0" /* offset 15543 */
- "\xe7\x8a\x95\0" /* offset 15547 */
- "\xf0\xa4\x9c\xb5\0" /* offset 15551 */
- "\xf0\xa4\xa0\x94\0" /* offset 15556 */
- "\xe7\x8d\xba\0" /* offset 15561 */
- "\xe7\x8e\x8b\0" /* offset 15565 */
- "\xe3\xba\xac\0" /* offset 15569 */
- "\xe7\x8e\xa5\0" /* offset 15573 */
- "\xe3\xba\xb8\0" /* offset 15577 */
- "\xe7\x91\x87\0" /* offset 15581 */
- "\xe7\x91\x9c\0" /* offset 15585 */
- "\xe7\x91\xb1\0" /* offset 15589 */
- "\xe7\x92\x85\0" /* offset 15593 */
- "\xe7\x93\x8a\0" /* offset 15597 */
- "\xe3\xbc\x9b\0" /* offset 15601 */
- "\xe7\x94\xa4\0" /* offset 15605 */
- "\xf0\xa4\xb0\xb6\0" /* offset 15609 */
- "\xe7\x94\xbe\0" /* offset 15614 */
- "\xf0\xa4\xb2\x92\0" /* offset 15618 */
- "\xf0\xa2\x86\x9f\0" /* offset 15623 */
- "\xe7\x98\x90\0" /* offset 15628 */
- "\xf0\xa4\xbe\xa1\0" /* offset 15632 */
- "\xf0\xa4\xbe\xb8\0" /* offset 15637 */
- "\xf0\xa5\x81\x84\0" /* offset 15642 */
- "\xe3\xbf\xbc\0" /* offset 15647 */
- "\xe4\x80\x88\0" /* offset 15651 */
- "\xe7\x9b\xb4\0" /* offset 15655 */
- "\xf0\xa5\x83\xb3\0" /* offset 15659 */
- "\xf0\xa5\x83\xb2\0" /* offset 15664 */
- "\xf0\xa5\x84\x99\0" /* offset 15669 */
- "\xf0\xa5\x84\xb3\0" /* offset 15674 */
- "\xe7\x9c\x9e\0" /* offset 15679 */
- "\xe7\x9c\x9f\0" /* offset 15683 */
- "\xe7\x9d\x8a\0" /* offset 15687 */
- "\xe4\x80\xb9\0" /* offset 15691 */
- "\xe7\x9e\x8b\0" /* offset 15695 */
- "\xe4\x81\x86\0" /* offset 15699 */
- "\xe4\x82\x96\0" /* offset 15703 */
- "\xf0\xa5\x90\x9d\0" /* offset 15707 */
- "\xe7\xa1\x8e\0" /* offset 15712 */
- "\xe7\xa3\x8c\0" /* offset 15716 */
- "\xe4\x83\xa3\0" /* offset 15720 */
- "\xf0\xa5\x98\xa6\0" /* offset 15724 */
- "\xf0\xa5\x9a\x9a\0" /* offset 15729 */
- "\xf0\xa5\x9b\x85\0" /* offset 15734 */
- "\xe7\xa7\xab\0" /* offset 15739 */
- "\xe4\x84\xaf\0" /* offset 15743 */
- "\xe7\xa9\x8a\0" /* offset 15747 */
- "\xe7\xa9\x8f\0" /* offset 15751 */
- "\xf0\xa5\xa5\xbc\0" /* offset 15755 */
- "\xf0\xa5\xaa\xa7\0" /* offset 15760 */
- "\xe7\xaa\xae\0" /* offset 15765 */
- "\xe4\x88\x82\0" /* offset 15769 */
- "\xf0\xa5\xae\xab\0" /* offset 15773 */
- "\xe7\xaf\x86\0" /* offset 15778 */
- "\xe7\xaf\x89\0" /* offset 15782 */
- "\xe4\x88\xa7\0" /* offset 15786 */
- "\xf0\xa5\xb2\x80\0" /* offset 15790 */
- "\xe7\xb3\x92\0" /* offset 15795 */
- "\xe4\x8a\xa0\0" /* offset 15799 */
- "\xe7\xb3\xa8\0" /* offset 15803 */
- "\xe7\xb3\xa3\0" /* offset 15807 */
- "\xe7\xb4\x80\0" /* offset 15811 */
- "\xf0\xa5\xbe\x86\0" /* offset 15815 */
- "\xe7\xb5\xa3\0" /* offset 15820 */
- "\xe4\x8c\x81\0" /* offset 15824 */
- "\xe7\xb7\x87\0" /* offset 15828 */
- "\xe7\xb8\x82\0" /* offset 15832 */
- "\xe7\xb9\x85\0" /* offset 15836 */
- "\xe4\x8c\xb4\0" /* offset 15840 */
- "\xf0\xa6\x88\xa8\0" /* offset 15844 */
- "\xf0\xa6\x89\x87\0" /* offset 15849 */
- "\xe4\x8d\x99\0" /* offset 15854 */
- "\xf0\xa6\x8b\x99\0" /* offset 15858 */
- "\xe7\xbd\xba\0" /* offset 15863 */
- "\xf0\xa6\x8c\xbe\0" /* offset 15867 */
- "\xe7\xbe\x95\0" /* offset 15872 */
- "\xe7\xbf\xba\0" /* offset 15876 */
- "\xf0\xa6\x93\x9a\0" /* offset 15880 */
- "\xf0\xa6\x94\xa3\0" /* offset 15885 */
- "\xe8\x81\xa0\0" /* offset 15890 */
- "\xf0\xa6\x96\xa8\0" /* offset 15894 */
- "\xe8\x81\xb0\0" /* offset 15899 */
- "\xf0\xa3\x8d\x9f\0" /* offset 15903 */
- "\xe4\x8f\x95\0" /* offset 15908 */
- "\xe8\x82\xb2\0" /* offset 15912 */
- "\xe8\x84\x83\0" /* offset 15916 */
- "\xe4\x90\x8b\0" /* offset 15920 */
- "\xe8\x84\xbe\0" /* offset 15924 */
- "\xe5\xaa\xb5\0" /* offset 15928 */
- "\xf0\xa6\x9e\xa7\0" /* offset 15932 */
- "\xf0\xa6\x9e\xb5\0" /* offset 15937 */
- "\xf0\xa3\x8e\x93\0" /* offset 15942 */
- "\xf0\xa3\x8e\x9c\0" /* offset 15947 */
- "\xe8\x88\x84\0" /* offset 15952 */
- "\xe8\xbe\x9e\0" /* offset 15956 */
- "\xe4\x91\xab\0" /* offset 15960 */
- "\xe8\x8a\x91\0" /* offset 15964 */
- "\xe8\x8a\x8b\0" /* offset 15968 */
- "\xe8\x8a\x9d\0" /* offset 15972 */
- "\xe5\x8a\xb3\0" /* offset 15976 */
- "\xe8\x8a\xb1\0" /* offset 15980 */
- "\xe8\x8a\xb3\0" /* offset 15984 */
- "\xe8\x8a\xbd\0" /* offset 15988 */
- "\xe8\x8b\xa6\0" /* offset 15992 */
- "\xf0\xa6\xac\xbc\0" /* offset 15996 */
- "\xe8\x8c\x9d\0" /* offset 16001 */
- "\xe8\x8d\xa3\0" /* offset 16005 */
- "\xe8\x8e\xad\0" /* offset 16009 */
- "\xe8\x8c\xa3\0" /* offset 16013 */
- "\xe8\x8e\xbd\0" /* offset 16017 */
- "\xe8\x8f\xa7\0" /* offset 16021 */
- "\xe8\x8d\x93\0" /* offset 16025 */
- "\xe8\x8f\x8a\0" /* offset 16029 */
- "\xe8\x8f\x8c\0" /* offset 16033 */
- "\xe8\x8f\x9c\0" /* offset 16037 */
- "\xf0\xa6\xb0\xb6\0" /* offset 16041 */
- "\xf0\xa6\xb5\xab\0" /* offset 16046 */
- "\xf0\xa6\xb3\x95\0" /* offset 16051 */
- "\xe4\x94\xab\0" /* offset 16056 */
- "\xe8\x93\xb1\0" /* offset 16060 */
- "\xe8\x93\xb3\0" /* offset 16064 */
- "\xe8\x94\x96\0" /* offset 16068 */
- "\xf0\xa7\x8f\x8a\0" /* offset 16072 */
- "\xe8\x95\xa4\0" /* offset 16077 */
- "\xf0\xa6\xbc\xac\0" /* offset 16081 */
- "\xe4\x95\x9d\0" /* offset 16086 */
- "\xe4\x95\xa1\0" /* offset 16090 */
- "\xf0\xa6\xbe\xb1\0" /* offset 16094 */
- "\xf0\xa7\x83\x92\0" /* offset 16099 */
- "\xe4\x95\xab\0" /* offset 16104 */
- "\xe8\x99\x90\0" /* offset 16108 */
- "\xe8\x99\xa7\0" /* offset 16112 */
- "\xe8\x99\xa9\0" /* offset 16116 */
- "\xe8\x9a\xa9\0" /* offset 16120 */
- "\xe8\x9a\x88\0" /* offset 16124 */
- "\xe8\x9c\x8e\0" /* offset 16128 */
- "\xe8\x9b\xa2\0" /* offset 16132 */
- "\xe8\x9d\xb9\0" /* offset 16136 */
- "\xe8\x9c\xa8\0" /* offset 16140 */
- "\xe8\x9d\xab\0" /* offset 16144 */
- "\xe8\x9e\x86\0" /* offset 16148 */
- "\xe4\xb5\x97\0" /* offset 16152 */
- "\xe8\x9f\xa1\0" /* offset 16156 */
- "\xe8\xa0\x81\0" /* offset 16160 */
- "\xe4\x97\xb9\0" /* offset 16164 */
- "\xe8\xa1\xa0\0" /* offset 16168 */
- "\xf0\xa7\x99\xa7\0" /* offset 16172 */
- "\xe8\xa3\x97\0" /* offset 16177 */
- "\xe8\xa3\x9e\0" /* offset 16181 */
- "\xe4\x98\xb5\0" /* offset 16185 */
- "\xe8\xa3\xba\0" /* offset 16189 */
- "\xe3\x92\xbb\0" /* offset 16193 */
- "\xf0\xa7\xa2\xae\0" /* offset 16197 */
- "\xf0\xa7\xa5\xa6\0" /* offset 16202 */
- "\xe4\x9a\xbe\0" /* offset 16207 */
- "\xe4\x9b\x87\0" /* offset 16211 */
- "\xe8\xaa\xa0\0" /* offset 16215 */
- "\xe8\xab\xad\0" /* offset 16219 */
- "\xe8\xae\x8a\0" /* offset 16223 */
- "\xf0\xa7\xb2\xa8\0" /* offset 16227 */
- "\xe8\xb2\xab\0" /* offset 16232 */
- "\xe8\xb3\x81\0" /* offset 16236 */
- "\xe8\xb4\x9b\0" /* offset 16240 */
- "\xe8\xb5\xb7\0" /* offset 16244 */
- "\xf0\xa7\xbc\xaf\0" /* offset 16248 */
- "\xf0\xa0\xa0\x84\0" /* offset 16253 */
- "\xe8\xb7\x8b\0" /* offset 16258 */
- "\xe8\xb6\xbc\0" /* offset 16262 */
- "\xe8\xb7\xb0\0" /* offset 16266 */
- "\xf0\xa0\xa3\x9e\0" /* offset 16270 */
- "\xe8\xbb\x94\0" /* offset 16275 */
- "\xe8\xbc\xb8\0" /* offset 16279 */
- "\xf0\xa8\x97\x92\0" /* offset 16283 */
- "\xf0\xa8\x97\xad\0" /* offset 16288 */
- "\xe9\x82\x94\0" /* offset 16293 */
- "\xe9\x83\xb1\0" /* offset 16297 */
- "\xe9\x84\x91\0" /* offset 16301 */
- "\xf0\xa8\x9c\xae\0" /* offset 16305 */
- "\xe9\x84\x9b\0" /* offset 16310 */
- "\xe9\x88\xb8\0" /* offset 16314 */
- "\xe9\x8b\x97\0" /* offset 16318 */
- "\xe9\x8b\x98\0" /* offset 16322 */
- "\xe9\x89\xbc\0" /* offset 16326 */
- "\xe9\x8f\xb9\0" /* offset 16330 */
- "\xe9\x90\x95\0" /* offset 16334 */
- "\xf0\xa8\xaf\xba\0" /* offset 16338 */
- "\xe9\x96\x8b\0" /* offset 16343 */
- "\xe4\xa6\x95\0" /* offset 16347 */
- "\xe9\x96\xb7\0" /* offset 16351 */
- "\xf0\xa8\xb5\xb7\0" /* offset 16355 */
- "\xe4\xa7\xa6\0" /* offset 16360 */
- "\xe9\x9b\x83\0" /* offset 16364 */
- "\xe5\xb6\xb2\0" /* offset 16368 */
- "\xe9\x9c\xa3\0" /* offset 16372 */
- "\xf0\xa9\x85\x85\0" /* offset 16376 */
- "\xf0\xa9\x88\x9a\0" /* offset 16381 */
- "\xe4\xa9\xae\0" /* offset 16386 */
- "\xe4\xa9\xb6\0" /* offset 16390 */
- "\xe9\x9f\xa0\0" /* offset 16394 */
- "\xf0\xa9\x90\x8a\0" /* offset 16398 */
- "\xe4\xaa\xb2\0" /* offset 16403 */
- "\xf0\xa9\x92\x96\0" /* offset 16407 */
- "\xe9\xa0\x8b\0" /* offset 16412 */
- "\xe9\xa0\xa9\0" /* offset 16416 */
- "\xf0\xa9\x96\xb6\0" /* offset 16420 */
- "\xe9\xa3\xa2\0" /* offset 16425 */
- "\xe4\xac\xb3\0" /* offset 16429 */
- "\xe9\xa4\xa9\0" /* offset 16433 */
- "\xe9\xa6\xa7\0" /* offset 16437 */
- "\xe9\xa7\x82\0" /* offset 16441 */
- "\xe9\xa7\xbe\0" /* offset 16445 */
- "\xe4\xaf\x8e\0" /* offset 16449 */
- "\xf0\xa9\xac\xb0\0" /* offset 16453 */
- "\xe9\xac\x92\0" /* offset 16458 */
- "\xe9\xb1\x80\0" /* offset 16462 */
- "\xe9\xb3\xbd\0" /* offset 16466 */
- "\xe4\xb3\x8e\0" /* offset 16470 */
- "\xe4\xb3\xad\0" /* offset 16474 */
- "\xe9\xb5\xa7\0" /* offset 16478 */
- "\xf0\xaa\x83\x8e\0" /* offset 16482 */
- "\xe4\xb3\xb8\0" /* offset 16487 */
- "\xf0\xaa\x84\x85\0" /* offset 16491 */
- "\xf0\xaa\x88\x8e\0" /* offset 16496 */
- "\xf0\xaa\x8a\x91\0" /* offset 16501 */
- "\xe4\xb5\x96\0" /* offset 16506 */
- "\xe9\xbb\xbe\0" /* offset 16510 */
- "\xe9\xbc\x85\0" /* offset 16514 */
- "\xe9\xbc\x8f\0" /* offset 16518 */
- "\xe9\xbc\x96\0" /* offset 16522 */
- "\xf0\xaa\x98\x80\0" /* offset 16526 */;
-
-#endif /* DECOMP_H */
diff --git a/3rdParty/LibIDN/src/idn-int.h b/3rdParty/LibIDN/src/idn-int.h
deleted file mode 100644
index b63851b..0000000
--- a/3rdParty/LibIDN/src/idn-int.h
+++ /dev/null
@@ -1,527 +0,0 @@
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 2001-2002, 2004-2008 Free Software Foundation, Inc.
- Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
- This file is part of gnulib.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/*
- * ISO C 99 <stdint.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/stdint.h.html>
- */
-
-#ifndef _GL_STDINT_H
-
-/* When including a system file that in turn includes <inttypes.h>,
- use the system <inttypes.h>, not our substitute. This avoids
- problems with (for example) VMS, whose <sys/bitypes.h> includes
- <inttypes.h>. */
-#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* Get those types that are already defined in other system include
- files, so that we can "#define int8_t signed char" below without
- worrying about a later system include file containing a "typedef
- signed char int8_t;" that will get messed up by our macro. Our
- macros should all be consistent with the system versions, except
- for the "fast" types and macros, which we recommend against using
- in public interfaces due to compiler differences. */
-
-#if 1
-# if defined __sgi && ! defined __c99
- /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
- with "This header file is to be used only for c99 mode compilations"
- diagnostics. */
-# define __STDINT_H__
-# endif
- /* Other systems may have an incomplete or buggy <stdint.h>.
- Include it before <inttypes.h>, since any "#include <stdint.h>"
- in <inttypes.h> would reinclude us, skipping our contents because
- _GL_STDINT_H is defined.
- The include requires a split double-inclusion guard. */
-# if __GNUC__ >= 3
-#pragma GCC system_header
-# endif
-# include <stdint.h>
-#endif
-
-#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-#define _GL_STDINT_H
-
-/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
- IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
- AIX 5.2 <sys/types.h> isn't needed and causes troubles.
- MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
- relies on the system <stdint.h> definitions, so include
- <sys/types.h> after <stdint.h>. */
-#if 1 && ! defined _AIX
-# include <sys/types.h>
-#endif
-
-/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */
-#include <limits.h>
-
-#if 1
- /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
- int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
- <inttypes.h> also defines intptr_t and uintptr_t. */
-# include <inttypes.h>
-#elif 0
- /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
- the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */
-# include <sys/inttypes.h>
-#endif
-
-#if 0 && ! defined __BIT_TYPES_DEFINED__
- /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
- int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is
- included by <sys/types.h>. */
-# include <sys/bitypes.h>
-#endif
-
-#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
-
-/* Get WCHAR_MIN, WCHAR_MAX. */
-# if ! (defined WCHAR_MIN && defined WCHAR_MAX)
-/* We don't need WCHAR_* in libidn, so to avoid problems with
- missing wchar.h, don't include wchar.h here. */
-# endif
-
-#endif
-
-#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* Minimum and maximum values for a integer type under the usual assumption.
- Return an unspecified value if BITS == 0, adding a check to pacify
- picky compilers. */
-
-#define _STDINT_MIN(signed, bits, zero) \
- ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
-
-#define _STDINT_MAX(signed, bits, zero) \
- ((signed) \
- ? ~ _STDINT_MIN (signed, bits, zero) \
- : /* The expression for the unsigned case. The subtraction of (signed) \
- is a nop in the unsigned case and avoids "signed integer overflow" \
- warnings in the signed case. */ \
- ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
-
-/* 7.18.1.1. Exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
- types have 8, 16, 32, optionally 64 bits. */
-
-#undef int8_t
-#undef uint8_t
-#define int8_t signed char
-#define uint8_t unsigned char
-
-#undef int16_t
-#undef uint16_t
-#define int16_t short int
-#define uint16_t unsigned short int
-
-#undef int32_t
-#undef uint32_t
-#define int32_t int
-#define uint32_t unsigned int
-
-/* Do not undefine int64_t if gnulib is not being used with 64-bit
- types, since otherwise it breaks platforms like Tandem/NSK. */
-#if LONG_MAX >> 31 >> 31 == 1
-# undef int64_t
-# define int64_t long int
-# define GL_INT64_T
-#elif defined _MSC_VER
-# undef int64_t
-# define int64_t __int64
-# define GL_INT64_T
-#elif 1
-# undef int64_t
-# define int64_t long long int
-# define GL_INT64_T
-#endif
-
-#if ULONG_MAX >> 31 >> 31 >> 1 == 1
-# undef uint64_t
-# define uint64_t unsigned long int
-# define GL_UINT64_T
-#elif defined _MSC_VER
-# undef uint64_t
-# define uint64_t unsigned __int64
-# define GL_UINT64_T
-#elif 1
-# undef uint64_t
-# define uint64_t unsigned long long int
-# define GL_UINT64_T
-#endif
-
-/* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */
-#define _UINT8_T
-#define _UINT32_T
-#define _UINT64_T
-
-
-/* 7.18.1.2. Minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
- types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
- are the same as the corresponding N_t types. */
-
-#undef int_least8_t
-#undef uint_least8_t
-#undef int_least16_t
-#undef uint_least16_t
-#undef int_least32_t
-#undef uint_least32_t
-#undef int_least64_t
-#undef uint_least64_t
-#define int_least8_t int8_t
-#define uint_least8_t uint8_t
-#define int_least16_t int16_t
-#define uint_least16_t uint16_t
-#define int_least32_t int32_t
-#define uint_least32_t uint32_t
-#ifdef GL_INT64_T
-# define int_least64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_least64_t uint64_t
-#endif
-
-/* 7.18.1.3. Fastest minimum-width integer types */
-
-/* Note: Other <stdint.h> substitutes may define these types differently.
- It is not recommended to use these types in public header files. */
-
-/* Here we assume a standard architecture where the hardware integer
- types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
- are taken from the same list of types. Assume that 'long int'
- is fast enough for all narrower integers. */
-
-#undef int_fast8_t
-#undef uint_fast8_t
-#undef int_fast16_t
-#undef uint_fast16_t
-#undef int_fast32_t
-#undef uint_fast32_t
-#undef int_fast64_t
-#undef uint_fast64_t
-#define int_fast8_t long int
-#define uint_fast8_t unsigned int_fast8_t
-#define int_fast16_t long int
-#define uint_fast16_t unsigned int_fast16_t
-#define int_fast32_t long int
-#define uint_fast32_t unsigned int_fast32_t
-#ifdef GL_INT64_T
-# define int_fast64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_fast64_t uint64_t
-#endif
-
-/* 7.18.1.4. Integer types capable of holding object pointers */
-
-#undef intptr_t
-#undef uintptr_t
-#define intptr_t long int
-#define uintptr_t unsigned long int
-
-/* 7.18.1.5. Greatest-width integer types */
-
-/* Note: These types are compiler dependent. It may be unwise to use them in
- public header files. */
-
-#undef intmax_t
-#if 1 && LONG_MAX >> 30 == 1
-# define intmax_t long long int
-#elif defined GL_INT64_T
-# define intmax_t int64_t
-#else
-# define intmax_t long int
-#endif
-
-#undef uintmax_t
-#if 1 && ULONG_MAX >> 31 == 1
-# define uintmax_t unsigned long long int
-#elif defined GL_UINT64_T
-# define uintmax_t uint64_t
-#else
-# define uintmax_t unsigned long int
-#endif
-
-/* Verify that intmax_t and uintmax_t have the same size. Too much code
- breaks if this is not the case. If this check fails, the reason is likely
- to be found in the autoconf macros. */
-typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1];
-
-/* 7.18.2. Limits of specified-width integer types */
-
-#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS
-
-/* 7.18.2.1. Limits of exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
- types have 8, 16, 32, optionally 64 bits. */
-
-#undef INT8_MIN
-#undef INT8_MAX
-#undef UINT8_MAX
-#define INT8_MIN (~ INT8_MAX)
-#define INT8_MAX 127
-#define UINT8_MAX 255
-
-#undef INT16_MIN
-#undef INT16_MAX
-#undef UINT16_MAX
-#define INT16_MIN (~ INT16_MAX)
-#define INT16_MAX 32767
-#define UINT16_MAX 65535
-
-#undef INT32_MIN
-#undef INT32_MAX
-#undef UINT32_MAX
-#define INT32_MIN (~ INT32_MAX)
-#define INT32_MAX 2147483647
-#define UINT32_MAX 4294967295U
-
-#undef INT64_MIN
-#undef INT64_MAX
-#ifdef GL_INT64_T
-/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
- evaluates the latter incorrectly in preprocessor expressions. */
-# define INT64_MIN (- INTMAX_C (1) << 63)
-# define INT64_MAX INTMAX_C (9223372036854775807)
-#endif
-
-#undef UINT64_MAX
-#ifdef GL_UINT64_T
-# define UINT64_MAX UINTMAX_C (18446744073709551615)
-#endif
-
-/* 7.18.2.2. Limits of minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
- types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
- are the same as the corresponding N_t types. */
-
-#undef INT_LEAST8_MIN
-#undef INT_LEAST8_MAX
-#undef UINT_LEAST8_MAX
-#define INT_LEAST8_MIN INT8_MIN
-#define INT_LEAST8_MAX INT8_MAX
-#define UINT_LEAST8_MAX UINT8_MAX
-
-#undef INT_LEAST16_MIN
-#undef INT_LEAST16_MAX
-#undef UINT_LEAST16_MAX
-#define INT_LEAST16_MIN INT16_MIN
-#define INT_LEAST16_MAX INT16_MAX
-#define UINT_LEAST16_MAX UINT16_MAX
-
-#undef INT_LEAST32_MIN
-#undef INT_LEAST32_MAX
-#undef UINT_LEAST32_MAX
-#define INT_LEAST32_MIN INT32_MIN
-#define INT_LEAST32_MAX INT32_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-
-#undef INT_LEAST64_MIN
-#undef INT_LEAST64_MAX
-#ifdef GL_INT64_T
-# define INT_LEAST64_MIN INT64_MIN
-# define INT_LEAST64_MAX INT64_MAX
-#endif
-
-#undef UINT_LEAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_LEAST64_MAX UINT64_MAX
-#endif
-
-/* 7.18.2.3. Limits of fastest minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
- types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
- are taken from the same list of types. */
-
-#undef INT_FAST8_MIN
-#undef INT_FAST8_MAX
-#undef UINT_FAST8_MAX
-#define INT_FAST8_MIN LONG_MIN
-#define INT_FAST8_MAX LONG_MAX
-#define UINT_FAST8_MAX ULONG_MAX
-
-#undef INT_FAST16_MIN
-#undef INT_FAST16_MAX
-#undef UINT_FAST16_MAX
-#define INT_FAST16_MIN LONG_MIN
-#define INT_FAST16_MAX LONG_MAX
-#define UINT_FAST16_MAX ULONG_MAX
-
-#undef INT_FAST32_MIN
-#undef INT_FAST32_MAX
-#undef UINT_FAST32_MAX
-#define INT_FAST32_MIN LONG_MIN
-#define INT_FAST32_MAX LONG_MAX
-#define UINT_FAST32_MAX ULONG_MAX
-
-#undef INT_FAST64_MIN
-#undef INT_FAST64_MAX
-#ifdef GL_INT64_T
-# define INT_FAST64_MIN INT64_MIN
-# define INT_FAST64_MAX INT64_MAX
-#endif
-
-#undef UINT_FAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_FAST64_MAX UINT64_MAX
-#endif
-
-/* 7.18.2.4. Limits of integer types capable of holding object pointers */
-
-#undef INTPTR_MIN
-#undef INTPTR_MAX
-#undef UINTPTR_MAX
-#define INTPTR_MIN LONG_MIN
-#define INTPTR_MAX LONG_MAX
-#define UINTPTR_MAX ULONG_MAX
-
-/* 7.18.2.5. Limits of greatest-width integer types */
-
-#undef INTMAX_MIN
-#undef INTMAX_MAX
-#ifdef INT64_MAX
-# define INTMAX_MIN INT64_MIN
-# define INTMAX_MAX INT64_MAX
-#else
-# define INTMAX_MIN INT32_MIN
-# define INTMAX_MAX INT32_MAX
-#endif
-
-#undef UINTMAX_MAX
-#ifdef UINT64_MAX
-# define UINTMAX_MAX UINT64_MAX
-#else
-# define UINTMAX_MAX UINT32_MAX
-#endif
-
-/* 7.18.3. Limits of other integer types */
-
-/* ptrdiff_t limits */
-#undef PTRDIFF_MIN
-#undef PTRDIFF_MAX
-#define PTRDIFF_MIN \
- _STDINT_MIN (1, 32, 0)
-#define PTRDIFF_MAX \
- _STDINT_MAX (1, 32, 0)
-
-/* sig_atomic_t limits */
-#undef SIG_ATOMIC_MIN
-#undef SIG_ATOMIC_MAX
-#define SIG_ATOMIC_MIN \
- _STDINT_MIN (1, 32, \
- 0)
-#define SIG_ATOMIC_MAX \
- _STDINT_MAX (1, 32, \
- 0)
-
-
-/* size_t limit */
-#undef SIZE_MAX
-#define SIZE_MAX _STDINT_MAX (0, 32, 0ul)
-
-/* wchar_t limits */
-#undef WCHAR_MIN
-#undef WCHAR_MAX
-#define WCHAR_MIN \
- _STDINT_MIN (1, 32, 0)
-#define WCHAR_MAX \
- _STDINT_MAX (1, 32, 0)
-
-/* wint_t limits */
-#undef WINT_MIN
-#undef WINT_MAX
-#define WINT_MIN \
- _STDINT_MIN (1, 32, 0)
-#define WINT_MAX \
- _STDINT_MAX (1, 32, 0)
-
-#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */
-
-/* 7.18.4. Macros for integer constants */
-
-#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
-
-/* 7.18.4.1. Macros for minimum-width integer constants */
-/* According to ISO C 99 Technical Corrigendum 1 */
-
-/* Here we assume a standard architecture where the hardware integer
- types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */
-
-#undef INT8_C
-#undef UINT8_C
-#define INT8_C(x) x
-#define UINT8_C(x) x
-
-#undef INT16_C
-#undef UINT16_C
-#define INT16_C(x) x
-#define UINT16_C(x) x
-
-#undef INT32_C
-#undef UINT32_C
-#define INT32_C(x) x
-#define UINT32_C(x) x ## U
-
-#undef INT64_C
-#undef UINT64_C
-#if LONG_MAX >> 31 >> 31 == 1
-# define INT64_C(x) x##L
-#elif defined _MSC_VER
-# define INT64_C(x) x##i64
-#elif 1
-# define INT64_C(x) x##LL
-#endif
-#if ULONG_MAX >> 31 >> 31 >> 1 == 1
-# define UINT64_C(x) x##UL
-#elif defined _MSC_VER
-# define UINT64_C(x) x##ui64
-#elif 1
-# define UINT64_C(x) x##ULL
-#endif
-
-/* 7.18.4.2. Macros for greatest-width integer constants */
-
-#undef INTMAX_C
-#if 1 && LONG_MAX >> 30 == 1
-# define INTMAX_C(x) x##LL
-#elif defined GL_INT64_T
-# define INTMAX_C(x) INT64_C(x)
-#else
-# define INTMAX_C(x) x##L
-#endif
-
-#undef UINTMAX_C
-#if 1 && ULONG_MAX >> 31 == 1
-# define UINTMAX_C(x) x##ULL
-#elif defined GL_UINT64_T
-# define UINTMAX_C(x) UINT64_C(x)
-#else
-# define UINTMAX_C(x) x##UL
-#endif
-
-#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
-
-#endif /* _GL_STDINT_H */
-#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/3rdParty/LibIDN/src/idna.c b/3rdParty/LibIDN/src/idna.c
deleted file mode 100644
index 8061086..0000000
--- a/3rdParty/LibIDN/src/idna.c
+++ /dev/null
@@ -1,846 +0,0 @@
-/* idna.c --- Convert to or from IDN strings.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <stringprep.h>
-#include <punycode.h>
-
-#include "idna.h"
-
-#define DOTP(c) ((c) == 0x002E || (c) == 0x3002 || \
- (c) == 0xFF0E || (c) == 0xFF61)
-
-/* Core functions */
-
-/**
- * idna_to_ascii_4i - convert Unicode domain name label to text
- * @in: input array with unicode code points.
- * @inlen: length of input array with unicode code points.
- * @out: output zero terminated string that must have room for at
- * least 63 characters plus the terminating zero.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * The ToASCII operation takes a sequence of Unicode code points that
- * make up one domain label and transforms it into a sequence of code
- * points in the ASCII range (0..7F). If ToASCII succeeds, the
- * original sequence and the resulting sequence are equivalent labels.
- *
- * It is important to note that the ToASCII operation can fail. ToASCII
- * fails if any step of it fails. If any step of the ToASCII operation
- * fails on any label in a domain name, that domain name MUST NOT be used
- * as an internationalized domain name. The method for deadling with this
- * failure is application-specific.
- *
- * The inputs to ToASCII are a sequence of code points, the AllowUnassigned
- * flag, and the UseSTD3ASCIIRules flag. The output of ToASCII is either a
- * sequence of ASCII code points or a failure condition.
- *
- * ToASCII never alters a sequence of code points that are all in the ASCII
- * range to begin with (although it could fail). Applying the ToASCII
- * operation multiple times has exactly the same effect as applying it just
- * once.
- *
- * Return value: Returns 0 on success, or an #Idna_rc error code.
- */
-int
-idna_to_ascii_4i (const uint32_t * in, size_t inlen, char *out, int flags)
-{
- size_t len, outlen;
- uint32_t *src; /* XXX don't need to copy data? */
- int rc;
-
- /*
- * ToASCII consists of the following steps:
- *
- * 1. If all code points in the sequence are in the ASCII range (0..7F)
- * then skip to step 3.
- */
-
- {
- size_t i;
- int inasciirange;
-
- inasciirange = 1;
- for (i = 0; i < inlen; i++)
- if (in[i] > 0x7F)
- inasciirange = 0;
- if (inasciirange)
- {
- src = malloc (sizeof (in[0]) * (inlen + 1));
- if (src == NULL)
- return IDNA_MALLOC_ERROR;
-
- memcpy (src, in, sizeof (in[0]) * inlen);
- src[inlen] = 0;
-
- goto step3;
- }
- }
-
- /*
- * 2. Perform the steps specified in [NAMEPREP] and fail if there is
- * an error. The AllowUnassigned flag is used in [NAMEPREP].
- */
-
- {
- char *p;
-
- p = stringprep_ucs4_to_utf8 (in, inlen, NULL, NULL);
- if (p == NULL)
- return IDNA_MALLOC_ERROR;
-
- len = strlen (p);
- do
- {
- char *newp;
-
- len = 2 * len + 10; /* XXX better guess? */
- newp = realloc (p, len);
- if (newp == NULL)
- {
- free (p);
- return IDNA_MALLOC_ERROR;
- }
- p = newp;
-
- if (flags & IDNA_ALLOW_UNASSIGNED)
- rc = stringprep_nameprep (p, len);
- else
- rc = stringprep_nameprep_no_unassigned (p, len);
- }
- while (rc == STRINGPREP_TOO_SMALL_BUFFER);
-
- if (rc != STRINGPREP_OK)
- {
- free (p);
- return IDNA_STRINGPREP_ERROR;
- }
-
- src = stringprep_utf8_to_ucs4 (p, -1, NULL);
-
- free (p);
- }
-
-step3:
- /*
- * 3. If the UseSTD3ASCIIRules flag is set, then perform these checks:
- *
- * (a) Verify the absence of non-LDH ASCII code points; that is,
- * the absence of 0..2C, 2E..2F, 3A..40, 5B..60, and 7B..7F.
- *
- * (b) Verify the absence of leading and trailing hyphen-minus;
- * that is, the absence of U+002D at the beginning and end of
- * the sequence.
- */
-
- if (flags & IDNA_USE_STD3_ASCII_RULES)
- {
- size_t i;
-
- for (i = 0; src[i]; i++)
- if (src[i] <= 0x2C || src[i] == 0x2E || src[i] == 0x2F ||
- (src[i] >= 0x3A && src[i] <= 0x40) ||
- (src[i] >= 0x5B && src[i] <= 0x60) ||
- (src[i] >= 0x7B && src[i] <= 0x7F))
- {
- free (src);
- return IDNA_CONTAINS_NON_LDH;
- }
-
- if (src[0] == 0x002D || (i > 0 && src[i - 1] == 0x002D))
- {
- free (src);
- return IDNA_CONTAINS_MINUS;
- }
- }
-
- /*
- * 4. If all code points in the sequence are in the ASCII range
- * (0..7F), then skip to step 8.
- */
-
- {
- size_t i;
- int inasciirange;
-
- inasciirange = 1;
- for (i = 0; src[i]; i++)
- {
- if (src[i] > 0x7F)
- inasciirange = 0;
- /* copy string to output buffer if we are about to skip to step8 */
- if (i < 64)
- out[i] = src[i];
- }
- if (i < 64)
- out[i] = '\0';
- if (inasciirange)
- goto step8;
- }
-
- /*
- * 5. Verify that the sequence does NOT begin with the ACE prefix.
- *
- */
-
- {
- size_t i;
- int match;
-
- match = 1;
- for (i = 0; match && i < strlen (IDNA_ACE_PREFIX); i++)
- if (((uint32_t) IDNA_ACE_PREFIX[i] & 0xFF) != src[i])
- match = 0;
- if (match)
- {
- free (src);
- return IDNA_CONTAINS_ACE_PREFIX;
- }
- }
-
- /*
- * 6. Encode the sequence using the encoding algorithm in [PUNYCODE]
- * and fail if there is an error.
- */
- for (len = 0; src[len]; len++)
- ;
- src[len] = '\0';
- outlen = 63 - strlen (IDNA_ACE_PREFIX);
- rc = punycode_encode (len, src, NULL,
- &outlen, &out[strlen (IDNA_ACE_PREFIX)]);
- if (rc != PUNYCODE_SUCCESS)
- {
- free (src);
- return IDNA_PUNYCODE_ERROR;
- }
- out[strlen (IDNA_ACE_PREFIX) + outlen] = '\0';
-
- /*
- * 7. Prepend the ACE prefix.
- */
-
- memcpy (out, IDNA_ACE_PREFIX, strlen (IDNA_ACE_PREFIX));
-
- /*
- * 8. Verify that the number of code points is in the range 1 to 63
- * inclusive (0 is excluded).
- */
-
-step8:
- free (src);
- if (strlen (out) < 1 || strlen (out) > 63)
- return IDNA_INVALID_LENGTH;
-
- return IDNA_SUCCESS;
-}
-
-/* ToUnicode(). May realloc() utf8in. Will free utf8in unconditionally. */
-static int
-idna_to_unicode_internal (char *utf8in,
- uint32_t * out, size_t * outlen, int flags)
-{
- int rc;
- char tmpout[64];
- size_t utf8len = strlen (utf8in) + 1;
- size_t addlen = 0;
-
- /*
- * ToUnicode consists of the following steps:
- *
- * 1. If the sequence contains any code points outside the ASCII range
- * (0..7F) then proceed to step 2, otherwise skip to step 3.
- */
-
- {
- size_t i;
- int inasciirange;
-
- inasciirange = 1;
- for (i = 0; utf8in[i]; i++)
- if (utf8in[i] & ~0x7F)
- inasciirange = 0;
- if (inasciirange)
- goto step3;
- }
-
- /*
- * 2. Perform the steps specified in [NAMEPREP] and fail if there is an
- * error. (If step 3 of ToASCII is also performed here, it will not
- * affect the overall behavior of ToUnicode, but it is not
- * necessary.) The AllowUnassigned flag is used in [NAMEPREP].
- */
- do
- {
- char *newp = realloc (utf8in, utf8len + addlen);
- if (newp == NULL)
- {
- free (utf8in);
- return IDNA_MALLOC_ERROR;
- }
- utf8in = newp;
- if (flags & IDNA_ALLOW_UNASSIGNED)
- rc = stringprep_nameprep (utf8in, utf8len + addlen);
- else
- rc = stringprep_nameprep_no_unassigned (utf8in, utf8len + addlen);
- addlen += 1;
- }
- while (rc == STRINGPREP_TOO_SMALL_BUFFER);
-
- if (rc != STRINGPREP_OK)
- {
- free (utf8in);
- return IDNA_STRINGPREP_ERROR;
- }
-
- /* 3. Verify that the sequence begins with the ACE prefix, and save a
- * copy of the sequence.
- */
-
-step3:
- if (memcmp (IDNA_ACE_PREFIX, utf8in, strlen (IDNA_ACE_PREFIX)) != 0)
- {
- free (utf8in);
- return IDNA_NO_ACE_PREFIX;
- }
-
- /* 4. Remove the ACE prefix.
- */
-
- memmove (utf8in, &utf8in[strlen (IDNA_ACE_PREFIX)],
- strlen (utf8in) - strlen (IDNA_ACE_PREFIX) + 1);
-
- /* 5. Decode the sequence using the decoding algorithm in [PUNYCODE]
- * and fail if there is an error. Save a copy of the result of
- * this step.
- */
-
- (*outlen)--; /* reserve one for the zero */
-
- rc = punycode_decode (strlen (utf8in), utf8in, outlen, out, NULL);
- if (rc != PUNYCODE_SUCCESS)
- {
- free (utf8in);
- return IDNA_PUNYCODE_ERROR;
- }
-
- out[*outlen] = 0; /* add zero */
-
- /* 6. Apply ToASCII.
- */
-
- rc = idna_to_ascii_4i (out, *outlen, tmpout, flags);
- if (rc != IDNA_SUCCESS)
- {
- free (utf8in);
- return rc;
- }
-
- /* 7. Verify that the result of step 6 matches the saved copy from
- * step 3, using a case-insensitive ASCII comparison.
- */
-
- if (strcasecmp (utf8in, tmpout + strlen (IDNA_ACE_PREFIX)) != 0)
- {
- free (utf8in);
- return IDNA_ROUNDTRIP_VERIFY_ERROR;
- }
-
- /* 8. Return the saved copy from step 5.
- */
-
- free (utf8in);
- return IDNA_SUCCESS;
-}
-
-/**
- * idna_to_unicode_44i - convert domain name label to Unicode
- * @in: input array with unicode code points.
- * @inlen: length of input array with unicode code points.
- * @out: output array with unicode code points.
- * @outlen: on input, maximum size of output array with unicode code points,
- * on exit, actual size of output array with unicode code points.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * The ToUnicode operation takes a sequence of Unicode code points
- * that make up one domain label and returns a sequence of Unicode
- * code points. If the input sequence is a label in ACE form, then the
- * result is an equivalent internationalized label that is not in ACE
- * form, otherwise the original sequence is returned unaltered.
- *
- * ToUnicode never fails. If any step fails, then the original input
- * sequence is returned immediately in that step.
- *
- * The Punycode decoder can never output more code points than it
- * inputs, but Nameprep can, and therefore ToUnicode can. Note that
- * the number of octets needed to represent a sequence of code points
- * depends on the particular character encoding used.
- *
- * The inputs to ToUnicode are a sequence of code points, the
- * AllowUnassigned flag, and the UseSTD3ASCIIRules flag. The output of
- * ToUnicode is always a sequence of Unicode code points.
- *
- * Return value: Returns #Idna_rc error condition, but it must only be
- * used for debugging purposes. The output buffer is always
- * guaranteed to contain the correct data according to the
- * specification (sans malloc induced errors). NB! This means that
- * you normally ignore the return code from this function, as
- * checking it means breaking the standard.
- */
-int
-idna_to_unicode_44i (const uint32_t * in, size_t inlen,
- uint32_t * out, size_t * outlen, int flags)
-{
- int rc;
- size_t outlensave = *outlen;
- char *p;
-
- p = stringprep_ucs4_to_utf8 (in, inlen, NULL, NULL);
- if (p == NULL)
- return IDNA_MALLOC_ERROR;
-
- rc = idna_to_unicode_internal (p, out, outlen, flags);
- if (rc != IDNA_SUCCESS)
- {
- memcpy (out, in, sizeof (in[0]) * (inlen < outlensave ?
- inlen : outlensave));
- *outlen = inlen;
- }
-
- /* p is freed in idna_to_unicode_internal. */
-
- return rc;
-}
-
-/* Wrappers that handle several labels */
-
-/**
- * idna_to_ascii_4z - convert Unicode domain name to text
- * @input: zero terminated input Unicode string.
- * @output: pointer to newly allocated output string.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * Convert UCS-4 domain name to ASCII string. The domain name may
- * contain several labels, separated by dots. The output buffer must
- * be deallocated by the caller.
- *
- * Return value: Returns %IDNA_SUCCESS on success, or error code.
- **/
-int
-idna_to_ascii_4z (const uint32_t * input, char **output, int flags)
-{
- const uint32_t *start = input;
- const uint32_t *end = input;
- char buf[64];
- char *out = NULL;
- int rc;
-
- /* 1) Whenever dots are used as label separators, the following
- characters MUST be recognized as dots: U+002E (full stop),
- U+3002 (ideographic full stop), U+FF0E (fullwidth full stop),
- U+FF61 (halfwidth ideographic full stop). */
-
- if (input[0] == 0)
- {
- /* Handle implicit zero-length root label. */
- *output = malloc (1);
- if (!*output)
- return IDNA_MALLOC_ERROR;
- strcpy (*output, "");
- return IDNA_SUCCESS;
- }
-
- if (DOTP (input[0]) && input[1] == 0)
- {
- /* Handle explicit zero-length root label. */
- *output = malloc (2);
- if (!*output)
- return IDNA_MALLOC_ERROR;
- strcpy (*output, ".");
- return IDNA_SUCCESS;
- }
-
- *output = NULL;
- do
- {
- end = start;
-
- for (; *end && !DOTP (*end); end++)
- ;
-
- if (*end == '\0' && start == end)
- {
- /* Handle explicit zero-length root label. */
- buf[0] = '\0';
- }
- else
- {
- rc = idna_to_ascii_4i (start, end - start, buf, flags);
- if (rc != IDNA_SUCCESS)
- return rc;
- }
-
- if (out)
- {
- char *newp = realloc (out, strlen (out) + 1 + strlen (buf) + 1);
- if (!newp)
- {
- free (out);
- return IDNA_MALLOC_ERROR;
- }
- out = newp;
- strcat (out, ".");
- strcat (out, buf);
- }
- else
- {
- out = (char *) malloc (strlen (buf) + 1);
- if (!out)
- return IDNA_MALLOC_ERROR;
- strcpy (out, buf);
- }
-
- start = end + 1;
- }
- while (*end);
-
- *output = out;
-
- return IDNA_SUCCESS;
-}
-
-/**
- * idna_to_ascii_8z - convert Unicode domain name to text
- * @input: zero terminated input UTF-8 string.
- * @output: pointer to newly allocated output string.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * Convert UTF-8 domain name to ASCII string. The domain name may
- * contain several labels, separated by dots. The output buffer must
- * be deallocated by the caller.
- *
- * Return value: Returns %IDNA_SUCCESS on success, or error code.
- **/
-int
-idna_to_ascii_8z (const char *input, char **output, int flags)
-{
- uint32_t *ucs4;
- size_t ucs4len;
- int rc;
-
- ucs4 = stringprep_utf8_to_ucs4 (input, -1, &ucs4len);
- if (!ucs4)
- return IDNA_ICONV_ERROR;
-
- rc = idna_to_ascii_4z (ucs4, output, flags);
-
- free (ucs4);
-
- return rc;
-
-}
-
-/**
- * idna_to_ascii_lz - convert Unicode domain name to text
- * @input: zero terminated input string encoded in the current locale's
- * character set.
- * @output: pointer to newly allocated output string.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * Convert domain name in the locale's encoding to ASCII string. The
- * domain name may contain several labels, separated by dots. The
- * output buffer must be deallocated by the caller.
- *
- * Return value: Returns %IDNA_SUCCESS on success, or error code.
- **/
-int
-idna_to_ascii_lz (const char *input, char **output, int flags)
-{
- char *utf8;
- int rc;
-
- utf8 = stringprep_locale_to_utf8 (input);
- if (!utf8)
- return IDNA_ICONV_ERROR;
-
- rc = idna_to_ascii_8z (utf8, output, flags);
-
- free (utf8);
-
- return rc;
-}
-
-/**
- * idna_to_unicode_4z4z - convert domain name to Unicode
- * @input: zero-terminated Unicode string.
- * @output: pointer to newly allocated output Unicode string.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * Convert possibly ACE encoded domain name in UCS-4 format into a
- * UCS-4 string. The domain name may contain several labels,
- * separated by dots. The output buffer must be deallocated by the
- * caller.
- *
- * Return value: Returns %IDNA_SUCCESS on success, or error code.
- **/
-int
-idna_to_unicode_4z4z (const uint32_t * input, uint32_t ** output, int flags)
-{
- const uint32_t *start = input;
- const uint32_t *end = input;
- uint32_t *buf;
- size_t buflen;
- uint32_t *out = NULL;
- size_t outlen = 0;
- int rc;
-
- *output = NULL;
-
- do
- {
- end = start;
-
- for (; *end && !DOTP (*end); end++)
- ;
-
- buflen = end - start;
- buf = malloc (sizeof (buf[0]) * (buflen + 1));
- if (!buf)
- return IDNA_MALLOC_ERROR;
-
- rc = idna_to_unicode_44i (start, end - start, buf, &buflen, flags);
- /* don't check rc as per specification! */
-
- if (out)
- {
- uint32_t *newp = realloc (out,
- sizeof (out[0])
- * (outlen + 1 + buflen + 1));
- if (!newp)
- {
- free (buf);
- free (out);
- return IDNA_MALLOC_ERROR;
- }
- out = newp;
- out[outlen++] = 0x002E; /* '.' (full stop) */
- memcpy (out + outlen, buf, sizeof (buf[0]) * buflen);
- outlen += buflen;
- out[outlen] = 0x0;
- free (buf);
- }
- else
- {
- out = buf;
- outlen = buflen;
- out[outlen] = 0x0;
- }
-
- start = end + 1;
- }
- while (*end);
-
- *output = out;
-
- return IDNA_SUCCESS;
-}
-
-/**
- * idna_to_unicode_8z4z - convert domain name to Unicode
- * @input: zero-terminated UTF-8 string.
- * @output: pointer to newly allocated output Unicode string.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * Convert possibly ACE encoded domain name in UTF-8 format into a
- * UCS-4 string. The domain name may contain several labels,
- * separated by dots. The output buffer must be deallocated by the
- * caller.
- *
- * Return value: Returns %IDNA_SUCCESS on success, or error code.
- **/
-int
-idna_to_unicode_8z4z (const char *input, uint32_t ** output, int flags)
-{
- uint32_t *ucs4;
- size_t ucs4len;
- int rc;
-
- ucs4 = stringprep_utf8_to_ucs4 (input, -1, &ucs4len);
- if (!ucs4)
- return IDNA_ICONV_ERROR;
-
- rc = idna_to_unicode_4z4z (ucs4, output, flags);
- free (ucs4);
-
- return rc;
-}
-
-/**
- * idna_to_unicode_8z8z - convert domain name to Unicode
- * @input: zero-terminated UTF-8 string.
- * @output: pointer to newly allocated output UTF-8 string.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * Convert possibly ACE encoded domain name in UTF-8 format into a
- * UTF-8 string. The domain name may contain several labels,
- * separated by dots. The output buffer must be deallocated by the
- * caller.
- *
- * Return value: Returns %IDNA_SUCCESS on success, or error code.
- **/
-int
-idna_to_unicode_8z8z (const char *input, char **output, int flags)
-{
- uint32_t *ucs4;
- int rc;
-
- rc = idna_to_unicode_8z4z (input, &ucs4, flags);
- *output = stringprep_ucs4_to_utf8 (ucs4, -1, NULL, NULL);
- free (ucs4);
-
- if (!*output)
- return IDNA_ICONV_ERROR;
-
- return rc;
-}
-
-/**
- * idna_to_unicode_8zlz - convert domain name to Unicode
- * @input: zero-terminated UTF-8 string.
- * @output: pointer to newly allocated output string encoded in the
- * current locale's character set.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * Convert possibly ACE encoded domain name in UTF-8 format into a
- * string encoded in the current locale's character set. The domain
- * name may contain several labels, separated by dots. The output
- * buffer must be deallocated by the caller.
- *
- * Return value: Returns %IDNA_SUCCESS on success, or error code.
- **/
-int
-idna_to_unicode_8zlz (const char *input, char **output, int flags)
-{
- char *utf8;
- int rc;
-
- rc = idna_to_unicode_8z8z (input, &utf8, flags);
- *output = stringprep_utf8_to_locale (utf8);
- free (utf8);
-
- if (!*output)
- return IDNA_ICONV_ERROR;
-
- return rc;
-}
-
-/**
- * idna_to_unicode_lzlz - convert domain name to Unicode
- * @input: zero-terminated string encoded in the current locale's
- * character set.
- * @output: pointer to newly allocated output string encoded in the
- * current locale's character set.
- * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
- * %IDNA_USE_STD3_ASCII_RULES.
- *
- * Convert possibly ACE encoded domain name in the locale's character
- * set into a string encoded in the current locale's character set.
- * The domain name may contain several labels, separated by dots. The
- * output buffer must be deallocated by the caller.
- *
- * Return value: Returns %IDNA_SUCCESS on success, or error code.
- **/
-int
-idna_to_unicode_lzlz (const char *input, char **output, int flags)
-{
- char *utf8;
- int rc;
-
- utf8 = stringprep_locale_to_utf8 (input);
- if (!utf8)
- return IDNA_ICONV_ERROR;
-
- rc = idna_to_unicode_8zlz (utf8, output, flags);
- free (utf8);
-
- return rc;
-}
-
-/**
- * IDNA_ACE_PREFIX
- *
- * The IANA allocated prefix to use for IDNA. "xn--"
- */
-
-/**
- * Idna_rc:
- * @IDNA_SUCCESS: Successful operation. This value is guaranteed to
- * always be zero, the remaining ones are only guaranteed to hold
- * non-zero values, for logical comparison purposes.
- * @IDNA_STRINGPREP_ERROR: Error during string preparation.
- * @IDNA_PUNYCODE_ERROR: Error during punycode operation.
- * @IDNA_CONTAINS_NON_LDH: For IDNA_USE_STD3_ASCII_RULES, indicate that
- * the string contains non-LDH ASCII characters.
- * @IDNA_CONTAINS_MINUS: For IDNA_USE_STD3_ASCII_RULES, indicate that
- * the string contains a leading or trailing hyphen-minus (U+002D).
- * @IDNA_INVALID_LENGTH: The final output string is not within the
- * (inclusive) range 1 to 63 characters.
- * @IDNA_NO_ACE_PREFIX: The string does not contain the ACE prefix
- * (for ToUnicode).
- * @IDNA_ROUNDTRIP_VERIFY_ERROR: The ToASCII operation on output
- * string does not equal the input.
- * @IDNA_CONTAINS_ACE_PREFIX: The input contains the ACE prefix (for
- * ToASCII).
- * @IDNA_ICONV_ERROR: Could not convert string in locale encoding.
- * @IDNA_MALLOC_ERROR: Could not allocate buffer (this is typically a
- * fatal error).
- * @IDNA_DLOPEN_ERROR: Could not dlopen the libcidn DSO (only used
- * internally in libc).
- *
- * Enumerated return codes of idna_to_ascii_4i(),
- * idna_to_unicode_44i() functions (and functions derived from those
- * functions). The value 0 is guaranteed to always correspond to
- * success.
- */
-
-
-/**
- * Idna_flags:
- * @IDNA_ALLOW_UNASSIGNED: Don't reject strings containing unassigned
- * Unicode code points.
- * @IDNA_USE_STD3_ASCII_RULES: Validate strings according to STD3
- * rules (i.e., normal host name rules).
- *
- * Flags to pass to idna_to_ascii_4i(), idna_to_unicode_44i() etc.
- */
diff --git a/3rdParty/LibIDN/src/idna.h b/3rdParty/LibIDN/src/idna.h
deleted file mode 100644
index f6b24ac..0000000
--- a/3rdParty/LibIDN/src/idna.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* idna.h --- Declarations for Internationalized Domain Name in Applications.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#ifndef _IDNA_H
-# define _IDNA_H
-
-# ifdef __cplusplus
-extern "C"
-{
-# endif
-
-# include <stddef.h> /* size_t */
-# include <idn-int.h> /* uint32_t */
-
- /* Error codes. */
- typedef enum
- {
- IDNA_SUCCESS = 0,
- IDNA_STRINGPREP_ERROR = 1,
- IDNA_PUNYCODE_ERROR = 2,
- IDNA_CONTAINS_NON_LDH = 3,
- /* Workaround typo in earlier versions. */
- IDNA_CONTAINS_LDH = IDNA_CONTAINS_NON_LDH,
- IDNA_CONTAINS_MINUS = 4,
- IDNA_INVALID_LENGTH = 5,
- IDNA_NO_ACE_PREFIX = 6,
- IDNA_ROUNDTRIP_VERIFY_ERROR = 7,
- IDNA_CONTAINS_ACE_PREFIX = 8,
- IDNA_ICONV_ERROR = 9,
- /* Internal errors. */
- IDNA_MALLOC_ERROR = 201,
- IDNA_DLOPEN_ERROR = 202
- } Idna_rc;
-
- /* IDNA flags */
- typedef enum
- {
- IDNA_ALLOW_UNASSIGNED = 0x0001,
- IDNA_USE_STD3_ASCII_RULES = 0x0002
- } Idna_flags;
-
-# ifndef IDNA_ACE_PREFIX
-# define IDNA_ACE_PREFIX "xn--"
-# endif
-
- extern const char *idna_strerror (Idna_rc rc);
-
- /* Core functions */
- extern int idna_to_ascii_4i (const uint32_t * in, size_t inlen,
- char *out, int flags);
- extern int idna_to_unicode_44i (const uint32_t * in, size_t inlen,
- uint32_t * out, size_t * outlen, int flags);
-
- /* Wrappers that handle several labels */
-
- extern int idna_to_ascii_4z (const uint32_t * input,
- char **output, int flags);
-
- extern int idna_to_ascii_8z (const char *input, char **output, int flags);
-
- extern int idna_to_ascii_lz (const char *input, char **output, int flags);
-
-
- extern int idna_to_unicode_4z4z (const uint32_t * input,
- uint32_t ** output, int flags);
-
- extern int idna_to_unicode_8z4z (const char *input,
- uint32_t ** output, int flags);
-
- extern int idna_to_unicode_8z8z (const char *input,
- char **output, int flags);
-
- extern int idna_to_unicode_8zlz (const char *input,
- char **output, int flags);
-
- extern int idna_to_unicode_lzlz (const char *input,
- char **output, int flags);
-
-# ifdef __cplusplus
-}
-# endif
-#endif /* _IDNA_H */
diff --git a/3rdParty/LibIDN/src/nfkc.c b/3rdParty/LibIDN/src/nfkc.c
deleted file mode 100644
index 621f749..0000000
--- a/3rdParty/LibIDN/src/nfkc.c
+++ /dev/null
@@ -1,1058 +0,0 @@
-/* nfkc.c --- Unicode normalization utilities.
- * Copyright (C) 2002, 2003, 2004, 2006, 2007 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "stringprep.h"
-
-/* This file contains functions from GLIB, including gutf8.c and
- * gunidecomp.c, all licensed under LGPL and copyright hold by:
- *
- * Copyright (C) 1999, 2000 Tom Tromey
- * Copyright 2000 Red Hat, Inc.
- */
-
-/* Hacks to make syncing with GLIB code easier. */
-#define gboolean int
-#define gchar char
-#define guchar unsigned char
-#define glong long
-#define gint int
-#define guint unsigned int
-#define gushort unsigned short
-#define gint16 int16_t
-#define guint16 uint16_t
-#define gunichar uint32_t
-#define gsize size_t
-#define gssize ssize_t
-#define g_malloc malloc
-#define g_free free
-#define GError void
-#define g_set_error(a,b,c,d) ((void) 0)
-#define g_new(struct_type, n_structs) \
- ((struct_type *) g_malloc (((gsize) sizeof (struct_type)) * ((gsize) (n_structs))))
-# if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus)
-# define G_STMT_START (void)(
-# define G_STMT_END )
-# else
-# if (defined (sun) || defined (__sun__))
-# define G_STMT_START if (1)
-# define G_STMT_END else (void)0
-# else
-# define G_STMT_START do
-# define G_STMT_END while (0)
-# endif
-# endif
-#define g_return_val_if_fail(expr,val) G_STMT_START{ (void)0; }G_STMT_END
-#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))
-#define TRUE 1
-#define FALSE 0
-
-/* Code from GLIB gunicode.h starts here. */
-
-typedef enum
-{
- G_NORMALIZE_DEFAULT,
- G_NORMALIZE_NFD = G_NORMALIZE_DEFAULT,
- G_NORMALIZE_DEFAULT_COMPOSE,
- G_NORMALIZE_NFC = G_NORMALIZE_DEFAULT_COMPOSE,
- G_NORMALIZE_ALL,
- G_NORMALIZE_NFKD = G_NORMALIZE_ALL,
- G_NORMALIZE_ALL_COMPOSE,
- G_NORMALIZE_NFKC = G_NORMALIZE_ALL_COMPOSE
-}
-GNormalizeMode;
-
-/* Code from GLIB gutf8.c starts here. */
-
-#define UTF8_COMPUTE(Char, Mask, Len) \
- if (Char < 128) \
- { \
- Len = 1; \
- Mask = 0x7f; \
- } \
- else if ((Char & 0xe0) == 0xc0) \
- { \
- Len = 2; \
- Mask = 0x1f; \
- } \
- else if ((Char & 0xf0) == 0xe0) \
- { \
- Len = 3; \
- Mask = 0x0f; \
- } \
- else if ((Char & 0xf8) == 0xf0) \
- { \
- Len = 4; \
- Mask = 0x07; \
- } \
- else if ((Char & 0xfc) == 0xf8) \
- { \
- Len = 5; \
- Mask = 0x03; \
- } \
- else if ((Char & 0xfe) == 0xfc) \
- { \
- Len = 6; \
- Mask = 0x01; \
- } \
- else \
- Len = -1;
-
-#define UTF8_LENGTH(Char) \
- ((Char) < 0x80 ? 1 : \
- ((Char) < 0x800 ? 2 : \
- ((Char) < 0x10000 ? 3 : \
- ((Char) < 0x200000 ? 4 : \
- ((Char) < 0x4000000 ? 5 : 6)))))
-
-
-#define UTF8_GET(Result, Chars, Count, Mask, Len) \
- (Result) = (Chars)[0] & (Mask); \
- for ((Count) = 1; (Count) < (Len); ++(Count)) \
- { \
- if (((Chars)[(Count)] & 0xc0) != 0x80) \
- { \
- (Result) = -1; \
- break; \
- } \
- (Result) <<= 6; \
- (Result) |= ((Chars)[(Count)] & 0x3f); \
- }
-
-#define UNICODE_VALID(Char) \
- ((Char) < 0x110000 && \
- (((Char) & 0xFFFFF800) != 0xD800) && \
- ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \
- ((Char) & 0xFFFE) != 0xFFFE)
-
-
-static const gchar utf8_skip_data[256] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5,
- 5, 5, 5, 6, 6, 1, 1
-};
-
-static const gchar *const g_utf8_skip = utf8_skip_data;
-
-#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(guchar *)(p)])
-
-/*
- * g_utf8_strlen:
- * @p: pointer to the start of a UTF-8 encoded string.
- * @max: the maximum number of bytes to examine. If @max
- * is less than 0, then the string is assumed to be
- * nul-terminated. If @max is 0, @p will not be examined and
- * may be %NULL.
- *
- * Returns the length of the string in characters.
- *
- * Return value: the length of the string in characters
- **/
-static glong
-g_utf8_strlen (const gchar * p, gssize max)
-{
- glong len = 0;
- const gchar *start = p;
- g_return_val_if_fail (p != NULL || max == 0, 0);
-
- if (max < 0)
- {
- while (*p)
- {
- p = g_utf8_next_char (p);
- ++len;
- }
- }
- else
- {
- if (max == 0 || !*p)
- return 0;
-
- p = g_utf8_next_char (p);
-
- while (p - start < max && *p)
- {
- ++len;
- p = g_utf8_next_char (p);
- }
-
- /* only do the last len increment if we got a complete
- * char (don't count partial chars)
- */
- if (p - start == max)
- ++len;
- }
-
- return len;
-}
-
-/*
- * g_utf8_get_char:
- * @p: a pointer to Unicode character encoded as UTF-8
- *
- * Converts a sequence of bytes encoded as UTF-8 to a Unicode character.
- * If @p does not point to a valid UTF-8 encoded character, results are
- * undefined. If you are not sure that the bytes are complete
- * valid Unicode characters, you should use g_utf8_get_char_validated()
- * instead.
- *
- * Return value: the resulting character
- **/
-static gunichar
-g_utf8_get_char (const gchar * p)
-{
- int i, mask = 0, len;
- gunichar result;
- unsigned char c = (unsigned char) *p;
-
- UTF8_COMPUTE (c, mask, len);
- if (len == -1)
- return (gunichar) - 1;
- UTF8_GET (result, p, i, mask, len);
-
- return result;
-}
-
-/*
- * g_unichar_to_utf8:
- * @c: a ISO10646 character code
- * @outbuf: output buffer, must have at least 6 bytes of space.
- * If %NULL, the length will be computed and returned
- * and nothing will be written to @outbuf.
- *
- * Converts a single character to UTF-8.
- *
- * Return value: number of bytes written
- **/
-static int
-g_unichar_to_utf8 (gunichar c, gchar * outbuf)
-{
- guint len = 0;
- int first;
- int i;
-
- if (c < 0x80)
- {
- first = 0;
- len = 1;
- }
- else if (c < 0x800)
- {
- first = 0xc0;
- len = 2;
- }
- else if (c < 0x10000)
- {
- first = 0xe0;
- len = 3;
- }
- else if (c < 0x200000)
- {
- first = 0xf0;
- len = 4;
- }
- else if (c < 0x4000000)
- {
- first = 0xf8;
- len = 5;
- }
- else
- {
- first = 0xfc;
- len = 6;
- }
-
- if (outbuf)
- {
- for (i = len - 1; i > 0; --i)
- {
- outbuf[i] = (c & 0x3f) | 0x80;
- c >>= 6;
- }
- outbuf[0] = c | first;
- }
-
- return len;
-}
-
-/*
- * g_utf8_to_ucs4_fast:
- * @str: a UTF-8 encoded string
- * @len: the maximum length of @str to use. If @len < 0, then
- * the string is nul-terminated.
- * @items_written: location to store the number of characters in the
- * result, or %NULL.
- *
- * Convert a string from UTF-8 to a 32-bit fixed width
- * representation as UCS-4, assuming valid UTF-8 input.
- * This function is roughly twice as fast as g_utf8_to_ucs4()
- * but does no error checking on the input.
- *
- * Return value: a pointer to a newly allocated UCS-4 string.
- * This value must be freed with g_free().
- **/
-static gunichar *
-g_utf8_to_ucs4_fast (const gchar * str, glong len, glong * items_written)
-{
- gint j, charlen;
- gunichar *result;
- gint n_chars, i;
- const gchar *p;
-
- g_return_val_if_fail (str != NULL, NULL);
-
- p = str;
- n_chars = 0;
- if (len < 0)
- {
- while (*p)
- {
- p = g_utf8_next_char (p);
- ++n_chars;
- }
- }
- else
- {
- while (p < str + len && *p)
- {
- p = g_utf8_next_char (p);
- ++n_chars;
- }
- }
-
- result = g_new (gunichar, n_chars + 1);
- if (!result)
- return NULL;
-
- p = str;
- for (i = 0; i < n_chars; i++)
- {
- gunichar wc = ((unsigned char *) p)[0];
-
- if (wc < 0x80)
- {
- result[i] = wc;
- p++;
- }
- else
- {
- if (wc < 0xe0)
- {
- charlen = 2;
- wc &= 0x1f;
- }
- else if (wc < 0xf0)
- {
- charlen = 3;
- wc &= 0x0f;
- }
- else if (wc < 0xf8)
- {
- charlen = 4;
- wc &= 0x07;
- }
- else if (wc < 0xfc)
- {
- charlen = 5;
- wc &= 0x03;
- }
- else
- {
- charlen = 6;
- wc &= 0x01;
- }
-
- for (j = 1; j < charlen; j++)
- {
- wc <<= 6;
- wc |= ((unsigned char *) p)[j] & 0x3f;
- }
-
- result[i] = wc;
- p += charlen;
- }
- }
- result[i] = 0;
-
- if (items_written)
- *items_written = i;
-
- return result;
-}
-
-/*
- * g_ucs4_to_utf8:
- * @str: a UCS-4 encoded string
- * @len: the maximum length of @str to use. If @len < 0, then
- * the string is terminated with a 0 character.
- * @items_read: location to store number of characters read read, or %NULL.
- * @items_written: location to store number of bytes written or %NULL.
- * The value here stored does not include the trailing 0
- * byte.
- * @error: location to store the error occuring, or %NULL to ignore
- * errors. Any of the errors in #GConvertError other than
- * %G_CONVERT_ERROR_NO_CONVERSION may occur.
- *
- * Convert a string from a 32-bit fixed width representation as UCS-4.
- * to UTF-8. The result will be terminated with a 0 byte.
- *
- * Return value: a pointer to a newly allocated UTF-8 string.
- * This value must be freed with g_free(). If an
- * error occurs, %NULL will be returned and
- * @error set.
- **/
-static gchar *
-g_ucs4_to_utf8 (const gunichar * str,
- glong len,
- glong * items_read, glong * items_written, GError ** error)
-{
- gint result_length;
- gchar *result = NULL;
- gchar *p;
- gint i;
-
- result_length = 0;
- for (i = 0; len < 0 || i < len; i++)
- {
- if (!str[i])
- break;
-
- if (str[i] >= 0x80000000)
- {
- if (items_read)
- *items_read = i;
-
- g_set_error (error, G_CONVERT_ERROR,
- G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
- _("Character out of range for UTF-8"));
- goto err_out;
- }
-
- result_length += UTF8_LENGTH (str[i]);
- }
-
- result = g_malloc (result_length + 1);
- if (!result)
- return NULL;
- p = result;
-
- i = 0;
- while (p < result + result_length)
- p += g_unichar_to_utf8 (str[i++], p);
-
- *p = '\0';
-
- if (items_written)
- *items_written = p - result;
-
-err_out:
- if (items_read)
- *items_read = i;
-
- return result;
-}
-
-/* Code from GLIB gunidecomp.c starts here. */
-
-#include "gunidecomp.h"
-#include "gunicomp.h"
-
-#define CC_PART1(Page, Char) \
- ((combining_class_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
- ? (combining_class_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \
- : (cclass_data[combining_class_table_part1[Page]][Char]))
-
-#define CC_PART2(Page, Char) \
- ((combining_class_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
- ? (combining_class_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \
- : (cclass_data[combining_class_table_part2[Page]][Char]))
-
-#define COMBINING_CLASS(Char) \
- (((Char) <= G_UNICODE_LAST_CHAR_PART1) \
- ? CC_PART1 ((Char) >> 8, (Char) & 0xff) \
- : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \
- ? CC_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \
- : 0))
-
-/* constants for hangul syllable [de]composition */
-#define SBase 0xAC00
-#define LBase 0x1100
-#define VBase 0x1161
-#define TBase 0x11A7
-#define LCount 19
-#define VCount 21
-#define TCount 28
-#define NCount (VCount * TCount)
-#define SCount (LCount * NCount)
-
-/*
- * g_unicode_canonical_ordering:
- * @string: a UCS-4 encoded string.
- * @len: the maximum length of @string to use.
- *
- * Computes the canonical ordering of a string in-place.
- * This rearranges decomposed characters in the string
- * according to their combining classes. See the Unicode
- * manual for more information.
- **/
-static void
-g_unicode_canonical_ordering (gunichar * string, gsize len)
-{
- gsize i;
- int swap = 1;
-
- while (swap)
- {
- int last;
- swap = 0;
- last = COMBINING_CLASS (string[0]);
- for (i = 0; i < len - 1; ++i)
- {
- int next = COMBINING_CLASS (string[i + 1]);
- if (next != 0 && last > next)
- {
- gsize j;
- /* Percolate item leftward through string. */
- for (j = i + 1; j > 0; --j)
- {
- gunichar t;
- if (COMBINING_CLASS (string[j - 1]) <= next)
- break;
- t = string[j];
- string[j] = string[j - 1];
- string[j - 1] = t;
- swap = 1;
- }
- /* We're re-entering the loop looking at the old
- character again. */
- next = last;
- }
- last = next;
- }
- }
-}
-
-/* http://www.unicode.org/unicode/reports/tr15/#Hangul
- * r should be null or have sufficient space. Calling with r == NULL will
- * only calculate the result_len; however, a buffer with space for three
- * characters will always be big enough. */
-static void
-decompose_hangul (gunichar s, gunichar * r, gsize * result_len)
-{
- gint SIndex = s - SBase;
-
- /* not a hangul syllable */
- if (SIndex < 0 || SIndex >= SCount)
- {
- if (r)
- r[0] = s;
- *result_len = 1;
- }
- else
- {
- gunichar L = LBase + SIndex / NCount;
- gunichar V = VBase + (SIndex % NCount) / TCount;
- gunichar T = TBase + SIndex % TCount;
-
- if (r)
- {
- r[0] = L;
- r[1] = V;
- }
-
- if (T != TBase)
- {
- if (r)
- r[2] = T;
- *result_len = 3;
- }
- else
- *result_len = 2;
- }
-}
-
-/* returns a pointer to a null-terminated UTF-8 string */
-static const gchar *
-find_decomposition (gunichar ch, gboolean compat)
-{
- int start = 0;
- int end = G_N_ELEMENTS (decomp_table);
-
- if (ch >= decomp_table[start].ch && ch <= decomp_table[end - 1].ch)
- {
- while (TRUE)
- {
- int half = (start + end) / 2;
- if (ch == decomp_table[half].ch)
- {
- int offset;
-
- if (compat)
- {
- offset = decomp_table[half].compat_offset;
- if (offset == G_UNICODE_NOT_PRESENT_OFFSET)
- offset = decomp_table[half].canon_offset;
- }
- else
- {
- offset = decomp_table[half].canon_offset;
- if (offset == G_UNICODE_NOT_PRESENT_OFFSET)
- return NULL;
- }
-
- return &(decomp_expansion_string[offset]);
- }
- else if (half == start)
- break;
- else if (ch > decomp_table[half].ch)
- start = half;
- else
- end = half;
- }
- }
-
- return NULL;
-}
-
-/* L,V => LV and LV,T => LVT */
-static gboolean
-combine_hangul (gunichar a, gunichar b, gunichar * result)
-{
- gint LIndex = a - LBase;
- gint SIndex = a - SBase;
-
- gint VIndex = b - VBase;
- gint TIndex = b - TBase;
-
- if (0 <= LIndex && LIndex < LCount && 0 <= VIndex && VIndex < VCount)
- {
- *result = SBase + (LIndex * VCount + VIndex) * TCount;
- return TRUE;
- }
- else if (0 <= SIndex && SIndex < SCount && (SIndex % TCount) == 0
- && 0 <= TIndex && TIndex <= TCount)
- {
- *result = a + TIndex;
- return TRUE;
- }
-
- return FALSE;
-}
-
-#define CI(Page, Char) \
- ((compose_table[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
- ? (compose_table[Page] - G_UNICODE_MAX_TABLE_INDEX) \
- : (compose_data[compose_table[Page]][Char]))
-
-#define COMPOSE_INDEX(Char) \
- ((((Char) >> 8) > (COMPOSE_TABLE_LAST)) ? 0 : CI((Char) >> 8, (Char) & 0xff))
-
-static gboolean
-combine (gunichar a, gunichar b, gunichar * result)
-{
- gushort index_a, index_b;
-
- if (combine_hangul (a, b, result))
- return TRUE;
-
- index_a = COMPOSE_INDEX (a);
-
- if (index_a >= COMPOSE_FIRST_SINGLE_START && index_a < COMPOSE_SECOND_START)
- {
- if (b == compose_first_single[index_a - COMPOSE_FIRST_SINGLE_START][0])
- {
- *result =
- compose_first_single[index_a - COMPOSE_FIRST_SINGLE_START][1];
- return TRUE;
- }
- else
- return FALSE;
- }
-
- index_b = COMPOSE_INDEX (b);
-
- if (index_b >= COMPOSE_SECOND_SINGLE_START)
- {
- if (a ==
- compose_second_single[index_b - COMPOSE_SECOND_SINGLE_START][0])
- {
- *result =
- compose_second_single[index_b - COMPOSE_SECOND_SINGLE_START][1];
- return TRUE;
- }
- else
- return FALSE;
- }
-
- if (index_a >= COMPOSE_FIRST_START && index_a < COMPOSE_FIRST_SINGLE_START
- && index_b >= COMPOSE_SECOND_START
- && index_b < COMPOSE_SECOND_SINGLE_START)
- {
- gunichar res =
- compose_array[index_a - COMPOSE_FIRST_START][index_b -
- COMPOSE_SECOND_START];
-
- if (res)
- {
- *result = res;
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static gunichar *
-_g_utf8_normalize_wc (const gchar * str, gssize max_len, GNormalizeMode mode)
-{
- gsize n_wc;
- gunichar *wc_buffer;
- const char *p;
- gsize last_start;
- gboolean do_compat = (mode == G_NORMALIZE_NFKC || mode == G_NORMALIZE_NFKD);
- gboolean do_compose = (mode == G_NORMALIZE_NFC || mode == G_NORMALIZE_NFKC);
-
- n_wc = 0;
- p = str;
- while ((max_len < 0 || p < str + max_len) && *p)
- {
- const gchar *decomp;
- gunichar wc = g_utf8_get_char (p);
-
- if (wc >= 0xac00 && wc <= 0xd7af)
- {
- gsize result_len;
- decompose_hangul (wc, NULL, &result_len);
- n_wc += result_len;
- }
- else
- {
- decomp = find_decomposition (wc, do_compat);
-
- if (decomp)
- n_wc += g_utf8_strlen (decomp, -1);
- else
- n_wc++;
- }
-
- p = g_utf8_next_char (p);
- }
-
- wc_buffer = g_new (gunichar, n_wc + 1);
- if (!wc_buffer)
- return NULL;
-
- last_start = 0;
- n_wc = 0;
- p = str;
- while ((max_len < 0 || p < str + max_len) && *p)
- {
- gunichar wc = g_utf8_get_char (p);
- const gchar *decomp;
- int cc;
- gsize old_n_wc = n_wc;
-
- if (wc >= 0xac00 && wc <= 0xd7af)
- {
- gsize result_len;
- decompose_hangul (wc, wc_buffer + n_wc, &result_len);
- n_wc += result_len;
- }
- else
- {
- decomp = find_decomposition (wc, do_compat);
-
- if (decomp)
- {
- const char *pd;
- for (pd = decomp; *pd != '\0'; pd = g_utf8_next_char (pd))
- wc_buffer[n_wc++] = g_utf8_get_char (pd);
- }
- else
- wc_buffer[n_wc++] = wc;
- }
-
- if (n_wc > 0)
- {
- cc = COMBINING_CLASS (wc_buffer[old_n_wc]);
-
- if (cc == 0)
- {
- g_unicode_canonical_ordering (wc_buffer + last_start,
- n_wc - last_start);
- last_start = old_n_wc;
- }
- }
-
- p = g_utf8_next_char (p);
- }
-
- if (n_wc > 0)
- {
- g_unicode_canonical_ordering (wc_buffer + last_start,
- n_wc - last_start);
- last_start = n_wc;
- }
-
- wc_buffer[n_wc] = 0;
-
- /* All decomposed and reordered */
-
- if (do_compose && n_wc > 0)
- {
- gsize i, j;
- int last_cc = 0;
- last_start = 0;
-
- for (i = 0; i < n_wc; i++)
- {
- int cc = COMBINING_CLASS (wc_buffer[i]);
-
- if (i > 0 &&
- (last_cc == 0 || last_cc != cc) &&
- combine (wc_buffer[last_start], wc_buffer[i],
- &wc_buffer[last_start]))
- {
- for (j = i + 1; j < n_wc; j++)
- wc_buffer[j - 1] = wc_buffer[j];
- n_wc--;
- i--;
-
- if (i == last_start)
- last_cc = 0;
- else
- last_cc = COMBINING_CLASS (wc_buffer[i - 1]);
-
- continue;
- }
-
- if (cc == 0)
- last_start = i;
-
- last_cc = cc;
- }
- }
-
- wc_buffer[n_wc] = 0;
-
- return wc_buffer;
-}
-
-/*
- * g_utf8_normalize:
- * @str: a UTF-8 encoded string.
- * @len: length of @str, in bytes, or -1 if @str is nul-terminated.
- * @mode: the type of normalization to perform.
- *
- * Converts a string into canonical form, standardizing
- * such issues as whether a character with an accent
- * is represented as a base character and combining
- * accent or as a single precomposed character. You
- * should generally call g_utf8_normalize() before
- * comparing two Unicode strings.
- *
- * The normalization mode %G_NORMALIZE_DEFAULT only
- * standardizes differences that do not affect the
- * text content, such as the above-mentioned accent
- * representation. %G_NORMALIZE_ALL also standardizes
- * the "compatibility" characters in Unicode, such
- * as SUPERSCRIPT THREE to the standard forms
- * (in this case DIGIT THREE). Formatting information
- * may be lost but for most text operations such
- * characters should be considered the same.
- * For example, g_utf8_collate() normalizes
- * with %G_NORMALIZE_ALL as its first step.
- *
- * %G_NORMALIZE_DEFAULT_COMPOSE and %G_NORMALIZE_ALL_COMPOSE
- * are like %G_NORMALIZE_DEFAULT and %G_NORMALIZE_ALL,
- * but returned a result with composed forms rather
- * than a maximally decomposed form. This is often
- * useful if you intend to convert the string to
- * a legacy encoding or pass it to a system with
- * less capable Unicode handling.
- *
- * Return value: a newly allocated string, that is the
- * normalized form of @str.
- **/
-static gchar *
-g_utf8_normalize (const gchar * str, gssize len, GNormalizeMode mode)
-{
- gunichar *result_wc = _g_utf8_normalize_wc (str, len, mode);
- gchar *result;
-
- result = g_ucs4_to_utf8 (result_wc, -1, NULL, NULL, NULL);
- g_free (result_wc);
-
- return result;
-}
-
-/* Public Libidn API starts here. */
-
-/**
- * stringprep_utf8_to_unichar - convert UTF-8 to Unicode code point
- * @p: a pointer to Unicode character encoded as UTF-8
- *
- * Converts a sequence of bytes encoded as UTF-8 to a Unicode character.
- * If @p does not point to a valid UTF-8 encoded character, results are
- * undefined.
- *
- * Return value: the resulting character.
- **/
-uint32_t
-stringprep_utf8_to_unichar (const char *p)
-{
- return g_utf8_get_char (p);
-}
-
-/**
- * stringprep_unichar_to_utf8 - convert Unicode code point to UTF-8
- * @c: a ISO10646 character code
- * @outbuf: output buffer, must have at least 6 bytes of space.
- * If %NULL, the length will be computed and returned
- * and nothing will be written to @outbuf.
- *
- * Converts a single character to UTF-8.
- *
- * Return value: number of bytes written.
- **/
-int
-stringprep_unichar_to_utf8 (uint32_t c, char *outbuf)
-{
- return g_unichar_to_utf8 (c, outbuf);
-}
-
-/**
- * stringprep_utf8_to_ucs4 - convert UTF-8 string to UCS-4
- * @str: a UTF-8 encoded string
- * @len: the maximum length of @str to use. If @len < 0, then
- * the string is nul-terminated.
- * @items_written: location to store the number of characters in the
- * result, or %NULL.
- *
- * Convert a string from UTF-8 to a 32-bit fixed width
- * representation as UCS-4, assuming valid UTF-8 input.
- * This function does no error checking on the input.
- *
- * Return value: a pointer to a newly allocated UCS-4 string.
- * This value must be freed with free().
- **/
-uint32_t *
-stringprep_utf8_to_ucs4 (const char *str, ssize_t len, size_t * items_written)
-{
- return g_utf8_to_ucs4_fast (str, (glong) len, (glong *) items_written);
-}
-
-/**
- * stringprep_ucs4_to_utf8 - convert UCS-4 string to UTF-8
- * @str: a UCS-4 encoded string
- * @len: the maximum length of @str to use. If @len < 0, then
- * the string is terminated with a 0 character.
- * @items_read: location to store number of characters read read, or %NULL.
- * @items_written: location to store number of bytes written or %NULL.
- * The value here stored does not include the trailing 0
- * byte.
- *
- * Convert a string from a 32-bit fixed width representation as UCS-4.
- * to UTF-8. The result will be terminated with a 0 byte.
- *
- * Return value: a pointer to a newly allocated UTF-8 string.
- * This value must be freed with free(). If an
- * error occurs, %NULL will be returned and
- * @error set.
- **/
-char *
-stringprep_ucs4_to_utf8 (const uint32_t * str, ssize_t len,
- size_t * items_read, size_t * items_written)
-{
- return g_ucs4_to_utf8 (str, len, (glong *) items_read,
- (glong *) items_written, NULL);
-}
-
-/**
- * stringprep_utf8_nfkc_normalize - normalize Unicode string
- * @str: a UTF-8 encoded string.
- * @len: length of @str, in bytes, or -1 if @str is nul-terminated.
- *
- * Converts a string into canonical form, standardizing
- * such issues as whether a character with an accent
- * is represented as a base character and combining
- * accent or as a single precomposed character.
- *
- * The normalization mode is NFKC (ALL COMPOSE). It standardizes
- * differences that do not affect the text content, such as the
- * above-mentioned accent representation. It standardizes the
- * "compatibility" characters in Unicode, such as SUPERSCRIPT THREE to
- * the standard forms (in this case DIGIT THREE). Formatting
- * information may be lost but for most text operations such
- * characters should be considered the same. It returns a result with
- * composed forms rather than a maximally decomposed form.
- *
- * Return value: a newly allocated string, that is the
- * NFKC normalized form of @str.
- **/
-char *
-stringprep_utf8_nfkc_normalize (const char *str, ssize_t len)
-{
- return g_utf8_normalize (str, len, G_NORMALIZE_NFKC);
-}
-
-/**
- * stringprep_ucs4_nfkc_normalize - normalize Unicode string
- * @str: a Unicode string.
- * @len: length of @str array, or -1 if @str is nul-terminated.
- *
- * Converts UCS4 string into UTF-8 and runs
- * stringprep_utf8_nfkc_normalize().
- *
- * Return value: a newly allocated Unicode string, that is the NFKC
- * normalized form of @str.
- **/
-uint32_t *
-stringprep_ucs4_nfkc_normalize (uint32_t * str, ssize_t len)
-{
- char *p;
- uint32_t *result_wc;
-
- p = stringprep_ucs4_to_utf8 (str, len, 0, 0);
- result_wc = _g_utf8_normalize_wc (p, -1, G_NORMALIZE_NFKC);
- free (p);
-
- return result_wc;
-}
diff --git a/3rdParty/LibIDN/src/profiles.c b/3rdParty/LibIDN/src/profiles.c
deleted file mode 100644
index f59305f..0000000
--- a/3rdParty/LibIDN/src/profiles.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/* profiles.c --- Definitions of stringprep profiles.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#include "stringprep.h"
-
-const Stringprep_profiles stringprep_profiles[] = {
- {"Nameprep", stringprep_nameprep},
- {"KRBprep", stringprep_kerberos5}, /* Deprecate? */
- {"Nodeprep", stringprep_xmpp_nodeprep},
- {"Resourceprep", stringprep_xmpp_resourceprep},
- {"plain", stringprep_plain}, /* sasl-anon-00. */
- {"trace", stringprep_trace}, /* sasl-anon-01,02,03. */
- {"SASLprep", stringprep_saslprep},
- {"ISCSIprep", stringprep_iscsi}, /* Obsolete. */
- {"iSCSI", stringprep_iscsi}, /* IANA. */
- {NULL, NULL}
-};
-
-const Stringprep_profile stringprep_nameprep[] = {
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_2},
- {STRINGPREP_NFKC, 0, 0},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
- {STRINGPREP_BIDI, 0, 0},
- {STRINGPREP_BIDI_PROHIBIT_TABLE, ~STRINGPREP_NO_BIDI,
- stringprep_rfc3454_C_8},
- {STRINGPREP_BIDI_RAL_TABLE, 0, stringprep_rfc3454_D_1},
- {STRINGPREP_BIDI_L_TABLE, 0, stringprep_rfc3454_D_2},
- {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
- stringprep_rfc3454_A_1},
- {0}
-};
-
-const Stringprep_profile stringprep_kerberos5[] = {
- /* XXX this is likely to be wrong as the specification is
- a rough draft. */
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_3},
- {STRINGPREP_NFKC, 0, 0},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
- {STRINGPREP_BIDI, 0, 0},
- {STRINGPREP_BIDI_PROHIBIT_TABLE, ~STRINGPREP_NO_BIDI,
- stringprep_rfc3454_C_8},
- {STRINGPREP_BIDI_RAL_TABLE, 0, stringprep_rfc3454_D_1},
- {STRINGPREP_BIDI_L_TABLE, 0, stringprep_rfc3454_D_2},
- {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
- stringprep_rfc3454_A_1},
- {0}
-};
-
-const Stringprep_table_element stringprep_xmpp_nodeprep_prohibit[] = {
- {0x000022}, /* #x22 (") */
- {0x000026}, /* #x26 (&) */
- {0x000027}, /* #x27 (') */
- {0x00002F}, /* #x2F (/) */
- {0x00003A}, /* #x3A (:) */
- {0x00003C}, /* #x3C (<) */
- {0x00003E}, /* #x3E (>) */
- {0x000040}, /* #x40 (@) */
- {0}
-};
-
-const Stringprep_profile stringprep_xmpp_nodeprep[] = {
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_2},
- {STRINGPREP_NFKC, 0, 0},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_1},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_xmpp_nodeprep_prohibit},
- {STRINGPREP_BIDI, 0, 0},
- {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_BIDI_RAL_TABLE, 0, stringprep_rfc3454_D_1},
- {STRINGPREP_BIDI_L_TABLE, 0, stringprep_rfc3454_D_2},
- {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
- stringprep_rfc3454_A_1},
- {0}
-};
-
-const Stringprep_profile stringprep_xmpp_resourceprep[] = {
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
- {STRINGPREP_NFKC, 0, 0},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
- {STRINGPREP_BIDI, 0, 0},
- {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
- {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
- {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
- stringprep_rfc3454_A_1},
- {0}
-};
-
-const Stringprep_profile stringprep_plain[] = {
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
- {STRINGPREP_BIDI, 0, 0},
- {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
- {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
- {0}
-};
-
-const Stringprep_profile stringprep_trace[] = {
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
- {STRINGPREP_BIDI, 0, 0},
- {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
- {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
- {0}
-};
-
-const Stringprep_table_element stringprep_iscsi_prohibit[] = {
- /* NB, since start == 0, we must have that end != 0 for the
- end-of-table logic to work. */
- {0x0000, 1}, /* [ASCII CONTROL CHARACTERS and SPACE through ,] */
- {0x0001},
- {0x0002},
- {0x0003},
- {0x0004},
- {0x0005},
- {0x0006},
- {0x0007},
- {0x0008},
- {0x0009},
- {0x000A},
- {0x000B},
- {0x000C},
- {0x000D},
- {0x000E},
- {0x000F},
- {0x0010},
- {0x0011},
- {0x0012},
- {0x0013},
- {0x0014},
- {0x0015},
- {0x0016},
- {0x0017},
- {0x0018},
- {0x0019},
- {0x001A},
- {0x001B},
- {0x001C},
- {0x001D},
- {0x001E},
- {0x001F},
- {0x0020},
- {0x0021},
- {0x0022},
- {0x0023},
- {0x0024},
- {0x0025},
- {0x0026},
- {0x0027},
- {0x0028},
- {0x0029},
- {0x002A},
- {0x002B},
- {0x002C},
- {0x002F}, /* [ASCII /] */
- {0x003B}, /* [ASCII ; through @] */
- {0x003C},
- {0x003D},
- {0x003E},
- {0x003F},
- {0x0040},
- {0x005B}, /* [ASCII [ through `] */
- {0x005C},
- {0x005D},
- {0x005E},
- {0x005F},
- {0x0060},
- {0x007B}, /* [ASCII { through DEL] */
- {0x007C},
- {0x007D},
- {0x007E},
- {0x007F},
- {0x3002}, /* ideographic full stop */
- {0}
-};
-
-const Stringprep_profile stringprep_iscsi[] = {
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_2},
- {STRINGPREP_NFKC, 0, 0},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_1},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_iscsi_prohibit},
- {STRINGPREP_BIDI, 0, 0},
- {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
- {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
- {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
- stringprep_rfc3454_A_1},
- {0}
-};
-
-const Stringprep_table_element stringprep_saslprep_space_map[] = {
- {0x0000A0, 0, {0x0020}}, /* 00A0; NO-BREAK SPACE */
- {0x001680, 0, {0x0020}}, /* 1680; OGHAM SPACE MARK */
- {0x002000, 0, {0x0020}}, /* 2000; EN QUAD */
- {0x002001, 0, {0x0020}}, /* 2001; EM QUAD */
- {0x002002, 0, {0x0020}}, /* 2002; EN SPACE */
- {0x002003, 0, {0x0020}}, /* 2003; EM SPACE */
- {0x002004, 0, {0x0020}}, /* 2004; THREE-PER-EM SPACE */
- {0x002005, 0, {0x0020}}, /* 2005; FOUR-PER-EM SPACE */
- {0x002006, 0, {0x0020}}, /* 2006; SIX-PER-EM SPACE */
- {0x002007, 0, {0x0020}}, /* 2007; FIGURE SPACE */
- {0x002008, 0, {0x0020}}, /* 2008; PUNCTUATION SPACE */
- {0x002009, 0, {0x0020}}, /* 2009; THIN SPACE */
- {0x00200A, 0, {0x0020}}, /* 200A; HAIR SPACE */
- {0x00200B, 0, {0x0020}}, /* 200B; ZERO WIDTH SPACE */
- {0x00202F, 0, {0x0020}}, /* 202F; NARROW NO-BREAK SPACE */
- {0x00205F, 0, {0x0020}}, /* 205F; MEDIUM MATHEMATICAL SPACE */
- {0x003000, 0, {0x0020}}, /* 3000; IDEOGRAPHIC SPACE */
- {0}
-};
-
-const Stringprep_profile stringprep_saslprep[] = {
- {STRINGPREP_MAP_TABLE, 0, stringprep_saslprep_space_map},
- {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
- {STRINGPREP_NFKC, 0, 0},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
- {STRINGPREP_BIDI, 0, 0},
- {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
- {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
- {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
- {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
- stringprep_rfc3454_A_1},
- {0}
-};
diff --git a/3rdParty/LibIDN/src/punycode.c b/3rdParty/LibIDN/src/punycode.c
deleted file mode 100644
index 36ffee0..0000000
--- a/3rdParty/LibIDN/src/punycode.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/* punycode.c --- Implementation of punycode used to ASCII encode IDN's.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-/*
- * This file is derived from RFC 3492bis written by Adam M. Costello.
- *
- * Disclaimer and license: Regarding this entire document or any
- * portion of it (including the pseudocode and C code), the author
- * makes no guarantees and is not responsible for any damage resulting
- * from its use. The author grants irrevocable permission to anyone
- * to use, modify, and distribute it in any way that does not diminish
- * the rights of anyone else to use, modify, and distribute it,
- * provided that redistributed derivative works do not contain
- * misleading author or version information. Derivative works need
- * not be licensed under similar terms.
- *
- * Copyright (C) The Internet Society (2003). All Rights Reserved.
- *
- * This document and translations of it may be copied and furnished to
- * others, and derivative works that comment on or otherwise explain it
- * or assist in its implementation may be prepared, copied, published
- * and distributed, in whole or in part, without restriction of any
- * kind, provided that the above copyright notice and this paragraph are
- * included on all such copies and derivative works. However, this
- * document itself may not be modified in any way, such as by removing
- * the copyright notice or references to the Internet Society or other
- * Internet organizations, except as needed for the purpose of
- * developing Internet standards in which case the procedures for
- * copyrights defined in the Internet Standards process must be
- * followed, or as required to translate it into languages other than
- * English.
- *
- * The limited permissions granted above are perpetual and will not be
- * revoked by the Internet Society or its successors or assigns.
- *
- * This document and the information contained herein is provided on an
- * "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
- * TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
- * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
- * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <string.h>
-
-#include "punycode.h"
-
-/*** Bootstring parameters for Punycode ***/
-
-enum
-{ base = 36, tmin = 1, tmax = 26, skew = 38, damp = 700,
- initial_bias = 72, initial_n = 0x80, delimiter = 0x2D
-};
-
-/* basic(cp) tests whether cp is a basic code point: */
-#define basic(cp) ((punycode_uint)(cp) < 0x80)
-
-/* delim(cp) tests whether cp is a delimiter: */
-#define delim(cp) ((cp) == delimiter)
-
-/* decode_digit(cp) returns the numeric value of a basic code */
-/* point (for use in representing integers) in the range 0 to */
-/* base-1, or base if cp does not represent a value. */
-
-static punycode_uint
-decode_digit (punycode_uint cp)
-{
- return cp - 48 < 10 ? cp - 22 : cp - 65 < 26 ? cp - 65 :
- cp - 97 < 26 ? cp - 97 : base;
-}
-
-/* encode_digit(d,flag) returns the basic code point whose value */
-/* (when used for representing integers) is d, which needs to be in */
-/* the range 0 to base-1. The lowercase form is used unless flag is */
-/* nonzero, in which case the uppercase form is used. The behavior */
-/* is undefined if flag is nonzero and digit d has no uppercase form. */
-
-static char
-encode_digit (punycode_uint d, int flag)
-{
- return d + 22 + 75 * (d < 26) - ((flag != 0) << 5);
- /* 0..25 map to ASCII a..z or A..Z */
- /* 26..35 map to ASCII 0..9 */
-}
-
-/* flagged(bcp) tests whether a basic code point is flagged */
-/* (uppercase). The behavior is undefined if bcp is not a */
-/* basic code point. */
-
-#define flagged(bcp) ((punycode_uint)(bcp) - 65 < 26)
-
-/* encode_basic(bcp,flag) forces a basic code point to lowercase */
-/* if flag is zero, uppercase if flag is nonzero, and returns */
-/* the resulting code point. The code point is unchanged if it */
-/* is caseless. The behavior is undefined if bcp is not a basic */
-/* code point. */
-
-static char
-encode_basic (punycode_uint bcp, int flag)
-{
- bcp -= (bcp - 97 < 26) << 5;
- return bcp + ((!flag && (bcp - 65 < 26)) << 5);
-}
-
-/*** Platform-specific constants ***/
-
-/* maxint is the maximum value of a punycode_uint variable: */
-static const punycode_uint maxint = -1;
-/* Because maxint is unsigned, -1 becomes the maximum value. */
-
-/*** Bias adaptation function ***/
-
-static punycode_uint
-adapt (punycode_uint delta, punycode_uint numpoints, int firsttime)
-{
- punycode_uint k;
-
- delta = firsttime ? delta / damp : delta >> 1;
- /* delta >> 1 is a faster way of doing delta / 2 */
- delta += delta / numpoints;
-
- for (k = 0; delta > ((base - tmin) * tmax) / 2; k += base)
- {
- delta /= base - tmin;
- }
-
- return k + (base - tmin + 1) * delta / (delta + skew);
-}
-
-/*** Main encode function ***/
-
-/**
- * punycode_encode - encode Unicode to Punycode
- * @input_length: The number of code points in the @input array and
- * the number of flags in the @case_flags array.
- * @input: An array of code points. They are presumed to be Unicode
- * code points, but that is not strictly REQUIRED. The array
- * contains code points, not code units. UTF-16 uses code units
- * D800 through DFFF to refer to code points 10000..10FFFF. The
- * code points D800..DFFF do not occur in any valid Unicode string.
- * The code points that can occur in Unicode strings (0..D7FF and
- * E000..10FFFF) are also called Unicode scalar values.
- * @case_flags: A %NULL pointer or an array of boolean values parallel
- * to the @input array. Nonzero (true, flagged) suggests that the
- * corresponding Unicode character be forced to uppercase after
- * being decoded (if possible), and zero (false, unflagged) suggests
- * that it be forced to lowercase (if possible). ASCII code points
- * (0..7F) are encoded literally, except that ASCII letters are
- * forced to uppercase or lowercase according to the corresponding
- * case flags. If @case_flags is a %NULL pointer then ASCII letters
- * are left as they are, and other code points are treated as
- * unflagged.
- * @output_length: The caller passes in the maximum number of ASCII
- * code points that it can receive. On successful return it will
- * contain the number of ASCII code points actually output.
- * @output: An array of ASCII code points. It is *not*
- * null-terminated; it will contain zeros if and only if the @input
- * contains zeros. (Of course the caller can leave room for a
- * terminator and add one if needed.)
- *
- * Converts a sequence of code points (presumed to be Unicode code
- * points) to Punycode.
- *
- * Return value: The return value can be any of the #Punycode_status
- * values defined above except %PUNYCODE_BAD_INPUT. If not
- * %PUNYCODE_SUCCESS, then @output_size and @output might contain
- * garbage.
- **/
-int
-punycode_encode (size_t input_length,
- const punycode_uint input[],
- const unsigned char case_flags[],
- size_t * output_length, char output[])
-{
- punycode_uint input_len, n, delta, h, b, bias, j, m, q, k, t;
- size_t out, max_out;
-
- /* The Punycode spec assumes that the input length is the same type */
- /* of integer as a code point, so we need to convert the size_t to */
- /* a punycode_uint, which could overflow. */
-
- if (input_length > maxint)
- return punycode_overflow;
- input_len = (punycode_uint) input_length;
-
- /* Initialize the state: */
-
- n = initial_n;
- delta = 0;
- out = 0;
- max_out = *output_length;
- bias = initial_bias;
-
- /* Handle the basic code points: */
-
- for (j = 0; j < input_len; ++j)
- {
- if (basic (input[j]))
- {
- if (max_out - out < 2)
- return punycode_big_output;
- output[out++] = case_flags ?
- encode_basic (input[j], case_flags[j]) : (char) input[j];
- }
- /* else if (input[j] < n) return punycode_bad_input; */
- /* (not needed for Punycode with unsigned code points) */
- }
-
- h = b = (punycode_uint) out;
- /* cannot overflow because out <= input_len <= maxint */
-
- /* h is the number of code points that have been handled, b is the */
- /* number of basic code points, and out is the number of ASCII code */
- /* points that have been output. */
-
- if (b > 0)
- output[out++] = delimiter;
-
- /* Main encoding loop: */
-
- while (h < input_len)
- {
- /* All non-basic code points < n have been */
- /* handled already. Find the next larger one: */
-
- for (m = maxint, j = 0; j < input_len; ++j)
- {
- /* if (basic(input[j])) continue; */
- /* (not needed for Punycode) */
- if (input[j] >= n && input[j] < m)
- m = input[j];
- }
-
- /* Increase delta enough to advance the decoder's */
- /* <n,i> state to <m,0>, but guard against overflow: */
-
- if (m - n > (maxint - delta) / (h + 1))
- return punycode_overflow;
- delta += (m - n) * (h + 1);
- n = m;
-
- for (j = 0; j < input_len; ++j)
- {
- /* Punycode does not need to check whether input[j] is basic: */
- if (input[j] < n /* || basic(input[j]) */ )
- {
- if (++delta == 0)
- return punycode_overflow;
- }
-
- if (input[j] == n)
- {
- /* Represent delta as a generalized variable-length integer: */
-
- for (q = delta, k = base;; k += base)
- {
- if (out >= max_out)
- return punycode_big_output;
- t = k <= bias /* + tmin */ ? tmin : /* +tmin not needed */
- k >= bias + tmax ? tmax : k - bias;
- if (q < t)
- break;
- output[out++] = encode_digit (t + (q - t) % (base - t), 0);
- q = (q - t) / (base - t);
- }
-
- output[out++] = encode_digit (q, case_flags && case_flags[j]);
- bias = adapt (delta, h + 1, h == b);
- delta = 0;
- ++h;
- }
- }
-
- ++delta, ++n;
- }
-
- *output_length = out;
- return punycode_success;
-}
-
-/*** Main decode function ***/
-
-/**
- * punycode_decode - decode Punycode to Unicode
- * @input_length: The number of ASCII code points in the @input array.
- * @input: An array of ASCII code points (0..7F).
- * @output_length: The caller passes in the maximum number of code
- * points that it can receive into the @output array (which is also
- * the maximum number of flags that it can receive into the
- * @case_flags array, if @case_flags is not a %NULL pointer). On
- * successful return it will contain the number of code points
- * actually output (which is also the number of flags actually
- * output, if case_flags is not a null pointer). The decoder will
- * never need to output more code points than the number of ASCII
- * code points in the input, because of the way the encoding is
- * defined. The number of code points output cannot exceed the
- * maximum possible value of a punycode_uint, even if the supplied
- * @output_length is greater than that.
- * @output: An array of code points like the input argument of
- * punycode_encode() (see above).
- * @case_flags: A %NULL pointer (if the flags are not needed by the
- * caller) or an array of boolean values parallel to the @output
- * array. Nonzero (true, flagged) suggests that the corresponding
- * Unicode character be forced to uppercase by the caller (if
- * possible), and zero (false, unflagged) suggests that it be forced
- * to lowercase (if possible). ASCII code points (0..7F) are output
- * already in the proper case, but their flags will be set
- * appropriately so that applying the flags would be harmless.
- *
- * Converts Punycode to a sequence of code points (presumed to be
- * Unicode code points).
- *
- * Return value: The return value can be any of the #Punycode_status
- * values defined above. If not %PUNYCODE_SUCCESS, then
- * @output_length, @output, and @case_flags might contain garbage.
- *
- **/
-int
-punycode_decode (size_t input_length,
- const char input[],
- size_t * output_length,
- punycode_uint output[], unsigned char case_flags[])
-{
- punycode_uint n, out, i, max_out, bias, oldi, w, k, digit, t;
- size_t b, j, in;
-
- /* Initialize the state: */
-
- n = initial_n;
- out = i = 0;
- max_out = *output_length > maxint ? maxint
- : (punycode_uint) * output_length;
- bias = initial_bias;
-
- /* Handle the basic code points: Let b be the number of input code */
- /* points before the last delimiter, or 0 if there is none, then */
- /* copy the first b code points to the output. */
-
- for (b = j = 0; j < input_length; ++j)
- if (delim (input[j]))
- b = j;
- if (b > max_out)
- return punycode_big_output;
-
- for (j = 0; j < b; ++j)
- {
- if (case_flags)
- case_flags[out] = flagged (input[j]);
- if (!basic (input[j]))
- return punycode_bad_input;
- output[out++] = input[j];
- }
-
- /* Main decoding loop: Start just after the last delimiter if any */
- /* basic code points were copied; start at the beginning otherwise. */
-
- for (in = b > 0 ? b + 1 : 0; in < input_length; ++out)
- {
-
- /* in is the index of the next ASCII code point to be consumed, */
- /* and out is the number of code points in the output array. */
-
- /* Decode a generalized variable-length integer into delta, */
- /* which gets added to i. The overflow checking is easier */
- /* if we increase i as we go, then subtract off its starting */
- /* value at the end to obtain delta. */
-
- for (oldi = i, w = 1, k = base;; k += base)
- {
- if (in >= input_length)
- return punycode_bad_input;
- digit = decode_digit (input[in++]);
- if (digit >= base)
- return punycode_bad_input;
- if (digit > (maxint - i) / w)
- return punycode_overflow;
- i += digit * w;
- t = k <= bias /* + tmin */ ? tmin : /* +tmin not needed */
- k >= bias + tmax ? tmax : k - bias;
- if (digit < t)
- break;
- if (w > maxint / (base - t))
- return punycode_overflow;
- w *= (base - t);
- }
-
- bias = adapt (i - oldi, out + 1, oldi == 0);
-
- /* i was supposed to wrap around from out+1 to 0, */
- /* incrementing n each time, so we'll fix that now: */
-
- if (i / (out + 1) > maxint - n)
- return punycode_overflow;
- n += i / (out + 1);
- i %= (out + 1);
-
- /* Insert n at position i of the output: */
-
- /* not needed for Punycode: */
- /* if (basic(n)) return punycode_invalid_input; */
- if (out >= max_out)
- return punycode_big_output;
-
- if (case_flags)
- {
- memmove (case_flags + i + 1, case_flags + i, out - i);
- /* Case of last ASCII code point determines case flag: */
- case_flags[i] = flagged (input[in - 1]);
- }
-
- memmove (output + i + 1, output + i, (out - i) * sizeof *output);
- output[i++] = n;
- }
-
- *output_length = (size_t) out;
- /* cannot overflow because out <= old value of *output_length */
- return punycode_success;
-}
-
-/**
- * punycode_uint
- *
- * Unicode code point data type, this is always a 32 bit unsigned
- * integer.
- */
-
-/**
- * Punycode_status
- * @PUNYCODE_SUCCESS: Successful operation. This value is guaranteed
- * to always be zero, the remaining ones are only guaranteed to hold
- * non-zero values, for logical comparison purposes.
- * @PUNYCODE_BAD_INPUT: Input is invalid.
- * @PUNYCODE_BIG_OUTPUT: Output would exceed the space provided.
- * @PUNYCODE_OVERFLOW: Input needs wider integers to process.
- *
- * Enumerated return codes of punycode_encode() and punycode_decode().
- * The value 0 is guaranteed to always correspond to success.
- */
diff --git a/3rdParty/LibIDN/src/punycode.h b/3rdParty/LibIDN/src/punycode.h
deleted file mode 100644
index 4872417..0000000
--- a/3rdParty/LibIDN/src/punycode.h
+++ /dev/null
@@ -1,218 +0,0 @@
-/* punycode.h --- Declarations for punycode functions.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-/*
- * This file is derived from RFC 3492bis written by Adam M. Costello.
- *
- * Disclaimer and license: Regarding this entire document or any
- * portion of it (including the pseudocode and C code), the author
- * makes no guarantees and is not responsible for any damage resulting
- * from its use. The author grants irrevocable permission to anyone
- * to use, modify, and distribute it in any way that does not diminish
- * the rights of anyone else to use, modify, and distribute it,
- * provided that redistributed derivative works do not contain
- * misleading author or version information. Derivative works need
- * not be licensed under similar terms.
- *
- * Copyright (C) The Internet Society (2003). All Rights Reserved.
- *
- * This document and translations of it may be copied and furnished to
- * others, and derivative works that comment on or otherwise explain it
- * or assist in its implementation may be prepared, copied, published
- * and distributed, in whole or in part, without restriction of any
- * kind, provided that the above copyright notice and this paragraph are
- * included on all such copies and derivative works. However, this
- * document itself may not be modified in any way, such as by removing
- * the copyright notice or references to the Internet Society or other
- * Internet organizations, except as needed for the purpose of
- * developing Internet standards in which case the procedures for
- * copyrights defined in the Internet Standards process must be
- * followed, or as required to translate it into languages other than
- * English.
- *
- * The limited permissions granted above are perpetual and will not be
- * revoked by the Internet Society or its successors or assigns.
- *
- * This document and the information contained herein is provided on an
- * "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
- * TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
- * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
- * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#ifndef _PUNYCODE_H
-#define _PUNYCODE_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <stddef.h> /* size_t */
-#include <idn-int.h> /* uint32_t */
-
- enum punycode_status
- {
- punycode_success = 0,
- punycode_bad_input = 1, /* Input is invalid. */
- punycode_big_output = 2, /* Output would exceed the space provided. */
- punycode_overflow = 3 /* Wider integers needed to process input. */
- };
-
- typedef enum
- {
- PUNYCODE_SUCCESS = punycode_success,
- PUNYCODE_BAD_INPUT = punycode_bad_input,
- PUNYCODE_BIG_OUTPUT = punycode_big_output,
- PUNYCODE_OVERFLOW = punycode_overflow
- } Punycode_status;
-
- extern const char *punycode_strerror (Punycode_status rc);
-
-/* punycode_uint needs to be unsigned and needs to be */
-/* at least 26 bits wide. */
-
- typedef uint32_t punycode_uint;
-
- extern int punycode_encode (size_t input_length,
- const punycode_uint input[],
- const unsigned char case_flags[],
- size_t * output_length, char output[]);
-
-/*
- punycode_encode() converts a sequence of code points (presumed to be
- Unicode code points) to Punycode.
-
- Input arguments (to be supplied by the caller):
-
- input_length
- The number of code points in the input array and the number
- of flags in the case_flags array.
-
- input
- An array of code points. They are presumed to be Unicode
- code points, but that is not strictly REQUIRED. The
- array contains code points, not code units. UTF-16 uses
- code units D800 through DFFF to refer to code points
- 10000..10FFFF. The code points D800..DFFF do not occur in
- any valid Unicode string. The code points that can occur in
- Unicode strings (0..D7FF and E000..10FFFF) are also called
- Unicode scalar values.
-
- case_flags
- A null pointer or an array of boolean values parallel to
- the input array. Nonzero (true, flagged) suggests that the
- corresponding Unicode character be forced to uppercase after
- being decoded (if possible), and zero (false, unflagged)
- suggests that it be forced to lowercase (if possible).
- ASCII code points (0..7F) are encoded literally, except that
- ASCII letters are forced to uppercase or lowercase according
- to the corresponding case flags. If case_flags is a null
- pointer then ASCII letters are left as they are, and other
- code points are treated as unflagged.
-
- Output arguments (to be filled in by the function):
-
- output
- An array of ASCII code points. It is *not* null-terminated;
- it will contain zeros if and only if the input contains
- zeros. (Of course the caller can leave room for a
- terminator and add one if needed.)
-
- Input/output arguments (to be supplied by the caller and overwritten
- by the function):
-
- output_length
- The caller passes in the maximum number of ASCII code points
- that it can receive. On successful return it will contain
- the number of ASCII code points actually output.
-
- Return value:
-
- Can be any of the punycode_status values defined above except
- punycode_bad_input. If not punycode_success, then output_size
- and output might contain garbage.
-*/
-
- extern int punycode_decode (size_t input_length,
- const char input[],
- size_t * output_length,
- punycode_uint output[],
- unsigned char case_flags[]);
-
-/*
- punycode_decode() converts Punycode to a sequence of code points
- (presumed to be Unicode code points).
-
- Input arguments (to be supplied by the caller):
-
- input_length
- The number of ASCII code points in the input array.
-
- input
- An array of ASCII code points (0..7F).
-
- Output arguments (to be filled in by the function):
-
- output
- An array of code points like the input argument of
- punycode_encode() (see above).
-
- case_flags
- A null pointer (if the flags are not needed by the caller)
- or an array of boolean values parallel to the output array.
- Nonzero (true, flagged) suggests that the corresponding
- Unicode character be forced to uppercase by the caller (if
- possible), and zero (false, unflagged) suggests that it
- be forced to lowercase (if possible). ASCII code points
- (0..7F) are output already in the proper case, but their
- flags will be set appropriately so that applying the flags
- would be harmless.
-
- Input/output arguments (to be supplied by the caller and overwritten
- by the function):
-
- output_length
- The caller passes in the maximum number of code points
- that it can receive into the output array (which is also
- the maximum number of flags that it can receive into the
- case_flags array, if case_flags is not a null pointer). On
- successful return it will contain the number of code points
- actually output (which is also the number of flags actually
- output, if case_flags is not a null pointer). The decoder
- will never need to output more code points than the number
- of ASCII code points in the input, because of the way the
- encoding is defined. The number of code points output
- cannot exceed the maximum possible value of a punycode_uint,
- even if the supplied output_length is greater than that.
-
- Return value:
-
- Can be any of the punycode_status values defined above. If not
- punycode_success, then output_length, output, and case_flags
- might contain garbage.
-*/
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _PUNYCODE_H */
diff --git a/3rdParty/LibIDN/src/rfc3454.c b/3rdParty/LibIDN/src/rfc3454.c
deleted file mode 100644
index 856b67a..0000000
--- a/3rdParty/LibIDN/src/rfc3454.c
+++ /dev/null
@@ -1,4252 +0,0 @@
-/* This file is automatically generated. DO NOT EDIT!
- Instead, edit gen-stringprep-tables.pl and re-run. */
-
-#include "stringprep.h"
-
-/*
- * So we can use this material. There may be other legal analysis that
- * also reach the same conclusion.
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_A_1[] = {
- { 0x000221 }, /* 0221 */
- { 0x000234, 0x00024F }, /* 0234-024F */
- { 0x0002AE, 0x0002AF }, /* 02AE-02AF */
- { 0x0002EF, 0x0002FF }, /* 02EF-02FF */
- { 0x000350, 0x00035F }, /* 0350-035F */
- { 0x000370, 0x000373 }, /* 0370-0373 */
- { 0x000376, 0x000379 }, /* 0376-0379 */
- { 0x00037B, 0x00037D }, /* 037B-037D */
- { 0x00037F, 0x000383 }, /* 037F-0383 */
- { 0x00038B }, /* 038B */
- { 0x00038D }, /* 038D */
- { 0x0003A2 }, /* 03A2 */
- { 0x0003CF }, /* 03CF */
- { 0x0003F7, 0x0003FF }, /* 03F7-03FF */
- { 0x000487 }, /* 0487 */
- { 0x0004CF }, /* 04CF */
- { 0x0004F6, 0x0004F7 }, /* 04F6-04F7 */
- { 0x0004FA, 0x0004FF }, /* 04FA-04FF */
- { 0x000510, 0x000530 }, /* 0510-0530 */
- { 0x000557, 0x000558 }, /* 0557-0558 */
- { 0x000560 }, /* 0560 */
- { 0x000588 }, /* 0588 */
- { 0x00058B, 0x000590 }, /* 058B-0590 */
- { 0x0005A2 }, /* 05A2 */
- { 0x0005BA }, /* 05BA */
- { 0x0005C5, 0x0005CF }, /* 05C5-05CF */
- { 0x0005EB, 0x0005EF }, /* 05EB-05EF */
- { 0x0005F5, 0x00060B }, /* 05F5-060B */
- { 0x00060D, 0x00061A }, /* 060D-061A */
- { 0x00061C, 0x00061E }, /* 061C-061E */
- { 0x000620 }, /* 0620 */
- { 0x00063B, 0x00063F }, /* 063B-063F */
- { 0x000656, 0x00065F }, /* 0656-065F */
- { 0x0006EE, 0x0006EF }, /* 06EE-06EF */
- { 0x0006FF }, /* 06FF */
- { 0x00070E }, /* 070E */
- { 0x00072D, 0x00072F }, /* 072D-072F */
- { 0x00074B, 0x00077F }, /* 074B-077F */
- { 0x0007B2, 0x000900 }, /* 07B2-0900 */
- { 0x000904 }, /* 0904 */
- { 0x00093A, 0x00093B }, /* 093A-093B */
- { 0x00094E, 0x00094F }, /* 094E-094F */
- { 0x000955, 0x000957 }, /* 0955-0957 */
- { 0x000971, 0x000980 }, /* 0971-0980 */
- { 0x000984 }, /* 0984 */
- { 0x00098D, 0x00098E }, /* 098D-098E */
- { 0x000991, 0x000992 }, /* 0991-0992 */
- { 0x0009A9 }, /* 09A9 */
- { 0x0009B1 }, /* 09B1 */
- { 0x0009B3, 0x0009B5 }, /* 09B3-09B5 */
- { 0x0009BA, 0x0009BB }, /* 09BA-09BB */
- { 0x0009BD }, /* 09BD */
- { 0x0009C5, 0x0009C6 }, /* 09C5-09C6 */
- { 0x0009C9, 0x0009CA }, /* 09C9-09CA */
- { 0x0009CE, 0x0009D6 }, /* 09CE-09D6 */
- { 0x0009D8, 0x0009DB }, /* 09D8-09DB */
- { 0x0009DE }, /* 09DE */
- { 0x0009E4, 0x0009E5 }, /* 09E4-09E5 */
- { 0x0009FB, 0x000A01 }, /* 09FB-0A01 */
- { 0x000A03, 0x000A04 }, /* 0A03-0A04 */
- { 0x000A0B, 0x000A0E }, /* 0A0B-0A0E */
- { 0x000A11, 0x000A12 }, /* 0A11-0A12 */
- { 0x000A29 }, /* 0A29 */
- { 0x000A31 }, /* 0A31 */
- { 0x000A34 }, /* 0A34 */
- { 0x000A37 }, /* 0A37 */
- { 0x000A3A, 0x000A3B }, /* 0A3A-0A3B */
- { 0x000A3D }, /* 0A3D */
- { 0x000A43, 0x000A46 }, /* 0A43-0A46 */
- { 0x000A49, 0x000A4A }, /* 0A49-0A4A */
- { 0x000A4E, 0x000A58 }, /* 0A4E-0A58 */
- { 0x000A5D }, /* 0A5D */
- { 0x000A5F, 0x000A65 }, /* 0A5F-0A65 */
- { 0x000A75, 0x000A80 }, /* 0A75-0A80 */
- { 0x000A84 }, /* 0A84 */
- { 0x000A8C }, /* 0A8C */
- { 0x000A8E }, /* 0A8E */
- { 0x000A92 }, /* 0A92 */
- { 0x000AA9 }, /* 0AA9 */
- { 0x000AB1 }, /* 0AB1 */
- { 0x000AB4 }, /* 0AB4 */
- { 0x000ABA, 0x000ABB }, /* 0ABA-0ABB */
- { 0x000AC6 }, /* 0AC6 */
- { 0x000ACA }, /* 0ACA */
- { 0x000ACE, 0x000ACF }, /* 0ACE-0ACF */
- { 0x000AD1, 0x000ADF }, /* 0AD1-0ADF */
- { 0x000AE1, 0x000AE5 }, /* 0AE1-0AE5 */
- { 0x000AF0, 0x000B00 }, /* 0AF0-0B00 */
- { 0x000B04 }, /* 0B04 */
- { 0x000B0D, 0x000B0E }, /* 0B0D-0B0E */
- { 0x000B11, 0x000B12 }, /* 0B11-0B12 */
- { 0x000B29 }, /* 0B29 */
- { 0x000B31 }, /* 0B31 */
- { 0x000B34, 0x000B35 }, /* 0B34-0B35 */
- { 0x000B3A, 0x000B3B }, /* 0B3A-0B3B */
- { 0x000B44, 0x000B46 }, /* 0B44-0B46 */
- { 0x000B49, 0x000B4A }, /* 0B49-0B4A */
- { 0x000B4E, 0x000B55 }, /* 0B4E-0B55 */
- { 0x000B58, 0x000B5B }, /* 0B58-0B5B */
- { 0x000B5E }, /* 0B5E */
- { 0x000B62, 0x000B65 }, /* 0B62-0B65 */
- { 0x000B71, 0x000B81 }, /* 0B71-0B81 */
- { 0x000B84 }, /* 0B84 */
- { 0x000B8B, 0x000B8D }, /* 0B8B-0B8D */
- { 0x000B91 }, /* 0B91 */
- { 0x000B96, 0x000B98 }, /* 0B96-0B98 */
- { 0x000B9B }, /* 0B9B */
- { 0x000B9D }, /* 0B9D */
- { 0x000BA0, 0x000BA2 }, /* 0BA0-0BA2 */
- { 0x000BA5, 0x000BA7 }, /* 0BA5-0BA7 */
- { 0x000BAB, 0x000BAD }, /* 0BAB-0BAD */
- { 0x000BB6 }, /* 0BB6 */
- { 0x000BBA, 0x000BBD }, /* 0BBA-0BBD */
- { 0x000BC3, 0x000BC5 }, /* 0BC3-0BC5 */
- { 0x000BC9 }, /* 0BC9 */
- { 0x000BCE, 0x000BD6 }, /* 0BCE-0BD6 */
- { 0x000BD8, 0x000BE6 }, /* 0BD8-0BE6 */
- { 0x000BF3, 0x000C00 }, /* 0BF3-0C00 */
- { 0x000C04 }, /* 0C04 */
- { 0x000C0D }, /* 0C0D */
- { 0x000C11 }, /* 0C11 */
- { 0x000C29 }, /* 0C29 */
- { 0x000C34 }, /* 0C34 */
- { 0x000C3A, 0x000C3D }, /* 0C3A-0C3D */
- { 0x000C45 }, /* 0C45 */
- { 0x000C49 }, /* 0C49 */
- { 0x000C4E, 0x000C54 }, /* 0C4E-0C54 */
- { 0x000C57, 0x000C5F }, /* 0C57-0C5F */
- { 0x000C62, 0x000C65 }, /* 0C62-0C65 */
- { 0x000C70, 0x000C81 }, /* 0C70-0C81 */
- { 0x000C84 }, /* 0C84 */
- { 0x000C8D }, /* 0C8D */
- { 0x000C91 }, /* 0C91 */
- { 0x000CA9 }, /* 0CA9 */
- { 0x000CB4 }, /* 0CB4 */
- { 0x000CBA, 0x000CBD }, /* 0CBA-0CBD */
- { 0x000CC5 }, /* 0CC5 */
- { 0x000CC9 }, /* 0CC9 */
- { 0x000CCE, 0x000CD4 }, /* 0CCE-0CD4 */
- { 0x000CD7, 0x000CDD }, /* 0CD7-0CDD */
- { 0x000CDF }, /* 0CDF */
- { 0x000CE2, 0x000CE5 }, /* 0CE2-0CE5 */
- { 0x000CF0, 0x000D01 }, /* 0CF0-0D01 */
- { 0x000D04 }, /* 0D04 */
- { 0x000D0D }, /* 0D0D */
- { 0x000D11 }, /* 0D11 */
- { 0x000D29 }, /* 0D29 */
- { 0x000D3A, 0x000D3D }, /* 0D3A-0D3D */
- { 0x000D44, 0x000D45 }, /* 0D44-0D45 */
- { 0x000D49 }, /* 0D49 */
- { 0x000D4E, 0x000D56 }, /* 0D4E-0D56 */
- { 0x000D58, 0x000D5F }, /* 0D58-0D5F */
- { 0x000D62, 0x000D65 }, /* 0D62-0D65 */
- { 0x000D70, 0x000D81 }, /* 0D70-0D81 */
- { 0x000D84 }, /* 0D84 */
- { 0x000D97, 0x000D99 }, /* 0D97-0D99 */
- { 0x000DB2 }, /* 0DB2 */
- { 0x000DBC }, /* 0DBC */
- { 0x000DBE, 0x000DBF }, /* 0DBE-0DBF */
- { 0x000DC7, 0x000DC9 }, /* 0DC7-0DC9 */
- { 0x000DCB, 0x000DCE }, /* 0DCB-0DCE */
- { 0x000DD5 }, /* 0DD5 */
- { 0x000DD7 }, /* 0DD7 */
- { 0x000DE0, 0x000DF1 }, /* 0DE0-0DF1 */
- { 0x000DF5, 0x000E00 }, /* 0DF5-0E00 */
- { 0x000E3B, 0x000E3E }, /* 0E3B-0E3E */
- { 0x000E5C, 0x000E80 }, /* 0E5C-0E80 */
- { 0x000E83 }, /* 0E83 */
- { 0x000E85, 0x000E86 }, /* 0E85-0E86 */
- { 0x000E89 }, /* 0E89 */
- { 0x000E8B, 0x000E8C }, /* 0E8B-0E8C */
- { 0x000E8E, 0x000E93 }, /* 0E8E-0E93 */
- { 0x000E98 }, /* 0E98 */
- { 0x000EA0 }, /* 0EA0 */
- { 0x000EA4 }, /* 0EA4 */
- { 0x000EA6 }, /* 0EA6 */
- { 0x000EA8, 0x000EA9 }, /* 0EA8-0EA9 */
- { 0x000EAC }, /* 0EAC */
- { 0x000EBA }, /* 0EBA */
- { 0x000EBE, 0x000EBF }, /* 0EBE-0EBF */
- { 0x000EC5 }, /* 0EC5 */
- { 0x000EC7 }, /* 0EC7 */
- { 0x000ECE, 0x000ECF }, /* 0ECE-0ECF */
- { 0x000EDA, 0x000EDB }, /* 0EDA-0EDB */
- { 0x000EDE, 0x000EFF }, /* 0EDE-0EFF */
- { 0x000F48 }, /* 0F48 */
- { 0x000F6B, 0x000F70 }, /* 0F6B-0F70 */
- { 0x000F8C, 0x000F8F }, /* 0F8C-0F8F */
- { 0x000F98 }, /* 0F98 */
- { 0x000FBD }, /* 0FBD */
- { 0x000FCD, 0x000FCE }, /* 0FCD-0FCE */
- { 0x000FD0, 0x000FFF }, /* 0FD0-0FFF */
- { 0x001022 }, /* 1022 */
- { 0x001028 }, /* 1028 */
- { 0x00102B }, /* 102B */
- { 0x001033, 0x001035 }, /* 1033-1035 */
- { 0x00103A, 0x00103F }, /* 103A-103F */
- { 0x00105A, 0x00109F }, /* 105A-109F */
- { 0x0010C6, 0x0010CF }, /* 10C6-10CF */
- { 0x0010F9, 0x0010FA }, /* 10F9-10FA */
- { 0x0010FC, 0x0010FF }, /* 10FC-10FF */
- { 0x00115A, 0x00115E }, /* 115A-115E */
- { 0x0011A3, 0x0011A7 }, /* 11A3-11A7 */
- { 0x0011FA, 0x0011FF }, /* 11FA-11FF */
- { 0x001207 }, /* 1207 */
- { 0x001247 }, /* 1247 */
- { 0x001249 }, /* 1249 */
- { 0x00124E, 0x00124F }, /* 124E-124F */
- { 0x001257 }, /* 1257 */
- { 0x001259 }, /* 1259 */
- { 0x00125E, 0x00125F }, /* 125E-125F */
- { 0x001287 }, /* 1287 */
- { 0x001289 }, /* 1289 */
- { 0x00128E, 0x00128F }, /* 128E-128F */
- { 0x0012AF }, /* 12AF */
- { 0x0012B1 }, /* 12B1 */
- { 0x0012B6, 0x0012B7 }, /* 12B6-12B7 */
- { 0x0012BF }, /* 12BF */
- { 0x0012C1 }, /* 12C1 */
- { 0x0012C6, 0x0012C7 }, /* 12C6-12C7 */
- { 0x0012CF }, /* 12CF */
- { 0x0012D7 }, /* 12D7 */
- { 0x0012EF }, /* 12EF */
- { 0x00130F }, /* 130F */
- { 0x001311 }, /* 1311 */
- { 0x001316, 0x001317 }, /* 1316-1317 */
- { 0x00131F }, /* 131F */
- { 0x001347 }, /* 1347 */
- { 0x00135B, 0x001360 }, /* 135B-1360 */
- { 0x00137D, 0x00139F }, /* 137D-139F */
- { 0x0013F5, 0x001400 }, /* 13F5-1400 */
- { 0x001677, 0x00167F }, /* 1677-167F */
- { 0x00169D, 0x00169F }, /* 169D-169F */
- { 0x0016F1, 0x0016FF }, /* 16F1-16FF */
- { 0x00170D }, /* 170D */
- { 0x001715, 0x00171F }, /* 1715-171F */
- { 0x001737, 0x00173F }, /* 1737-173F */
- { 0x001754, 0x00175F }, /* 1754-175F */
- { 0x00176D }, /* 176D */
- { 0x001771 }, /* 1771 */
- { 0x001774, 0x00177F }, /* 1774-177F */
- { 0x0017DD, 0x0017DF }, /* 17DD-17DF */
- { 0x0017EA, 0x0017FF }, /* 17EA-17FF */
- { 0x00180F }, /* 180F */
- { 0x00181A, 0x00181F }, /* 181A-181F */
- { 0x001878, 0x00187F }, /* 1878-187F */
- { 0x0018AA, 0x001DFF }, /* 18AA-1DFF */
- { 0x001E9C, 0x001E9F }, /* 1E9C-1E9F */
- { 0x001EFA, 0x001EFF }, /* 1EFA-1EFF */
- { 0x001F16, 0x001F17 }, /* 1F16-1F17 */
- { 0x001F1E, 0x001F1F }, /* 1F1E-1F1F */
- { 0x001F46, 0x001F47 }, /* 1F46-1F47 */
- { 0x001F4E, 0x001F4F }, /* 1F4E-1F4F */
- { 0x001F58 }, /* 1F58 */
- { 0x001F5A }, /* 1F5A */
- { 0x001F5C }, /* 1F5C */
- { 0x001F5E }, /* 1F5E */
- { 0x001F7E, 0x001F7F }, /* 1F7E-1F7F */
- { 0x001FB5 }, /* 1FB5 */
- { 0x001FC5 }, /* 1FC5 */
- { 0x001FD4, 0x001FD5 }, /* 1FD4-1FD5 */
- { 0x001FDC }, /* 1FDC */
- { 0x001FF0, 0x001FF1 }, /* 1FF0-1FF1 */
- { 0x001FF5 }, /* 1FF5 */
- { 0x001FFF }, /* 1FFF */
- { 0x002053, 0x002056 }, /* 2053-2056 */
- { 0x002058, 0x00205E }, /* 2058-205E */
- { 0x002064, 0x002069 }, /* 2064-2069 */
- { 0x002072, 0x002073 }, /* 2072-2073 */
- { 0x00208F, 0x00209F }, /* 208F-209F */
- { 0x0020B2, 0x0020CF }, /* 20B2-20CF */
- { 0x0020EB, 0x0020FF }, /* 20EB-20FF */
- { 0x00213B, 0x00213C }, /* 213B-213C */
- { 0x00214C, 0x002152 }, /* 214C-2152 */
- { 0x002184, 0x00218F }, /* 2184-218F */
- { 0x0023CF, 0x0023FF }, /* 23CF-23FF */
- { 0x002427, 0x00243F }, /* 2427-243F */
- { 0x00244B, 0x00245F }, /* 244B-245F */
- { 0x0024FF }, /* 24FF */
- { 0x002614, 0x002615 }, /* 2614-2615 */
- { 0x002618 }, /* 2618 */
- { 0x00267E, 0x00267F }, /* 267E-267F */
- { 0x00268A, 0x002700 }, /* 268A-2700 */
- { 0x002705 }, /* 2705 */
- { 0x00270A, 0x00270B }, /* 270A-270B */
- { 0x002728 }, /* 2728 */
- { 0x00274C }, /* 274C */
- { 0x00274E }, /* 274E */
- { 0x002753, 0x002755 }, /* 2753-2755 */
- { 0x002757 }, /* 2757 */
- { 0x00275F, 0x002760 }, /* 275F-2760 */
- { 0x002795, 0x002797 }, /* 2795-2797 */
- { 0x0027B0 }, /* 27B0 */
- { 0x0027BF, 0x0027CF }, /* 27BF-27CF */
- { 0x0027EC, 0x0027EF }, /* 27EC-27EF */
- { 0x002B00, 0x002E7F }, /* 2B00-2E7F */
- { 0x002E9A }, /* 2E9A */
- { 0x002EF4, 0x002EFF }, /* 2EF4-2EFF */
- { 0x002FD6, 0x002FEF }, /* 2FD6-2FEF */
- { 0x002FFC, 0x002FFF }, /* 2FFC-2FFF */
- { 0x003040 }, /* 3040 */
- { 0x003097, 0x003098 }, /* 3097-3098 */
- { 0x003100, 0x003104 }, /* 3100-3104 */
- { 0x00312D, 0x003130 }, /* 312D-3130 */
- { 0x00318F }, /* 318F */
- { 0x0031B8, 0x0031EF }, /* 31B8-31EF */
- { 0x00321D, 0x00321F }, /* 321D-321F */
- { 0x003244, 0x003250 }, /* 3244-3250 */
- { 0x00327C, 0x00327E }, /* 327C-327E */
- { 0x0032CC, 0x0032CF }, /* 32CC-32CF */
- { 0x0032FF }, /* 32FF */
- { 0x003377, 0x00337A }, /* 3377-337A */
- { 0x0033DE, 0x0033DF }, /* 33DE-33DF */
- { 0x0033FF }, /* 33FF */
- { 0x004DB6, 0x004DFF }, /* 4DB6-4DFF */
- { 0x009FA6, 0x009FFF }, /* 9FA6-9FFF */
- { 0x00A48D, 0x00A48F }, /* A48D-A48F */
- { 0x00A4C7, 0x00ABFF }, /* A4C7-ABFF */
- { 0x00D7A4, 0x00D7FF }, /* D7A4-D7FF */
- { 0x00FA2E, 0x00FA2F }, /* FA2E-FA2F */
- { 0x00FA6B, 0x00FAFF }, /* FA6B-FAFF */
- { 0x00FB07, 0x00FB12 }, /* FB07-FB12 */
- { 0x00FB18, 0x00FB1C }, /* FB18-FB1C */
- { 0x00FB37 }, /* FB37 */
- { 0x00FB3D }, /* FB3D */
- { 0x00FB3F }, /* FB3F */
- { 0x00FB42 }, /* FB42 */
- { 0x00FB45 }, /* FB45 */
- { 0x00FBB2, 0x00FBD2 }, /* FBB2-FBD2 */
- { 0x00FD40, 0x00FD4F }, /* FD40-FD4F */
- { 0x00FD90, 0x00FD91 }, /* FD90-FD91 */
- { 0x00FDC8, 0x00FDCF }, /* FDC8-FDCF */
- { 0x00FDFD, 0x00FDFF }, /* FDFD-FDFF */
- { 0x00FE10, 0x00FE1F }, /* FE10-FE1F */
- { 0x00FE24, 0x00FE2F }, /* FE24-FE2F */
- { 0x00FE47, 0x00FE48 }, /* FE47-FE48 */
- { 0x00FE53 }, /* FE53 */
- { 0x00FE67 }, /* FE67 */
- { 0x00FE6C, 0x00FE6F }, /* FE6C-FE6F */
- { 0x00FE75 }, /* FE75 */
- { 0x00FEFD, 0x00FEFE }, /* FEFD-FEFE */
- { 0x00FF00 }, /* FF00 */
- { 0x00FFBF, 0x00FFC1 }, /* FFBF-FFC1 */
- { 0x00FFC8, 0x00FFC9 }, /* FFC8-FFC9 */
- { 0x00FFD0, 0x00FFD1 }, /* FFD0-FFD1 */
- { 0x00FFD8, 0x00FFD9 }, /* FFD8-FFD9 */
- { 0x00FFDD, 0x00FFDF }, /* FFDD-FFDF */
- { 0x00FFE7 }, /* FFE7 */
- { 0x00FFEF, 0x00FFF8 }, /* FFEF-FFF8 */
- { 0x010000, 0x0102FF }, /* 10000-102FF */
- { 0x01031F }, /* 1031F */
- { 0x010324, 0x01032F }, /* 10324-1032F */
- { 0x01034B, 0x0103FF }, /* 1034B-103FF */
- { 0x010426, 0x010427 }, /* 10426-10427 */
- { 0x01044E, 0x01CFFF }, /* 1044E-1CFFF */
- { 0x01D0F6, 0x01D0FF }, /* 1D0F6-1D0FF */
- { 0x01D127, 0x01D129 }, /* 1D127-1D129 */
- { 0x01D1DE, 0x01D3FF }, /* 1D1DE-1D3FF */
- { 0x01D455 }, /* 1D455 */
- { 0x01D49D }, /* 1D49D */
- { 0x01D4A0, 0x01D4A1 }, /* 1D4A0-1D4A1 */
- { 0x01D4A3, 0x01D4A4 }, /* 1D4A3-1D4A4 */
- { 0x01D4A7, 0x01D4A8 }, /* 1D4A7-1D4A8 */
- { 0x01D4AD }, /* 1D4AD */
- { 0x01D4BA }, /* 1D4BA */
- { 0x01D4BC }, /* 1D4BC */
- { 0x01D4C1 }, /* 1D4C1 */
- { 0x01D4C4 }, /* 1D4C4 */
- { 0x01D506 }, /* 1D506 */
- { 0x01D50B, 0x01D50C }, /* 1D50B-1D50C */
- { 0x01D515 }, /* 1D515 */
- { 0x01D51D }, /* 1D51D */
- { 0x01D53A }, /* 1D53A */
- { 0x01D53F }, /* 1D53F */
- { 0x01D545 }, /* 1D545 */
- { 0x01D547, 0x01D549 }, /* 1D547-1D549 */
- { 0x01D551 }, /* 1D551 */
- { 0x01D6A4, 0x01D6A7 }, /* 1D6A4-1D6A7 */
- { 0x01D7CA, 0x01D7CD }, /* 1D7CA-1D7CD */
- { 0x01D800, 0x01FFFD }, /* 1D800-1FFFD */
- { 0x02A6D7, 0x02F7FF }, /* 2A6D7-2F7FF */
- { 0x02FA1E, 0x02FFFD }, /* 2FA1E-2FFFD */
- { 0x030000, 0x03FFFD }, /* 30000-3FFFD */
- { 0x040000, 0x04FFFD }, /* 40000-4FFFD */
- { 0x050000, 0x05FFFD }, /* 50000-5FFFD */
- { 0x060000, 0x06FFFD }, /* 60000-6FFFD */
- { 0x070000, 0x07FFFD }, /* 70000-7FFFD */
- { 0x080000, 0x08FFFD }, /* 80000-8FFFD */
- { 0x090000, 0x09FFFD }, /* 90000-9FFFD */
- { 0x0A0000, 0x0AFFFD }, /* A0000-AFFFD */
- { 0x0B0000, 0x0BFFFD }, /* B0000-BFFFD */
- { 0x0C0000, 0x0CFFFD }, /* C0000-CFFFD */
- { 0x0D0000, 0x0DFFFD }, /* D0000-DFFFD */
- { 0x0E0000 }, /* E0000 */
- { 0x0E0002, 0x0E001F }, /* E0002-E001F */
- { 0x0E0080, 0x0EFFFD }, /* E0080-EFFFD */
- { 0 },
-};
-
-
-/*
- * E0080-EFFFD
- *
- */
-
-const Stringprep_table_element stringprep_rfc3454_B_1[] = {
- { 0x0000AD }, /* 00AD; ; Map to nothing */
- { 0x00034F }, /* 034F; ; Map to nothing */
- { 0x001806 }, /* 1806; ; Map to nothing */
- { 0x00180B }, /* 180B; ; Map to nothing */
- { 0x00180C }, /* 180C; ; Map to nothing */
- { 0x00180D }, /* 180D; ; Map to nothing */
- { 0x00200B }, /* 200B; ; Map to nothing */
- { 0x00200C }, /* 200C; ; Map to nothing */
- { 0x00200D }, /* 200D; ; Map to nothing */
- { 0x002060 }, /* 2060; ; Map to nothing */
- { 0x00FE00 }, /* FE00; ; Map to nothing */
- { 0x00FE01 }, /* FE01; ; Map to nothing */
- { 0x00FE02 }, /* FE02; ; Map to nothing */
- { 0x00FE03 }, /* FE03; ; Map to nothing */
- { 0x00FE04 }, /* FE04; ; Map to nothing */
- { 0x00FE05 }, /* FE05; ; Map to nothing */
- { 0x00FE06 }, /* FE06; ; Map to nothing */
- { 0x00FE07 }, /* FE07; ; Map to nothing */
- { 0x00FE08 }, /* FE08; ; Map to nothing */
- { 0x00FE09 }, /* FE09; ; Map to nothing */
- { 0x00FE0A }, /* FE0A; ; Map to nothing */
- { 0x00FE0B }, /* FE0B; ; Map to nothing */
- { 0x00FE0C }, /* FE0C; ; Map to nothing */
- { 0x00FE0D }, /* FE0D; ; Map to nothing */
- { 0x00FE0E }, /* FE0E; ; Map to nothing */
- { 0x00FE0F }, /* FE0F; ; Map to nothing */
- { 0x00FEFF }, /* FEFF; ; Map to nothing */
- { 0 },
-};
-
-
-/*
- * FEFF; ; Map to nothing
- *
- */
-
-const Stringprep_table_element stringprep_rfc3454_B_2[] = {
- { 0x000041, 0, { 0x000061 }}, /* 0041; 0061; Case map */
- { 0x000042, 0, { 0x000062 }}, /* 0042; 0062; Case map */
- { 0x000043, 0, { 0x000063 }}, /* 0043; 0063; Case map */
- { 0x000044, 0, { 0x000064 }}, /* 0044; 0064; Case map */
- { 0x000045, 0, { 0x000065 }}, /* 0045; 0065; Case map */
- { 0x000046, 0, { 0x000066 }}, /* 0046; 0066; Case map */
- { 0x000047, 0, { 0x000067 }}, /* 0047; 0067; Case map */
- { 0x000048, 0, { 0x000068 }}, /* 0048; 0068; Case map */
- { 0x000049, 0, { 0x000069 }}, /* 0049; 0069; Case map */
- { 0x00004A, 0, { 0x00006A }}, /* 004A; 006A; Case map */
- { 0x00004B, 0, { 0x00006B }}, /* 004B; 006B; Case map */
- { 0x00004C, 0, { 0x00006C }}, /* 004C; 006C; Case map */
- { 0x00004D, 0, { 0x00006D }}, /* 004D; 006D; Case map */
- { 0x00004E, 0, { 0x00006E }}, /* 004E; 006E; Case map */
- { 0x00004F, 0, { 0x00006F }}, /* 004F; 006F; Case map */
- { 0x000050, 0, { 0x000070 }}, /* 0050; 0070; Case map */
- { 0x000051, 0, { 0x000071 }}, /* 0051; 0071; Case map */
- { 0x000052, 0, { 0x000072 }}, /* 0052; 0072; Case map */
- { 0x000053, 0, { 0x000073 }}, /* 0053; 0073; Case map */
- { 0x000054, 0, { 0x000074 }}, /* 0054; 0074; Case map */
- { 0x000055, 0, { 0x000075 }}, /* 0055; 0075; Case map */
- { 0x000056, 0, { 0x000076 }}, /* 0056; 0076; Case map */
- { 0x000057, 0, { 0x000077 }}, /* 0057; 0077; Case map */
- { 0x000058, 0, { 0x000078 }}, /* 0058; 0078; Case map */
- { 0x000059, 0, { 0x000079 }}, /* 0059; 0079; Case map */
- { 0x00005A, 0, { 0x00007A }}, /* 005A; 007A; Case map */
- { 0x0000B5, 0, { 0x0003BC }}, /* 00B5; 03BC; Case map */
- { 0x0000C0, 0, { 0x0000E0 }}, /* 00C0; 00E0; Case map */
- { 0x0000C1, 0, { 0x0000E1 }}, /* 00C1; 00E1; Case map */
- { 0x0000C2, 0, { 0x0000E2 }}, /* 00C2; 00E2; Case map */
- { 0x0000C3, 0, { 0x0000E3 }}, /* 00C3; 00E3; Case map */
- { 0x0000C4, 0, { 0x0000E4 }}, /* 00C4; 00E4; Case map */
- { 0x0000C5, 0, { 0x0000E5 }}, /* 00C5; 00E5; Case map */
- { 0x0000C6, 0, { 0x0000E6 }}, /* 00C6; 00E6; Case map */
- { 0x0000C7, 0, { 0x0000E7 }}, /* 00C7; 00E7; Case map */
- { 0x0000C8, 0, { 0x0000E8 }}, /* 00C8; 00E8; Case map */
- { 0x0000C9, 0, { 0x0000E9 }}, /* 00C9; 00E9; Case map */
- { 0x0000CA, 0, { 0x0000EA }}, /* 00CA; 00EA; Case map */
- { 0x0000CB, 0, { 0x0000EB }}, /* 00CB; 00EB; Case map */
- { 0x0000CC, 0, { 0x0000EC }}, /* 00CC; 00EC; Case map */
- { 0x0000CD, 0, { 0x0000ED }}, /* 00CD; 00ED; Case map */
- { 0x0000CE, 0, { 0x0000EE }}, /* 00CE; 00EE; Case map */
- { 0x0000CF, 0, { 0x0000EF }}, /* 00CF; 00EF; Case map */
- { 0x0000D0, 0, { 0x0000F0 }}, /* 00D0; 00F0; Case map */
- { 0x0000D1, 0, { 0x0000F1 }}, /* 00D1; 00F1; Case map */
- { 0x0000D2, 0, { 0x0000F2 }}, /* 00D2; 00F2; Case map */
- { 0x0000D3, 0, { 0x0000F3 }}, /* 00D3; 00F3; Case map */
- { 0x0000D4, 0, { 0x0000F4 }}, /* 00D4; 00F4; Case map */
- { 0x0000D5, 0, { 0x0000F5 }}, /* 00D5; 00F5; Case map */
- { 0x0000D6, 0, { 0x0000F6 }}, /* 00D6; 00F6; Case map */
- { 0x0000D8, 0, { 0x0000F8 }}, /* 00D8; 00F8; Case map */
- { 0x0000D9, 0, { 0x0000F9 }}, /* 00D9; 00F9; Case map */
- { 0x0000DA, 0, { 0x0000FA }}, /* 00DA; 00FA; Case map */
- { 0x0000DB, 0, { 0x0000FB }}, /* 00DB; 00FB; Case map */
- { 0x0000DC, 0, { 0x0000FC }}, /* 00DC; 00FC; Case map */
- { 0x0000DD, 0, { 0x0000FD }}, /* 00DD; 00FD; Case map */
- { 0x0000DE, 0, { 0x0000FE }}, /* 00DE; 00FE; Case map */
- { 0x0000DF, 0, { 0x000073, /* 00DF; 0073 0073; Case map */
- 0x000073 }},
- { 0x000100, 0, { 0x000101 }}, /* 0100; 0101; Case map */
- { 0x000102, 0, { 0x000103 }}, /* 0102; 0103; Case map */
- { 0x000104, 0, { 0x000105 }}, /* 0104; 0105; Case map */
- { 0x000106, 0, { 0x000107 }}, /* 0106; 0107; Case map */
- { 0x000108, 0, { 0x000109 }}, /* 0108; 0109; Case map */
- { 0x00010A, 0, { 0x00010B }}, /* 010A; 010B; Case map */
- { 0x00010C, 0, { 0x00010D }}, /* 010C; 010D; Case map */
- { 0x00010E, 0, { 0x00010F }}, /* 010E; 010F; Case map */
- { 0x000110, 0, { 0x000111 }}, /* 0110; 0111; Case map */
- { 0x000112, 0, { 0x000113 }}, /* 0112; 0113; Case map */
- { 0x000114, 0, { 0x000115 }}, /* 0114; 0115; Case map */
- { 0x000116, 0, { 0x000117 }}, /* 0116; 0117; Case map */
- { 0x000118, 0, { 0x000119 }}, /* 0118; 0119; Case map */
- { 0x00011A, 0, { 0x00011B }}, /* 011A; 011B; Case map */
- { 0x00011C, 0, { 0x00011D }}, /* 011C; 011D; Case map */
- { 0x00011E, 0, { 0x00011F }}, /* 011E; 011F; Case map */
- { 0x000120, 0, { 0x000121 }}, /* 0120; 0121; Case map */
- { 0x000122, 0, { 0x000123 }}, /* 0122; 0123; Case map */
- { 0x000124, 0, { 0x000125 }}, /* 0124; 0125; Case map */
- { 0x000126, 0, { 0x000127 }}, /* 0126; 0127; Case map */
- { 0x000128, 0, { 0x000129 }}, /* 0128; 0129; Case map */
- { 0x00012A, 0, { 0x00012B }}, /* 012A; 012B; Case map */
- { 0x00012C, 0, { 0x00012D }}, /* 012C; 012D; Case map */
- { 0x00012E, 0, { 0x00012F }}, /* 012E; 012F; Case map */
- { 0x000130, 0, { 0x000069, /* 0130; 0069 0307; Case map */
- 0x000307 }},
- { 0x000132, 0, { 0x000133 }}, /* 0132; 0133; Case map */
- { 0x000134, 0, { 0x000135 }}, /* 0134; 0135; Case map */
- { 0x000136, 0, { 0x000137 }}, /* 0136; 0137; Case map */
- { 0x000139, 0, { 0x00013A }}, /* 0139; 013A; Case map */
- { 0x00013B, 0, { 0x00013C }}, /* 013B; 013C; Case map */
- { 0x00013D, 0, { 0x00013E }}, /* 013D; 013E; Case map */
- { 0x00013F, 0, { 0x000140 }}, /* 013F; 0140; Case map */
- { 0x000141, 0, { 0x000142 }}, /* 0141; 0142; Case map */
- { 0x000143, 0, { 0x000144 }}, /* 0143; 0144; Case map */
- { 0x000145, 0, { 0x000146 }}, /* 0145; 0146; Case map */
- { 0x000147, 0, { 0x000148 }}, /* 0147; 0148; Case map */
- { 0x000149, 0, { 0x0002BC, /* 0149; 02BC 006E; Case map */
- 0x00006E }},
- { 0x00014A, 0, { 0x00014B }}, /* 014A; 014B; Case map */
- { 0x00014C, 0, { 0x00014D }}, /* 014C; 014D; Case map */
- { 0x00014E, 0, { 0x00014F }}, /* 014E; 014F; Case map */
- { 0x000150, 0, { 0x000151 }}, /* 0150; 0151; Case map */
- { 0x000152, 0, { 0x000153 }}, /* 0152; 0153; Case map */
- { 0x000154, 0, { 0x000155 }}, /* 0154; 0155; Case map */
- { 0x000156, 0, { 0x000157 }}, /* 0156; 0157; Case map */
- { 0x000158, 0, { 0x000159 }}, /* 0158; 0159; Case map */
- { 0x00015A, 0, { 0x00015B }}, /* 015A; 015B; Case map */
- { 0x00015C, 0, { 0x00015D }}, /* 015C; 015D; Case map */
- { 0x00015E, 0, { 0x00015F }}, /* 015E; 015F; Case map */
- { 0x000160, 0, { 0x000161 }}, /* 0160; 0161; Case map */
- { 0x000162, 0, { 0x000163 }}, /* 0162; 0163; Case map */
- { 0x000164, 0, { 0x000165 }}, /* 0164; 0165; Case map */
- { 0x000166, 0, { 0x000167 }}, /* 0166; 0167; Case map */
- { 0x000168, 0, { 0x000169 }}, /* 0168; 0169; Case map */
- { 0x00016A, 0, { 0x00016B }}, /* 016A; 016B; Case map */
- { 0x00016C, 0, { 0x00016D }}, /* 016C; 016D; Case map */
- { 0x00016E, 0, { 0x00016F }}, /* 016E; 016F; Case map */
- { 0x000170, 0, { 0x000171 }}, /* 0170; 0171; Case map */
- { 0x000172, 0, { 0x000173 }}, /* 0172; 0173; Case map */
- { 0x000174, 0, { 0x000175 }}, /* 0174; 0175; Case map */
- { 0x000176, 0, { 0x000177 }}, /* 0176; 0177; Case map */
- { 0x000178, 0, { 0x0000FF }}, /* 0178; 00FF; Case map */
- { 0x000179, 0, { 0x00017A }}, /* 0179; 017A; Case map */
- { 0x00017B, 0, { 0x00017C }}, /* 017B; 017C; Case map */
- { 0x00017D, 0, { 0x00017E }}, /* 017D; 017E; Case map */
- { 0x00017F, 0, { 0x000073 }}, /* 017F; 0073; Case map */
- { 0x000181, 0, { 0x000253 }}, /* 0181; 0253; Case map */
- { 0x000182, 0, { 0x000183 }}, /* 0182; 0183; Case map */
- { 0x000184, 0, { 0x000185 }}, /* 0184; 0185; Case map */
- { 0x000186, 0, { 0x000254 }}, /* 0186; 0254; Case map */
- { 0x000187, 0, { 0x000188 }}, /* 0187; 0188; Case map */
- { 0x000189, 0, { 0x000256 }}, /* 0189; 0256; Case map */
- { 0x00018A, 0, { 0x000257 }}, /* 018A; 0257; Case map */
- { 0x00018B, 0, { 0x00018C }}, /* 018B; 018C; Case map */
- { 0x00018E, 0, { 0x0001DD }}, /* 018E; 01DD; Case map */
- { 0x00018F, 0, { 0x000259 }}, /* 018F; 0259; Case map */
- { 0x000190, 0, { 0x00025B }}, /* 0190; 025B; Case map */
- { 0x000191, 0, { 0x000192 }}, /* 0191; 0192; Case map */
- { 0x000193, 0, { 0x000260 }}, /* 0193; 0260; Case map */
- { 0x000194, 0, { 0x000263 }}, /* 0194; 0263; Case map */
- { 0x000196, 0, { 0x000269 }}, /* 0196; 0269; Case map */
- { 0x000197, 0, { 0x000268 }}, /* 0197; 0268; Case map */
- { 0x000198, 0, { 0x000199 }}, /* 0198; 0199; Case map */
- { 0x00019C, 0, { 0x00026F }}, /* 019C; 026F; Case map */
- { 0x00019D, 0, { 0x000272 }}, /* 019D; 0272; Case map */
- { 0x00019F, 0, { 0x000275 }}, /* 019F; 0275; Case map */
- { 0x0001A0, 0, { 0x0001A1 }}, /* 01A0; 01A1; Case map */
- { 0x0001A2, 0, { 0x0001A3 }}, /* 01A2; 01A3; Case map */
- { 0x0001A4, 0, { 0x0001A5 }}, /* 01A4; 01A5; Case map */
- { 0x0001A6, 0, { 0x000280 }}, /* 01A6; 0280; Case map */
- { 0x0001A7, 0, { 0x0001A8 }}, /* 01A7; 01A8; Case map */
- { 0x0001A9, 0, { 0x000283 }}, /* 01A9; 0283; Case map */
- { 0x0001AC, 0, { 0x0001AD }}, /* 01AC; 01AD; Case map */
- { 0x0001AE, 0, { 0x000288 }}, /* 01AE; 0288; Case map */
- { 0x0001AF, 0, { 0x0001B0 }}, /* 01AF; 01B0; Case map */
- { 0x0001B1, 0, { 0x00028A }}, /* 01B1; 028A; Case map */
- { 0x0001B2, 0, { 0x00028B }}, /* 01B2; 028B; Case map */
- { 0x0001B3, 0, { 0x0001B4 }}, /* 01B3; 01B4; Case map */
- { 0x0001B5, 0, { 0x0001B6 }}, /* 01B5; 01B6; Case map */
- { 0x0001B7, 0, { 0x000292 }}, /* 01B7; 0292; Case map */
- { 0x0001B8, 0, { 0x0001B9 }}, /* 01B8; 01B9; Case map */
- { 0x0001BC, 0, { 0x0001BD }}, /* 01BC; 01BD; Case map */
- { 0x0001C4, 0, { 0x0001C6 }}, /* 01C4; 01C6; Case map */
- { 0x0001C5, 0, { 0x0001C6 }}, /* 01C5; 01C6; Case map */
- { 0x0001C7, 0, { 0x0001C9 }}, /* 01C7; 01C9; Case map */
- { 0x0001C8, 0, { 0x0001C9 }}, /* 01C8; 01C9; Case map */
- { 0x0001CA, 0, { 0x0001CC }}, /* 01CA; 01CC; Case map */
- { 0x0001CB, 0, { 0x0001CC }}, /* 01CB; 01CC; Case map */
- { 0x0001CD, 0, { 0x0001CE }}, /* 01CD; 01CE; Case map */
- { 0x0001CF, 0, { 0x0001D0 }}, /* 01CF; 01D0; Case map */
- { 0x0001D1, 0, { 0x0001D2 }}, /* 01D1; 01D2; Case map */
- { 0x0001D3, 0, { 0x0001D4 }}, /* 01D3; 01D4; Case map */
- { 0x0001D5, 0, { 0x0001D6 }}, /* 01D5; 01D6; Case map */
- { 0x0001D7, 0, { 0x0001D8 }}, /* 01D7; 01D8; Case map */
- { 0x0001D9, 0, { 0x0001DA }}, /* 01D9; 01DA; Case map */
- { 0x0001DB, 0, { 0x0001DC }}, /* 01DB; 01DC; Case map */
- { 0x0001DE, 0, { 0x0001DF }}, /* 01DE; 01DF; Case map */
- { 0x0001E0, 0, { 0x0001E1 }}, /* 01E0; 01E1; Case map */
- { 0x0001E2, 0, { 0x0001E3 }}, /* 01E2; 01E3; Case map */
- { 0x0001E4, 0, { 0x0001E5 }}, /* 01E4; 01E5; Case map */
- { 0x0001E6, 0, { 0x0001E7 }}, /* 01E6; 01E7; Case map */
- { 0x0001E8, 0, { 0x0001E9 }}, /* 01E8; 01E9; Case map */
- { 0x0001EA, 0, { 0x0001EB }}, /* 01EA; 01EB; Case map */
- { 0x0001EC, 0, { 0x0001ED }}, /* 01EC; 01ED; Case map */
- { 0x0001EE, 0, { 0x0001EF }}, /* 01EE; 01EF; Case map */
- { 0x0001F0, 0, { 0x00006A, /* 01F0; 006A 030C; Case map */
- 0x00030C }},
- { 0x0001F1, 0, { 0x0001F3 }}, /* 01F1; 01F3; Case map */
- { 0x0001F2, 0, { 0x0001F3 }}, /* 01F2; 01F3; Case map */
- { 0x0001F4, 0, { 0x0001F5 }}, /* 01F4; 01F5; Case map */
- { 0x0001F6, 0, { 0x000195 }}, /* 01F6; 0195; Case map */
- { 0x0001F7, 0, { 0x0001BF }}, /* 01F7; 01BF; Case map */
- { 0x0001F8, 0, { 0x0001F9 }}, /* 01F8; 01F9; Case map */
- { 0x0001FA, 0, { 0x0001FB }}, /* 01FA; 01FB; Case map */
- { 0x0001FC, 0, { 0x0001FD }}, /* 01FC; 01FD; Case map */
- { 0x0001FE, 0, { 0x0001FF }}, /* 01FE; 01FF; Case map */
- { 0x000200, 0, { 0x000201 }}, /* 0200; 0201; Case map */
- { 0x000202, 0, { 0x000203 }}, /* 0202; 0203; Case map */
- { 0x000204, 0, { 0x000205 }}, /* 0204; 0205; Case map */
- { 0x000206, 0, { 0x000207 }}, /* 0206; 0207; Case map */
- { 0x000208, 0, { 0x000209 }}, /* 0208; 0209; Case map */
- { 0x00020A, 0, { 0x00020B }}, /* 020A; 020B; Case map */
- { 0x00020C, 0, { 0x00020D }}, /* 020C; 020D; Case map */
- { 0x00020E, 0, { 0x00020F }}, /* 020E; 020F; Case map */
- { 0x000210, 0, { 0x000211 }}, /* 0210; 0211; Case map */
- { 0x000212, 0, { 0x000213 }}, /* 0212; 0213; Case map */
- { 0x000214, 0, { 0x000215 }}, /* 0214; 0215; Case map */
- { 0x000216, 0, { 0x000217 }}, /* 0216; 0217; Case map */
- { 0x000218, 0, { 0x000219 }}, /* 0218; 0219; Case map */
- { 0x00021A, 0, { 0x00021B }}, /* 021A; 021B; Case map */
- { 0x00021C, 0, { 0x00021D }}, /* 021C; 021D; Case map */
- { 0x00021E, 0, { 0x00021F }}, /* 021E; 021F; Case map */
- { 0x000220, 0, { 0x00019E }}, /* 0220; 019E; Case map */
- { 0x000222, 0, { 0x000223 }}, /* 0222; 0223; Case map */
- { 0x000224, 0, { 0x000225 }}, /* 0224; 0225; Case map */
- { 0x000226, 0, { 0x000227 }}, /* 0226; 0227; Case map */
- { 0x000228, 0, { 0x000229 }}, /* 0228; 0229; Case map */
- { 0x00022A, 0, { 0x00022B }}, /* 022A; 022B; Case map */
- { 0x00022C, 0, { 0x00022D }}, /* 022C; 022D; Case map */
- { 0x00022E, 0, { 0x00022F }}, /* 022E; 022F; Case map */
- { 0x000230, 0, { 0x000231 }}, /* 0230; 0231; Case map */
- { 0x000232, 0, { 0x000233 }}, /* 0232; 0233; Case map */
- { 0x000345, 0, { 0x0003B9 }}, /* 0345; 03B9; Case map */
- { 0x00037A, 0, { 0x000020, /* 037A; 0020 03B9; Additional folding */
- 0x0003B9 }},
- { 0x000386, 0, { 0x0003AC }}, /* 0386; 03AC; Case map */
- { 0x000388, 0, { 0x0003AD }}, /* 0388; 03AD; Case map */
- { 0x000389, 0, { 0x0003AE }}, /* 0389; 03AE; Case map */
- { 0x00038A, 0, { 0x0003AF }}, /* 038A; 03AF; Case map */
- { 0x00038C, 0, { 0x0003CC }}, /* 038C; 03CC; Case map */
- { 0x00038E, 0, { 0x0003CD }}, /* 038E; 03CD; Case map */
- { 0x00038F, 0, { 0x0003CE }}, /* 038F; 03CE; Case map */
- { 0x000390, 0, { 0x0003B9, /* 0390; 03B9 0308 0301; Case map */
- 0x000308, 0x000301 }},
- { 0x000391, 0, { 0x0003B1 }}, /* 0391; 03B1; Case map */
- { 0x000392, 0, { 0x0003B2 }}, /* 0392; 03B2; Case map */
- { 0x000393, 0, { 0x0003B3 }}, /* 0393; 03B3; Case map */
- { 0x000394, 0, { 0x0003B4 }}, /* 0394; 03B4; Case map */
- { 0x000395, 0, { 0x0003B5 }}, /* 0395; 03B5; Case map */
- { 0x000396, 0, { 0x0003B6 }}, /* 0396; 03B6; Case map */
- { 0x000397, 0, { 0x0003B7 }}, /* 0397; 03B7; Case map */
- { 0x000398, 0, { 0x0003B8 }}, /* 0398; 03B8; Case map */
- { 0x000399, 0, { 0x0003B9 }}, /* 0399; 03B9; Case map */
- { 0x00039A, 0, { 0x0003BA }}, /* 039A; 03BA; Case map */
- { 0x00039B, 0, { 0x0003BB }}, /* 039B; 03BB; Case map */
- { 0x00039C, 0, { 0x0003BC }}, /* 039C; 03BC; Case map */
- { 0x00039D, 0, { 0x0003BD }}, /* 039D; 03BD; Case map */
- { 0x00039E, 0, { 0x0003BE }}, /* 039E; 03BE; Case map */
- { 0x00039F, 0, { 0x0003BF }}, /* 039F; 03BF; Case map */
- { 0x0003A0, 0, { 0x0003C0 }}, /* 03A0; 03C0; Case map */
- { 0x0003A1, 0, { 0x0003C1 }}, /* 03A1; 03C1; Case map */
- { 0x0003A3, 0, { 0x0003C3 }}, /* 03A3; 03C3; Case map */
- { 0x0003A4, 0, { 0x0003C4 }}, /* 03A4; 03C4; Case map */
- { 0x0003A5, 0, { 0x0003C5 }}, /* 03A5; 03C5; Case map */
- { 0x0003A6, 0, { 0x0003C6 }}, /* 03A6; 03C6; Case map */
- { 0x0003A7, 0, { 0x0003C7 }}, /* 03A7; 03C7; Case map */
- { 0x0003A8, 0, { 0x0003C8 }}, /* 03A8; 03C8; Case map */
- { 0x0003A9, 0, { 0x0003C9 }}, /* 03A9; 03C9; Case map */
- { 0x0003AA, 0, { 0x0003CA }}, /* 03AA; 03CA; Case map */
- { 0x0003AB, 0, { 0x0003CB }}, /* 03AB; 03CB; Case map */
- { 0x0003B0, 0, { 0x0003C5, /* 03B0; 03C5 0308 0301; Case map */
- 0x000308, 0x000301 }},
- { 0x0003C2, 0, { 0x0003C3 }}, /* 03C2; 03C3; Case map */
- { 0x0003D0, 0, { 0x0003B2 }}, /* 03D0; 03B2; Case map */
- { 0x0003D1, 0, { 0x0003B8 }}, /* 03D1; 03B8; Case map */
- { 0x0003D2, 0, { 0x0003C5 }}, /* 03D2; 03C5; Additional folding */
- { 0x0003D3, 0, { 0x0003CD }}, /* 03D3; 03CD; Additional folding */
- { 0x0003D4, 0, { 0x0003CB }}, /* 03D4; 03CB; Additional folding */
- { 0x0003D5, 0, { 0x0003C6 }}, /* 03D5; 03C6; Case map */
- { 0x0003D6, 0, { 0x0003C0 }}, /* 03D6; 03C0; Case map */
- { 0x0003D8, 0, { 0x0003D9 }}, /* 03D8; 03D9; Case map */
- { 0x0003DA, 0, { 0x0003DB }}, /* 03DA; 03DB; Case map */
- { 0x0003DC, 0, { 0x0003DD }}, /* 03DC; 03DD; Case map */
- { 0x0003DE, 0, { 0x0003DF }}, /* 03DE; 03DF; Case map */
- { 0x0003E0, 0, { 0x0003E1 }}, /* 03E0; 03E1; Case map */
- { 0x0003E2, 0, { 0x0003E3 }}, /* 03E2; 03E3; Case map */
- { 0x0003E4, 0, { 0x0003E5 }}, /* 03E4; 03E5; Case map */
- { 0x0003E6, 0, { 0x0003E7 }}, /* 03E6; 03E7; Case map */
- { 0x0003E8, 0, { 0x0003E9 }}, /* 03E8; 03E9; Case map */
- { 0x0003EA, 0, { 0x0003EB }}, /* 03EA; 03EB; Case map */
- { 0x0003EC, 0, { 0x0003ED }}, /* 03EC; 03ED; Case map */
- { 0x0003EE, 0, { 0x0003EF }}, /* 03EE; 03EF; Case map */
- { 0x0003F0, 0, { 0x0003BA }}, /* 03F0; 03BA; Case map */
- { 0x0003F1, 0, { 0x0003C1 }}, /* 03F1; 03C1; Case map */
- { 0x0003F2, 0, { 0x0003C3 }}, /* 03F2; 03C3; Case map */
- { 0x0003F4, 0, { 0x0003B8 }}, /* 03F4; 03B8; Case map */
- { 0x0003F5, 0, { 0x0003B5 }}, /* 03F5; 03B5; Case map */
- { 0x000400, 0, { 0x000450 }}, /* 0400; 0450; Case map */
- { 0x000401, 0, { 0x000451 }}, /* 0401; 0451; Case map */
- { 0x000402, 0, { 0x000452 }}, /* 0402; 0452; Case map */
- { 0x000403, 0, { 0x000453 }}, /* 0403; 0453; Case map */
- { 0x000404, 0, { 0x000454 }}, /* 0404; 0454; Case map */
- { 0x000405, 0, { 0x000455 }}, /* 0405; 0455; Case map */
- { 0x000406, 0, { 0x000456 }}, /* 0406; 0456; Case map */
- { 0x000407, 0, { 0x000457 }}, /* 0407; 0457; Case map */
- { 0x000408, 0, { 0x000458 }}, /* 0408; 0458; Case map */
- { 0x000409, 0, { 0x000459 }}, /* 0409; 0459; Case map */
- { 0x00040A, 0, { 0x00045A }}, /* 040A; 045A; Case map */
- { 0x00040B, 0, { 0x00045B }}, /* 040B; 045B; Case map */
- { 0x00040C, 0, { 0x00045C }}, /* 040C; 045C; Case map */
- { 0x00040D, 0, { 0x00045D }}, /* 040D; 045D; Case map */
- { 0x00040E, 0, { 0x00045E }}, /* 040E; 045E; Case map */
- { 0x00040F, 0, { 0x00045F }}, /* 040F; 045F; Case map */
- { 0x000410, 0, { 0x000430 }}, /* 0410; 0430; Case map */
- { 0x000411, 0, { 0x000431 }}, /* 0411; 0431; Case map */
- { 0x000412, 0, { 0x000432 }}, /* 0412; 0432; Case map */
- { 0x000413, 0, { 0x000433 }}, /* 0413; 0433; Case map */
- { 0x000414, 0, { 0x000434 }}, /* 0414; 0434; Case map */
- { 0x000415, 0, { 0x000435 }}, /* 0415; 0435; Case map */
- { 0x000416, 0, { 0x000436 }}, /* 0416; 0436; Case map */
- { 0x000417, 0, { 0x000437 }}, /* 0417; 0437; Case map */
- { 0x000418, 0, { 0x000438 }}, /* 0418; 0438; Case map */
- { 0x000419, 0, { 0x000439 }}, /* 0419; 0439; Case map */
- { 0x00041A, 0, { 0x00043A }}, /* 041A; 043A; Case map */
- { 0x00041B, 0, { 0x00043B }}, /* 041B; 043B; Case map */
- { 0x00041C, 0, { 0x00043C }}, /* 041C; 043C; Case map */
- { 0x00041D, 0, { 0x00043D }}, /* 041D; 043D; Case map */
- { 0x00041E, 0, { 0x00043E }}, /* 041E; 043E; Case map */
- { 0x00041F, 0, { 0x00043F }}, /* 041F; 043F; Case map */
- { 0x000420, 0, { 0x000440 }}, /* 0420; 0440; Case map */
- { 0x000421, 0, { 0x000441 }}, /* 0421; 0441; Case map */
- { 0x000422, 0, { 0x000442 }}, /* 0422; 0442; Case map */
- { 0x000423, 0, { 0x000443 }}, /* 0423; 0443; Case map */
- { 0x000424, 0, { 0x000444 }}, /* 0424; 0444; Case map */
- { 0x000425, 0, { 0x000445 }}, /* 0425; 0445; Case map */
- { 0x000426, 0, { 0x000446 }}, /* 0426; 0446; Case map */
- { 0x000427, 0, { 0x000447 }}, /* 0427; 0447; Case map */
- { 0x000428, 0, { 0x000448 }}, /* 0428; 0448; Case map */
- { 0x000429, 0, { 0x000449 }}, /* 0429; 0449; Case map */
- { 0x00042A, 0, { 0x00044A }}, /* 042A; 044A; Case map */
- { 0x00042B, 0, { 0x00044B }}, /* 042B; 044B; Case map */
- { 0x00042C, 0, { 0x00044C }}, /* 042C; 044C; Case map */
- { 0x00042D, 0, { 0x00044D }}, /* 042D; 044D; Case map */
- { 0x00042E, 0, { 0x00044E }}, /* 042E; 044E; Case map */
- { 0x00042F, 0, { 0x00044F }}, /* 042F; 044F; Case map */
- { 0x000460, 0, { 0x000461 }}, /* 0460; 0461; Case map */
- { 0x000462, 0, { 0x000463 }}, /* 0462; 0463; Case map */
- { 0x000464, 0, { 0x000465 }}, /* 0464; 0465; Case map */
- { 0x000466, 0, { 0x000467 }}, /* 0466; 0467; Case map */
- { 0x000468, 0, { 0x000469 }}, /* 0468; 0469; Case map */
- { 0x00046A, 0, { 0x00046B }}, /* 046A; 046B; Case map */
- { 0x00046C, 0, { 0x00046D }}, /* 046C; 046D; Case map */
- { 0x00046E, 0, { 0x00046F }}, /* 046E; 046F; Case map */
- { 0x000470, 0, { 0x000471 }}, /* 0470; 0471; Case map */
- { 0x000472, 0, { 0x000473 }}, /* 0472; 0473; Case map */
- { 0x000474, 0, { 0x000475 }}, /* 0474; 0475; Case map */
- { 0x000476, 0, { 0x000477 }}, /* 0476; 0477; Case map */
- { 0x000478, 0, { 0x000479 }}, /* 0478; 0479; Case map */
- { 0x00047A, 0, { 0x00047B }}, /* 047A; 047B; Case map */
- { 0x00047C, 0, { 0x00047D }}, /* 047C; 047D; Case map */
- { 0x00047E, 0, { 0x00047F }}, /* 047E; 047F; Case map */
- { 0x000480, 0, { 0x000481 }}, /* 0480; 0481; Case map */
- { 0x00048A, 0, { 0x00048B }}, /* 048A; 048B; Case map */
- { 0x00048C, 0, { 0x00048D }}, /* 048C; 048D; Case map */
- { 0x00048E, 0, { 0x00048F }}, /* 048E; 048F; Case map */
- { 0x000490, 0, { 0x000491 }}, /* 0490; 0491; Case map */
- { 0x000492, 0, { 0x000493 }}, /* 0492; 0493; Case map */
- { 0x000494, 0, { 0x000495 }}, /* 0494; 0495; Case map */
- { 0x000496, 0, { 0x000497 }}, /* 0496; 0497; Case map */
- { 0x000498, 0, { 0x000499 }}, /* 0498; 0499; Case map */
- { 0x00049A, 0, { 0x00049B }}, /* 049A; 049B; Case map */
- { 0x00049C, 0, { 0x00049D }}, /* 049C; 049D; Case map */
- { 0x00049E, 0, { 0x00049F }}, /* 049E; 049F; Case map */
- { 0x0004A0, 0, { 0x0004A1 }}, /* 04A0; 04A1; Case map */
- { 0x0004A2, 0, { 0x0004A3 }}, /* 04A2; 04A3; Case map */
- { 0x0004A4, 0, { 0x0004A5 }}, /* 04A4; 04A5; Case map */
- { 0x0004A6, 0, { 0x0004A7 }}, /* 04A6; 04A7; Case map */
- { 0x0004A8, 0, { 0x0004A9 }}, /* 04A8; 04A9; Case map */
- { 0x0004AA, 0, { 0x0004AB }}, /* 04AA; 04AB; Case map */
- { 0x0004AC, 0, { 0x0004AD }}, /* 04AC; 04AD; Case map */
- { 0x0004AE, 0, { 0x0004AF }}, /* 04AE; 04AF; Case map */
- { 0x0004B0, 0, { 0x0004B1 }}, /* 04B0; 04B1; Case map */
- { 0x0004B2, 0, { 0x0004B3 }}, /* 04B2; 04B3; Case map */
- { 0x0004B4, 0, { 0x0004B5 }}, /* 04B4; 04B5; Case map */
- { 0x0004B6, 0, { 0x0004B7 }}, /* 04B6; 04B7; Case map */
- { 0x0004B8, 0, { 0x0004B9 }}, /* 04B8; 04B9; Case map */
- { 0x0004BA, 0, { 0x0004BB }}, /* 04BA; 04BB; Case map */
- { 0x0004BC, 0, { 0x0004BD }}, /* 04BC; 04BD; Case map */
- { 0x0004BE, 0, { 0x0004BF }}, /* 04BE; 04BF; Case map */
- { 0x0004C1, 0, { 0x0004C2 }}, /* 04C1; 04C2; Case map */
- { 0x0004C3, 0, { 0x0004C4 }}, /* 04C3; 04C4; Case map */
- { 0x0004C5, 0, { 0x0004C6 }}, /* 04C5; 04C6; Case map */
- { 0x0004C7, 0, { 0x0004C8 }}, /* 04C7; 04C8; Case map */
- { 0x0004C9, 0, { 0x0004CA }}, /* 04C9; 04CA; Case map */
- { 0x0004CB, 0, { 0x0004CC }}, /* 04CB; 04CC; Case map */
- { 0x0004CD, 0, { 0x0004CE }}, /* 04CD; 04CE; Case map */
- { 0x0004D0, 0, { 0x0004D1 }}, /* 04D0; 04D1; Case map */
- { 0x0004D2, 0, { 0x0004D3 }}, /* 04D2; 04D3; Case map */
- { 0x0004D4, 0, { 0x0004D5 }}, /* 04D4; 04D5; Case map */
- { 0x0004D6, 0, { 0x0004D7 }}, /* 04D6; 04D7; Case map */
- { 0x0004D8, 0, { 0x0004D9 }}, /* 04D8; 04D9; Case map */
- { 0x0004DA, 0, { 0x0004DB }}, /* 04DA; 04DB; Case map */
- { 0x0004DC, 0, { 0x0004DD }}, /* 04DC; 04DD; Case map */
- { 0x0004DE, 0, { 0x0004DF }}, /* 04DE; 04DF; Case map */
- { 0x0004E0, 0, { 0x0004E1 }}, /* 04E0; 04E1; Case map */
- { 0x0004E2, 0, { 0x0004E3 }}, /* 04E2; 04E3; Case map */
- { 0x0004E4, 0, { 0x0004E5 }}, /* 04E4; 04E5; Case map */
- { 0x0004E6, 0, { 0x0004E7 }}, /* 04E6; 04E7; Case map */
- { 0x0004E8, 0, { 0x0004E9 }}, /* 04E8; 04E9; Case map */
- { 0x0004EA, 0, { 0x0004EB }}, /* 04EA; 04EB; Case map */
- { 0x0004EC, 0, { 0x0004ED }}, /* 04EC; 04ED; Case map */
- { 0x0004EE, 0, { 0x0004EF }}, /* 04EE; 04EF; Case map */
- { 0x0004F0, 0, { 0x0004F1 }}, /* 04F0; 04F1; Case map */
- { 0x0004F2, 0, { 0x0004F3 }}, /* 04F2; 04F3; Case map */
- { 0x0004F4, 0, { 0x0004F5 }}, /* 04F4; 04F5; Case map */
- { 0x0004F8, 0, { 0x0004F9 }}, /* 04F8; 04F9; Case map */
- { 0x000500, 0, { 0x000501 }}, /* 0500; 0501; Case map */
- { 0x000502, 0, { 0x000503 }}, /* 0502; 0503; Case map */
- { 0x000504, 0, { 0x000505 }}, /* 0504; 0505; Case map */
- { 0x000506, 0, { 0x000507 }}, /* 0506; 0507; Case map */
- { 0x000508, 0, { 0x000509 }}, /* 0508; 0509; Case map */
- { 0x00050A, 0, { 0x00050B }}, /* 050A; 050B; Case map */
- { 0x00050C, 0, { 0x00050D }}, /* 050C; 050D; Case map */
- { 0x00050E, 0, { 0x00050F }}, /* 050E; 050F; Case map */
- { 0x000531, 0, { 0x000561 }}, /* 0531; 0561; Case map */
- { 0x000532, 0, { 0x000562 }}, /* 0532; 0562; Case map */
- { 0x000533, 0, { 0x000563 }}, /* 0533; 0563; Case map */
- { 0x000534, 0, { 0x000564 }}, /* 0534; 0564; Case map */
- { 0x000535, 0, { 0x000565 }}, /* 0535; 0565; Case map */
- { 0x000536, 0, { 0x000566 }}, /* 0536; 0566; Case map */
- { 0x000537, 0, { 0x000567 }}, /* 0537; 0567; Case map */
- { 0x000538, 0, { 0x000568 }}, /* 0538; 0568; Case map */
- { 0x000539, 0, { 0x000569 }}, /* 0539; 0569; Case map */
- { 0x00053A, 0, { 0x00056A }}, /* 053A; 056A; Case map */
- { 0x00053B, 0, { 0x00056B }}, /* 053B; 056B; Case map */
- { 0x00053C, 0, { 0x00056C }}, /* 053C; 056C; Case map */
- { 0x00053D, 0, { 0x00056D }}, /* 053D; 056D; Case map */
- { 0x00053E, 0, { 0x00056E }}, /* 053E; 056E; Case map */
- { 0x00053F, 0, { 0x00056F }}, /* 053F; 056F; Case map */
- { 0x000540, 0, { 0x000570 }}, /* 0540; 0570; Case map */
- { 0x000541, 0, { 0x000571 }}, /* 0541; 0571; Case map */
- { 0x000542, 0, { 0x000572 }}, /* 0542; 0572; Case map */
- { 0x000543, 0, { 0x000573 }}, /* 0543; 0573; Case map */
- { 0x000544, 0, { 0x000574 }}, /* 0544; 0574; Case map */
- { 0x000545, 0, { 0x000575 }}, /* 0545; 0575; Case map */
- { 0x000546, 0, { 0x000576 }}, /* 0546; 0576; Case map */
- { 0x000547, 0, { 0x000577 }}, /* 0547; 0577; Case map */
- { 0x000548, 0, { 0x000578 }}, /* 0548; 0578; Case map */
- { 0x000549, 0, { 0x000579 }}, /* 0549; 0579; Case map */
- { 0x00054A, 0, { 0x00057A }}, /* 054A; 057A; Case map */
- { 0x00054B, 0, { 0x00057B }}, /* 054B; 057B; Case map */
- { 0x00054C, 0, { 0x00057C }}, /* 054C; 057C; Case map */
- { 0x00054D, 0, { 0x00057D }}, /* 054D; 057D; Case map */
- { 0x00054E, 0, { 0x00057E }}, /* 054E; 057E; Case map */
- { 0x00054F, 0, { 0x00057F }}, /* 054F; 057F; Case map */
- { 0x000550, 0, { 0x000580 }}, /* 0550; 0580; Case map */
- { 0x000551, 0, { 0x000581 }}, /* 0551; 0581; Case map */
- { 0x000552, 0, { 0x000582 }}, /* 0552; 0582; Case map */
- { 0x000553, 0, { 0x000583 }}, /* 0553; 0583; Case map */
- { 0x000554, 0, { 0x000584 }}, /* 0554; 0584; Case map */
- { 0x000555, 0, { 0x000585 }}, /* 0555; 0585; Case map */
- { 0x000556, 0, { 0x000586 }}, /* 0556; 0586; Case map */
- { 0x000587, 0, { 0x000565, /* 0587; 0565 0582; Case map */
- 0x000582 }},
- { 0x001E00, 0, { 0x001E01 }}, /* 1E00; 1E01; Case map */
- { 0x001E02, 0, { 0x001E03 }}, /* 1E02; 1E03; Case map */
- { 0x001E04, 0, { 0x001E05 }}, /* 1E04; 1E05; Case map */
- { 0x001E06, 0, { 0x001E07 }}, /* 1E06; 1E07; Case map */
- { 0x001E08, 0, { 0x001E09 }}, /* 1E08; 1E09; Case map */
- { 0x001E0A, 0, { 0x001E0B }}, /* 1E0A; 1E0B; Case map */
- { 0x001E0C, 0, { 0x001E0D }}, /* 1E0C; 1E0D; Case map */
- { 0x001E0E, 0, { 0x001E0F }}, /* 1E0E; 1E0F; Case map */
- { 0x001E10, 0, { 0x001E11 }}, /* 1E10; 1E11; Case map */
- { 0x001E12, 0, { 0x001E13 }}, /* 1E12; 1E13; Case map */
- { 0x001E14, 0, { 0x001E15 }}, /* 1E14; 1E15; Case map */
- { 0x001E16, 0, { 0x001E17 }}, /* 1E16; 1E17; Case map */
- { 0x001E18, 0, { 0x001E19 }}, /* 1E18; 1E19; Case map */
- { 0x001E1A, 0, { 0x001E1B }}, /* 1E1A; 1E1B; Case map */
- { 0x001E1C, 0, { 0x001E1D }}, /* 1E1C; 1E1D; Case map */
- { 0x001E1E, 0, { 0x001E1F }}, /* 1E1E; 1E1F; Case map */
- { 0x001E20, 0, { 0x001E21 }}, /* 1E20; 1E21; Case map */
- { 0x001E22, 0, { 0x001E23 }}, /* 1E22; 1E23; Case map */
- { 0x001E24, 0, { 0x001E25 }}, /* 1E24; 1E25; Case map */
- { 0x001E26, 0, { 0x001E27 }}, /* 1E26; 1E27; Case map */
- { 0x001E28, 0, { 0x001E29 }}, /* 1E28; 1E29; Case map */
- { 0x001E2A, 0, { 0x001E2B }}, /* 1E2A; 1E2B; Case map */
- { 0x001E2C, 0, { 0x001E2D }}, /* 1E2C; 1E2D; Case map */
- { 0x001E2E, 0, { 0x001E2F }}, /* 1E2E; 1E2F; Case map */
- { 0x001E30, 0, { 0x001E31 }}, /* 1E30; 1E31; Case map */
- { 0x001E32, 0, { 0x001E33 }}, /* 1E32; 1E33; Case map */
- { 0x001E34, 0, { 0x001E35 }}, /* 1E34; 1E35; Case map */
- { 0x001E36, 0, { 0x001E37 }}, /* 1E36; 1E37; Case map */
- { 0x001E38, 0, { 0x001E39 }}, /* 1E38; 1E39; Case map */
- { 0x001E3A, 0, { 0x001E3B }}, /* 1E3A; 1E3B; Case map */
- { 0x001E3C, 0, { 0x001E3D }}, /* 1E3C; 1E3D; Case map */
- { 0x001E3E, 0, { 0x001E3F }}, /* 1E3E; 1E3F; Case map */
- { 0x001E40, 0, { 0x001E41 }}, /* 1E40; 1E41; Case map */
- { 0x001E42, 0, { 0x001E43 }}, /* 1E42; 1E43; Case map */
- { 0x001E44, 0, { 0x001E45 }}, /* 1E44; 1E45; Case map */
- { 0x001E46, 0, { 0x001E47 }}, /* 1E46; 1E47; Case map */
- { 0x001E48, 0, { 0x001E49 }}, /* 1E48; 1E49; Case map */
- { 0x001E4A, 0, { 0x001E4B }}, /* 1E4A; 1E4B; Case map */
- { 0x001E4C, 0, { 0x001E4D }}, /* 1E4C; 1E4D; Case map */
- { 0x001E4E, 0, { 0x001E4F }}, /* 1E4E; 1E4F; Case map */
- { 0x001E50, 0, { 0x001E51 }}, /* 1E50; 1E51; Case map */
- { 0x001E52, 0, { 0x001E53 }}, /* 1E52; 1E53; Case map */
- { 0x001E54, 0, { 0x001E55 }}, /* 1E54; 1E55; Case map */
- { 0x001E56, 0, { 0x001E57 }}, /* 1E56; 1E57; Case map */
- { 0x001E58, 0, { 0x001E59 }}, /* 1E58; 1E59; Case map */
- { 0x001E5A, 0, { 0x001E5B }}, /* 1E5A; 1E5B; Case map */
- { 0x001E5C, 0, { 0x001E5D }}, /* 1E5C; 1E5D; Case map */
- { 0x001E5E, 0, { 0x001E5F }}, /* 1E5E; 1E5F; Case map */
- { 0x001E60, 0, { 0x001E61 }}, /* 1E60; 1E61; Case map */
- { 0x001E62, 0, { 0x001E63 }}, /* 1E62; 1E63; Case map */
- { 0x001E64, 0, { 0x001E65 }}, /* 1E64; 1E65; Case map */
- { 0x001E66, 0, { 0x001E67 }}, /* 1E66; 1E67; Case map */
- { 0x001E68, 0, { 0x001E69 }}, /* 1E68; 1E69; Case map */
- { 0x001E6A, 0, { 0x001E6B }}, /* 1E6A; 1E6B; Case map */
- { 0x001E6C, 0, { 0x001E6D }}, /* 1E6C; 1E6D; Case map */
- { 0x001E6E, 0, { 0x001E6F }}, /* 1E6E; 1E6F; Case map */
- { 0x001E70, 0, { 0x001E71 }}, /* 1E70; 1E71; Case map */
- { 0x001E72, 0, { 0x001E73 }}, /* 1E72; 1E73; Case map */
- { 0x001E74, 0, { 0x001E75 }}, /* 1E74; 1E75; Case map */
- { 0x001E76, 0, { 0x001E77 }}, /* 1E76; 1E77; Case map */
- { 0x001E78, 0, { 0x001E79 }}, /* 1E78; 1E79; Case map */
- { 0x001E7A, 0, { 0x001E7B }}, /* 1E7A; 1E7B; Case map */
- { 0x001E7C, 0, { 0x001E7D }}, /* 1E7C; 1E7D; Case map */
- { 0x001E7E, 0, { 0x001E7F }}, /* 1E7E; 1E7F; Case map */
- { 0x001E80, 0, { 0x001E81 }}, /* 1E80; 1E81; Case map */
- { 0x001E82, 0, { 0x001E83 }}, /* 1E82; 1E83; Case map */
- { 0x001E84, 0, { 0x001E85 }}, /* 1E84; 1E85; Case map */
- { 0x001E86, 0, { 0x001E87 }}, /* 1E86; 1E87; Case map */
- { 0x001E88, 0, { 0x001E89 }}, /* 1E88; 1E89; Case map */
- { 0x001E8A, 0, { 0x001E8B }}, /* 1E8A; 1E8B; Case map */
- { 0x001E8C, 0, { 0x001E8D }}, /* 1E8C; 1E8D; Case map */
- { 0x001E8E, 0, { 0x001E8F }}, /* 1E8E; 1E8F; Case map */
- { 0x001E90, 0, { 0x001E91 }}, /* 1E90; 1E91; Case map */
- { 0x001E92, 0, { 0x001E93 }}, /* 1E92; 1E93; Case map */
- { 0x001E94, 0, { 0x001E95 }}, /* 1E94; 1E95; Case map */
- { 0x001E96, 0, { 0x000068, /* 1E96; 0068 0331; Case map */
- 0x000331 }},
- { 0x001E97, 0, { 0x000074, /* 1E97; 0074 0308; Case map */
- 0x000308 }},
- { 0x001E98, 0, { 0x000077, /* 1E98; 0077 030A; Case map */
- 0x00030A }},
- { 0x001E99, 0, { 0x000079, /* 1E99; 0079 030A; Case map */
- 0x00030A }},
- { 0x001E9A, 0, { 0x000061, /* 1E9A; 0061 02BE; Case map */
- 0x0002BE }},
- { 0x001E9B, 0, { 0x001E61 }}, /* 1E9B; 1E61; Case map */
- { 0x001EA0, 0, { 0x001EA1 }}, /* 1EA0; 1EA1; Case map */
- { 0x001EA2, 0, { 0x001EA3 }}, /* 1EA2; 1EA3; Case map */
- { 0x001EA4, 0, { 0x001EA5 }}, /* 1EA4; 1EA5; Case map */
- { 0x001EA6, 0, { 0x001EA7 }}, /* 1EA6; 1EA7; Case map */
- { 0x001EA8, 0, { 0x001EA9 }}, /* 1EA8; 1EA9; Case map */
- { 0x001EAA, 0, { 0x001EAB }}, /* 1EAA; 1EAB; Case map */
- { 0x001EAC, 0, { 0x001EAD }}, /* 1EAC; 1EAD; Case map */
- { 0x001EAE, 0, { 0x001EAF }}, /* 1EAE; 1EAF; Case map */
- { 0x001EB0, 0, { 0x001EB1 }}, /* 1EB0; 1EB1; Case map */
- { 0x001EB2, 0, { 0x001EB3 }}, /* 1EB2; 1EB3; Case map */
- { 0x001EB4, 0, { 0x001EB5 }}, /* 1EB4; 1EB5; Case map */
- { 0x001EB6, 0, { 0x001EB7 }}, /* 1EB6; 1EB7; Case map */
- { 0x001EB8, 0, { 0x001EB9 }}, /* 1EB8; 1EB9; Case map */
- { 0x001EBA, 0, { 0x001EBB }}, /* 1EBA; 1EBB; Case map */
- { 0x001EBC, 0, { 0x001EBD }}, /* 1EBC; 1EBD; Case map */
- { 0x001EBE, 0, { 0x001EBF }}, /* 1EBE; 1EBF; Case map */
- { 0x001EC0, 0, { 0x001EC1 }}, /* 1EC0; 1EC1; Case map */
- { 0x001EC2, 0, { 0x001EC3 }}, /* 1EC2; 1EC3; Case map */
- { 0x001EC4, 0, { 0x001EC5 }}, /* 1EC4; 1EC5; Case map */
- { 0x001EC6, 0, { 0x001EC7 }}, /* 1EC6; 1EC7; Case map */
- { 0x001EC8, 0, { 0x001EC9 }}, /* 1EC8; 1EC9; Case map */
- { 0x001ECA, 0, { 0x001ECB }}, /* 1ECA; 1ECB; Case map */
- { 0x001ECC, 0, { 0x001ECD }}, /* 1ECC; 1ECD; Case map */
- { 0x001ECE, 0, { 0x001ECF }}, /* 1ECE; 1ECF; Case map */
- { 0x001ED0, 0, { 0x001ED1 }}, /* 1ED0; 1ED1; Case map */
- { 0x001ED2, 0, { 0x001ED3 }}, /* 1ED2; 1ED3; Case map */
- { 0x001ED4, 0, { 0x001ED5 }}, /* 1ED4; 1ED5; Case map */
- { 0x001ED6, 0, { 0x001ED7 }}, /* 1ED6; 1ED7; Case map */
- { 0x001ED8, 0, { 0x001ED9 }}, /* 1ED8; 1ED9; Case map */
- { 0x001EDA, 0, { 0x001EDB }}, /* 1EDA; 1EDB; Case map */
- { 0x001EDC, 0, { 0x001EDD }}, /* 1EDC; 1EDD; Case map */
- { 0x001EDE, 0, { 0x001EDF }}, /* 1EDE; 1EDF; Case map */
- { 0x001EE0, 0, { 0x001EE1 }}, /* 1EE0; 1EE1; Case map */
- { 0x001EE2, 0, { 0x001EE3 }}, /* 1EE2; 1EE3; Case map */
- { 0x001EE4, 0, { 0x001EE5 }}, /* 1EE4; 1EE5; Case map */
- { 0x001EE6, 0, { 0x001EE7 }}, /* 1EE6; 1EE7; Case map */
- { 0x001EE8, 0, { 0x001EE9 }}, /* 1EE8; 1EE9; Case map */
- { 0x001EEA, 0, { 0x001EEB }}, /* 1EEA; 1EEB; Case map */
- { 0x001EEC, 0, { 0x001EED }}, /* 1EEC; 1EED; Case map */
- { 0x001EEE, 0, { 0x001EEF }}, /* 1EEE; 1EEF; Case map */
- { 0x001EF0, 0, { 0x001EF1 }}, /* 1EF0; 1EF1; Case map */
- { 0x001EF2, 0, { 0x001EF3 }}, /* 1EF2; 1EF3; Case map */
- { 0x001EF4, 0, { 0x001EF5 }}, /* 1EF4; 1EF5; Case map */
- { 0x001EF6, 0, { 0x001EF7 }}, /* 1EF6; 1EF7; Case map */
- { 0x001EF8, 0, { 0x001EF9 }}, /* 1EF8; 1EF9; Case map */
- { 0x001F08, 0, { 0x001F00 }}, /* 1F08; 1F00; Case map */
- { 0x001F09, 0, { 0x001F01 }}, /* 1F09; 1F01; Case map */
- { 0x001F0A, 0, { 0x001F02 }}, /* 1F0A; 1F02; Case map */
- { 0x001F0B, 0, { 0x001F03 }}, /* 1F0B; 1F03; Case map */
- { 0x001F0C, 0, { 0x001F04 }}, /* 1F0C; 1F04; Case map */
- { 0x001F0D, 0, { 0x001F05 }}, /* 1F0D; 1F05; Case map */
- { 0x001F0E, 0, { 0x001F06 }}, /* 1F0E; 1F06; Case map */
- { 0x001F0F, 0, { 0x001F07 }}, /* 1F0F; 1F07; Case map */
- { 0x001F18, 0, { 0x001F10 }}, /* 1F18; 1F10; Case map */
- { 0x001F19, 0, { 0x001F11 }}, /* 1F19; 1F11; Case map */
- { 0x001F1A, 0, { 0x001F12 }}, /* 1F1A; 1F12; Case map */
- { 0x001F1B, 0, { 0x001F13 }}, /* 1F1B; 1F13; Case map */
- { 0x001F1C, 0, { 0x001F14 }}, /* 1F1C; 1F14; Case map */
- { 0x001F1D, 0, { 0x001F15 }}, /* 1F1D; 1F15; Case map */
- { 0x001F28, 0, { 0x001F20 }}, /* 1F28; 1F20; Case map */
- { 0x001F29, 0, { 0x001F21 }}, /* 1F29; 1F21; Case map */
- { 0x001F2A, 0, { 0x001F22 }}, /* 1F2A; 1F22; Case map */
- { 0x001F2B, 0, { 0x001F23 }}, /* 1F2B; 1F23; Case map */
- { 0x001F2C, 0, { 0x001F24 }}, /* 1F2C; 1F24; Case map */
- { 0x001F2D, 0, { 0x001F25 }}, /* 1F2D; 1F25; Case map */
- { 0x001F2E, 0, { 0x001F26 }}, /* 1F2E; 1F26; Case map */
- { 0x001F2F, 0, { 0x001F27 }}, /* 1F2F; 1F27; Case map */
- { 0x001F38, 0, { 0x001F30 }}, /* 1F38; 1F30; Case map */
- { 0x001F39, 0, { 0x001F31 }}, /* 1F39; 1F31; Case map */
- { 0x001F3A, 0, { 0x001F32 }}, /* 1F3A; 1F32; Case map */
- { 0x001F3B, 0, { 0x001F33 }}, /* 1F3B; 1F33; Case map */
- { 0x001F3C, 0, { 0x001F34 }}, /* 1F3C; 1F34; Case map */
- { 0x001F3D, 0, { 0x001F35 }}, /* 1F3D; 1F35; Case map */
- { 0x001F3E, 0, { 0x001F36 }}, /* 1F3E; 1F36; Case map */
- { 0x001F3F, 0, { 0x001F37 }}, /* 1F3F; 1F37; Case map */
- { 0x001F48, 0, { 0x001F40 }}, /* 1F48; 1F40; Case map */
- { 0x001F49, 0, { 0x001F41 }}, /* 1F49; 1F41; Case map */
- { 0x001F4A, 0, { 0x001F42 }}, /* 1F4A; 1F42; Case map */
- { 0x001F4B, 0, { 0x001F43 }}, /* 1F4B; 1F43; Case map */
- { 0x001F4C, 0, { 0x001F44 }}, /* 1F4C; 1F44; Case map */
- { 0x001F4D, 0, { 0x001F45 }}, /* 1F4D; 1F45; Case map */
- { 0x001F50, 0, { 0x0003C5, /* 1F50; 03C5 0313; Case map */
- 0x000313 }},
- { 0x001F52, 0, { 0x0003C5, /* 1F52; 03C5 0313 0300; Case map */
- 0x000313, 0x000300 }},
- { 0x001F54, 0, { 0x0003C5, /* 1F54; 03C5 0313 0301; Case map */
- 0x000313, 0x000301 }},
- { 0x001F56, 0, { 0x0003C5, /* 1F56; 03C5 0313 0342; Case map */
- 0x000313, 0x000342 }},
- { 0x001F59, 0, { 0x001F51 }}, /* 1F59; 1F51; Case map */
- { 0x001F5B, 0, { 0x001F53 }}, /* 1F5B; 1F53; Case map */
- { 0x001F5D, 0, { 0x001F55 }}, /* 1F5D; 1F55; Case map */
- { 0x001F5F, 0, { 0x001F57 }}, /* 1F5F; 1F57; Case map */
- { 0x001F68, 0, { 0x001F60 }}, /* 1F68; 1F60; Case map */
- { 0x001F69, 0, { 0x001F61 }}, /* 1F69; 1F61; Case map */
- { 0x001F6A, 0, { 0x001F62 }}, /* 1F6A; 1F62; Case map */
- { 0x001F6B, 0, { 0x001F63 }}, /* 1F6B; 1F63; Case map */
- { 0x001F6C, 0, { 0x001F64 }}, /* 1F6C; 1F64; Case map */
- { 0x001F6D, 0, { 0x001F65 }}, /* 1F6D; 1F65; Case map */
- { 0x001F6E, 0, { 0x001F66 }}, /* 1F6E; 1F66; Case map */
- { 0x001F6F, 0, { 0x001F67 }}, /* 1F6F; 1F67; Case map */
- { 0x001F80, 0, { 0x001F00, /* 1F80; 1F00 03B9; Case map */
- 0x0003B9 }},
- { 0x001F81, 0, { 0x001F01, /* 1F81; 1F01 03B9; Case map */
- 0x0003B9 }},
- { 0x001F82, 0, { 0x001F02, /* 1F82; 1F02 03B9; Case map */
- 0x0003B9 }},
- { 0x001F83, 0, { 0x001F03, /* 1F83; 1F03 03B9; Case map */
- 0x0003B9 }},
- { 0x001F84, 0, { 0x001F04, /* 1F84; 1F04 03B9; Case map */
- 0x0003B9 }},
- { 0x001F85, 0, { 0x001F05, /* 1F85; 1F05 03B9; Case map */
- 0x0003B9 }},
- { 0x001F86, 0, { 0x001F06, /* 1F86; 1F06 03B9; Case map */
- 0x0003B9 }},
- { 0x001F87, 0, { 0x001F07, /* 1F87; 1F07 03B9; Case map */
- 0x0003B9 }},
- { 0x001F88, 0, { 0x001F00, /* 1F88; 1F00 03B9; Case map */
- 0x0003B9 }},
- { 0x001F89, 0, { 0x001F01, /* 1F89; 1F01 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8A, 0, { 0x001F02, /* 1F8A; 1F02 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8B, 0, { 0x001F03, /* 1F8B; 1F03 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8C, 0, { 0x001F04, /* 1F8C; 1F04 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8D, 0, { 0x001F05, /* 1F8D; 1F05 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8E, 0, { 0x001F06, /* 1F8E; 1F06 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8F, 0, { 0x001F07, /* 1F8F; 1F07 03B9; Case map */
- 0x0003B9 }},
- { 0x001F90, 0, { 0x001F20, /* 1F90; 1F20 03B9; Case map */
- 0x0003B9 }},
- { 0x001F91, 0, { 0x001F21, /* 1F91; 1F21 03B9; Case map */
- 0x0003B9 }},
- { 0x001F92, 0, { 0x001F22, /* 1F92; 1F22 03B9; Case map */
- 0x0003B9 }},
- { 0x001F93, 0, { 0x001F23, /* 1F93; 1F23 03B9; Case map */
- 0x0003B9 }},
- { 0x001F94, 0, { 0x001F24, /* 1F94; 1F24 03B9; Case map */
- 0x0003B9 }},
- { 0x001F95, 0, { 0x001F25, /* 1F95; 1F25 03B9; Case map */
- 0x0003B9 }},
- { 0x001F96, 0, { 0x001F26, /* 1F96; 1F26 03B9; Case map */
- 0x0003B9 }},
- { 0x001F97, 0, { 0x001F27, /* 1F97; 1F27 03B9; Case map */
- 0x0003B9 }},
- { 0x001F98, 0, { 0x001F20, /* 1F98; 1F20 03B9; Case map */
- 0x0003B9 }},
- { 0x001F99, 0, { 0x001F21, /* 1F99; 1F21 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9A, 0, { 0x001F22, /* 1F9A; 1F22 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9B, 0, { 0x001F23, /* 1F9B; 1F23 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9C, 0, { 0x001F24, /* 1F9C; 1F24 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9D, 0, { 0x001F25, /* 1F9D; 1F25 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9E, 0, { 0x001F26, /* 1F9E; 1F26 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9F, 0, { 0x001F27, /* 1F9F; 1F27 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA0, 0, { 0x001F60, /* 1FA0; 1F60 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA1, 0, { 0x001F61, /* 1FA1; 1F61 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA2, 0, { 0x001F62, /* 1FA2; 1F62 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA3, 0, { 0x001F63, /* 1FA3; 1F63 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA4, 0, { 0x001F64, /* 1FA4; 1F64 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA5, 0, { 0x001F65, /* 1FA5; 1F65 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA6, 0, { 0x001F66, /* 1FA6; 1F66 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA7, 0, { 0x001F67, /* 1FA7; 1F67 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA8, 0, { 0x001F60, /* 1FA8; 1F60 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA9, 0, { 0x001F61, /* 1FA9; 1F61 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAA, 0, { 0x001F62, /* 1FAA; 1F62 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAB, 0, { 0x001F63, /* 1FAB; 1F63 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAC, 0, { 0x001F64, /* 1FAC; 1F64 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAD, 0, { 0x001F65, /* 1FAD; 1F65 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAE, 0, { 0x001F66, /* 1FAE; 1F66 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAF, 0, { 0x001F67, /* 1FAF; 1F67 03B9; Case map */
- 0x0003B9 }},
- { 0x001FB2, 0, { 0x001F70, /* 1FB2; 1F70 03B9; Case map */
- 0x0003B9 }},
- { 0x001FB3, 0, { 0x0003B1, /* 1FB3; 03B1 03B9; Case map */
- 0x0003B9 }},
- { 0x001FB4, 0, { 0x0003AC, /* 1FB4; 03AC 03B9; Case map */
- 0x0003B9 }},
- { 0x001FB6, 0, { 0x0003B1, /* 1FB6; 03B1 0342; Case map */
- 0x000342 }},
- { 0x001FB7, 0, { 0x0003B1, /* 1FB7; 03B1 0342 03B9; Case map */
- 0x000342, 0x0003B9 }},
- { 0x001FB8, 0, { 0x001FB0 }}, /* 1FB8; 1FB0; Case map */
- { 0x001FB9, 0, { 0x001FB1 }}, /* 1FB9; 1FB1; Case map */
- { 0x001FBA, 0, { 0x001F70 }}, /* 1FBA; 1F70; Case map */
- { 0x001FBB, 0, { 0x001F71 }}, /* 1FBB; 1F71; Case map */
- { 0x001FBC, 0, { 0x0003B1, /* 1FBC; 03B1 03B9; Case map */
- 0x0003B9 }},
- { 0x001FBE, 0, { 0x0003B9 }}, /* 1FBE; 03B9; Case map */
- { 0x001FC2, 0, { 0x001F74, /* 1FC2; 1F74 03B9; Case map */
- 0x0003B9 }},
- { 0x001FC3, 0, { 0x0003B7, /* 1FC3; 03B7 03B9; Case map */
- 0x0003B9 }},
- { 0x001FC4, 0, { 0x0003AE, /* 1FC4; 03AE 03B9; Case map */
- 0x0003B9 }},
- { 0x001FC6, 0, { 0x0003B7, /* 1FC6; 03B7 0342; Case map */
- 0x000342 }},
- { 0x001FC7, 0, { 0x0003B7, /* 1FC7; 03B7 0342 03B9; Case map */
- 0x000342, 0x0003B9 }},
- { 0x001FC8, 0, { 0x001F72 }}, /* 1FC8; 1F72; Case map */
- { 0x001FC9, 0, { 0x001F73 }}, /* 1FC9; 1F73; Case map */
- { 0x001FCA, 0, { 0x001F74 }}, /* 1FCA; 1F74; Case map */
- { 0x001FCB, 0, { 0x001F75 }}, /* 1FCB; 1F75; Case map */
- { 0x001FCC, 0, { 0x0003B7, /* 1FCC; 03B7 03B9; Case map */
- 0x0003B9 }},
- { 0x001FD2, 0, { 0x0003B9, /* 1FD2; 03B9 0308 0300; Case map */
- 0x000308, 0x000300 }},
- { 0x001FD3, 0, { 0x0003B9, /* 1FD3; 03B9 0308 0301; Case map */
- 0x000308, 0x000301 }},
- { 0x001FD6, 0, { 0x0003B9, /* 1FD6; 03B9 0342; Case map */
- 0x000342 }},
- { 0x001FD7, 0, { 0x0003B9, /* 1FD7; 03B9 0308 0342; Case map */
- 0x000308, 0x000342 }},
- { 0x001FD8, 0, { 0x001FD0 }}, /* 1FD8; 1FD0; Case map */
- { 0x001FD9, 0, { 0x001FD1 }}, /* 1FD9; 1FD1; Case map */
- { 0x001FDA, 0, { 0x001F76 }}, /* 1FDA; 1F76; Case map */
- { 0x001FDB, 0, { 0x001F77 }}, /* 1FDB; 1F77; Case map */
- { 0x001FE2, 0, { 0x0003C5, /* 1FE2; 03C5 0308 0300; Case map */
- 0x000308, 0x000300 }},
- { 0x001FE3, 0, { 0x0003C5, /* 1FE3; 03C5 0308 0301; Case map */
- 0x000308, 0x000301 }},
- { 0x001FE4, 0, { 0x0003C1, /* 1FE4; 03C1 0313; Case map */
- 0x000313 }},
- { 0x001FE6, 0, { 0x0003C5, /* 1FE6; 03C5 0342; Case map */
- 0x000342 }},
- { 0x001FE7, 0, { 0x0003C5, /* 1FE7; 03C5 0308 0342; Case map */
- 0x000308, 0x000342 }},
- { 0x001FE8, 0, { 0x001FE0 }}, /* 1FE8; 1FE0; Case map */
- { 0x001FE9, 0, { 0x001FE1 }}, /* 1FE9; 1FE1; Case map */
- { 0x001FEA, 0, { 0x001F7A }}, /* 1FEA; 1F7A; Case map */
- { 0x001FEB, 0, { 0x001F7B }}, /* 1FEB; 1F7B; Case map */
- { 0x001FEC, 0, { 0x001FE5 }}, /* 1FEC; 1FE5; Case map */
- { 0x001FF2, 0, { 0x001F7C, /* 1FF2; 1F7C 03B9; Case map */
- 0x0003B9 }},
- { 0x001FF3, 0, { 0x0003C9, /* 1FF3; 03C9 03B9; Case map */
- 0x0003B9 }},
- { 0x001FF4, 0, { 0x0003CE, /* 1FF4; 03CE 03B9; Case map */
- 0x0003B9 }},
- { 0x001FF6, 0, { 0x0003C9, /* 1FF6; 03C9 0342; Case map */
- 0x000342 }},
- { 0x001FF7, 0, { 0x0003C9, /* 1FF7; 03C9 0342 03B9; Case map */
- 0x000342, 0x0003B9 }},
- { 0x001FF8, 0, { 0x001F78 }}, /* 1FF8; 1F78; Case map */
- { 0x001FF9, 0, { 0x001F79 }}, /* 1FF9; 1F79; Case map */
- { 0x001FFA, 0, { 0x001F7C }}, /* 1FFA; 1F7C; Case map */
- { 0x001FFB, 0, { 0x001F7D }}, /* 1FFB; 1F7D; Case map */
- { 0x001FFC, 0, { 0x0003C9, /* 1FFC; 03C9 03B9; Case map */
- 0x0003B9 }},
- { 0x0020A8, 0, { 0x000072, /* 20A8; 0072 0073; Additional folding */
- 0x000073 }},
- { 0x002102, 0, { 0x000063 }}, /* 2102; 0063; Additional folding */
- { 0x002103, 0, { 0x0000B0, /* 2103; 00B0 0063; Additional folding */
- 0x000063 }},
- { 0x002107, 0, { 0x00025B }}, /* 2107; 025B; Additional folding */
- { 0x002109, 0, { 0x0000B0, /* 2109; 00B0 0066; Additional folding */
- 0x000066 }},
- { 0x00210B, 0, { 0x000068 }}, /* 210B; 0068; Additional folding */
- { 0x00210C, 0, { 0x000068 }}, /* 210C; 0068; Additional folding */
- { 0x00210D, 0, { 0x000068 }}, /* 210D; 0068; Additional folding */
- { 0x002110, 0, { 0x000069 }}, /* 2110; 0069; Additional folding */
- { 0x002111, 0, { 0x000069 }}, /* 2111; 0069; Additional folding */
- { 0x002112, 0, { 0x00006C }}, /* 2112; 006C; Additional folding */
- { 0x002115, 0, { 0x00006E }}, /* 2115; 006E; Additional folding */
- { 0x002116, 0, { 0x00006E, /* 2116; 006E 006F; Additional folding */
- 0x00006F }},
- { 0x002119, 0, { 0x000070 }}, /* 2119; 0070; Additional folding */
- { 0x00211A, 0, { 0x000071 }}, /* 211A; 0071; Additional folding */
- { 0x00211B, 0, { 0x000072 }}, /* 211B; 0072; Additional folding */
- { 0x00211C, 0, { 0x000072 }}, /* 211C; 0072; Additional folding */
- { 0x00211D, 0, { 0x000072 }}, /* 211D; 0072; Additional folding */
- { 0x002120, 0, { 0x000073, /* 2120; 0073 006D; Additional folding */
- 0x00006D }},
- { 0x002121, 0, { 0x000074, /* 2121; 0074 0065 006C; Additional folding */
- 0x000065, 0x00006C }},
- { 0x002122, 0, { 0x000074, /* 2122; 0074 006D; Additional folding */
- 0x00006D }},
- { 0x002124, 0, { 0x00007A }}, /* 2124; 007A; Additional folding */
- { 0x002126, 0, { 0x0003C9 }}, /* 2126; 03C9; Case map */
- { 0x002128, 0, { 0x00007A }}, /* 2128; 007A; Additional folding */
- { 0x00212A, 0, { 0x00006B }}, /* 212A; 006B; Case map */
- { 0x00212B, 0, { 0x0000E5 }}, /* 212B; 00E5; Case map */
- { 0x00212C, 0, { 0x000062 }}, /* 212C; 0062; Additional folding */
- { 0x00212D, 0, { 0x000063 }}, /* 212D; 0063; Additional folding */
- { 0x002130, 0, { 0x000065 }}, /* 2130; 0065; Additional folding */
- { 0x002131, 0, { 0x000066 }}, /* 2131; 0066; Additional folding */
- { 0x002133, 0, { 0x00006D }}, /* 2133; 006D; Additional folding */
- { 0x00213E, 0, { 0x0003B3 }}, /* 213E; 03B3; Additional folding */
- { 0x00213F, 0, { 0x0003C0 }}, /* 213F; 03C0; Additional folding */
- { 0x002145, 0, { 0x000064 }}, /* 2145; 0064; Additional folding */
- { 0x002160, 0, { 0x002170 }}, /* 2160; 2170; Case map */
- { 0x002161, 0, { 0x002171 }}, /* 2161; 2171; Case map */
- { 0x002162, 0, { 0x002172 }}, /* 2162; 2172; Case map */
- { 0x002163, 0, { 0x002173 }}, /* 2163; 2173; Case map */
- { 0x002164, 0, { 0x002174 }}, /* 2164; 2174; Case map */
- { 0x002165, 0, { 0x002175 }}, /* 2165; 2175; Case map */
- { 0x002166, 0, { 0x002176 }}, /* 2166; 2176; Case map */
- { 0x002167, 0, { 0x002177 }}, /* 2167; 2177; Case map */
- { 0x002168, 0, { 0x002178 }}, /* 2168; 2178; Case map */
- { 0x002169, 0, { 0x002179 }}, /* 2169; 2179; Case map */
- { 0x00216A, 0, { 0x00217A }}, /* 216A; 217A; Case map */
- { 0x00216B, 0, { 0x00217B }}, /* 216B; 217B; Case map */
- { 0x00216C, 0, { 0x00217C }}, /* 216C; 217C; Case map */
- { 0x00216D, 0, { 0x00217D }}, /* 216D; 217D; Case map */
- { 0x00216E, 0, { 0x00217E }}, /* 216E; 217E; Case map */
- { 0x00216F, 0, { 0x00217F }}, /* 216F; 217F; Case map */
- { 0x0024B6, 0, { 0x0024D0 }}, /* 24B6; 24D0; Case map */
- { 0x0024B7, 0, { 0x0024D1 }}, /* 24B7; 24D1; Case map */
- { 0x0024B8, 0, { 0x0024D2 }}, /* 24B8; 24D2; Case map */
- { 0x0024B9, 0, { 0x0024D3 }}, /* 24B9; 24D3; Case map */
- { 0x0024BA, 0, { 0x0024D4 }}, /* 24BA; 24D4; Case map */
- { 0x0024BB, 0, { 0x0024D5 }}, /* 24BB; 24D5; Case map */
- { 0x0024BC, 0, { 0x0024D6 }}, /* 24BC; 24D6; Case map */
- { 0x0024BD, 0, { 0x0024D7 }}, /* 24BD; 24D7; Case map */
- { 0x0024BE, 0, { 0x0024D8 }}, /* 24BE; 24D8; Case map */
- { 0x0024BF, 0, { 0x0024D9 }}, /* 24BF; 24D9; Case map */
- { 0x0024C0, 0, { 0x0024DA }}, /* 24C0; 24DA; Case map */
- { 0x0024C1, 0, { 0x0024DB }}, /* 24C1; 24DB; Case map */
- { 0x0024C2, 0, { 0x0024DC }}, /* 24C2; 24DC; Case map */
- { 0x0024C3, 0, { 0x0024DD }}, /* 24C3; 24DD; Case map */
- { 0x0024C4, 0, { 0x0024DE }}, /* 24C4; 24DE; Case map */
- { 0x0024C5, 0, { 0x0024DF }}, /* 24C5; 24DF; Case map */
- { 0x0024C6, 0, { 0x0024E0 }}, /* 24C6; 24E0; Case map */
- { 0x0024C7, 0, { 0x0024E1 }}, /* 24C7; 24E1; Case map */
- { 0x0024C8, 0, { 0x0024E2 }}, /* 24C8; 24E2; Case map */
- { 0x0024C9, 0, { 0x0024E3 }}, /* 24C9; 24E3; Case map */
- { 0x0024CA, 0, { 0x0024E4 }}, /* 24CA; 24E4; Case map */
- { 0x0024CB, 0, { 0x0024E5 }}, /* 24CB; 24E5; Case map */
- { 0x0024CC, 0, { 0x0024E6 }}, /* 24CC; 24E6; Case map */
- { 0x0024CD, 0, { 0x0024E7 }}, /* 24CD; 24E7; Case map */
- { 0x0024CE, 0, { 0x0024E8 }}, /* 24CE; 24E8; Case map */
- { 0x0024CF, 0, { 0x0024E9 }}, /* 24CF; 24E9; Case map */
- { 0x003371, 0, { 0x000068, /* 3371; 0068 0070 0061; Additional folding */
- 0x000070, 0x000061 }},
- { 0x003373, 0, { 0x000061, /* 3373; 0061 0075; Additional folding */
- 0x000075 }},
- { 0x003375, 0, { 0x00006F, /* 3375; 006F 0076; Additional folding */
- 0x000076 }},
- { 0x003380, 0, { 0x000070, /* 3380; 0070 0061; Additional folding */
- 0x000061 }},
- { 0x003381, 0, { 0x00006E, /* 3381; 006E 0061; Additional folding */
- 0x000061 }},
- { 0x003382, 0, { 0x0003BC, /* 3382; 03BC 0061; Additional folding */
- 0x000061 }},
- { 0x003383, 0, { 0x00006D, /* 3383; 006D 0061; Additional folding */
- 0x000061 }},
- { 0x003384, 0, { 0x00006B, /* 3384; 006B 0061; Additional folding */
- 0x000061 }},
- { 0x003385, 0, { 0x00006B, /* 3385; 006B 0062; Additional folding */
- 0x000062 }},
- { 0x003386, 0, { 0x00006D, /* 3386; 006D 0062; Additional folding */
- 0x000062 }},
- { 0x003387, 0, { 0x000067, /* 3387; 0067 0062; Additional folding */
- 0x000062 }},
- { 0x00338A, 0, { 0x000070, /* 338A; 0070 0066; Additional folding */
- 0x000066 }},
- { 0x00338B, 0, { 0x00006E, /* 338B; 006E 0066; Additional folding */
- 0x000066 }},
- { 0x00338C, 0, { 0x0003BC, /* 338C; 03BC 0066; Additional folding */
- 0x000066 }},
- { 0x003390, 0, { 0x000068, /* 3390; 0068 007A; Additional folding */
- 0x00007A }},
- { 0x003391, 0, { 0x00006B, /* 3391; 006B 0068 007A; Additional folding */
- 0x000068, 0x00007A }},
- { 0x003392, 0, { 0x00006D, /* 3392; 006D 0068 007A; Additional folding */
- 0x000068, 0x00007A }},
- { 0x003393, 0, { 0x000067, /* 3393; 0067 0068 007A; Additional folding */
- 0x000068, 0x00007A }},
- { 0x003394, 0, { 0x000074, /* 3394; 0074 0068 007A; Additional folding */
- 0x000068, 0x00007A }},
- { 0x0033A9, 0, { 0x000070, /* 33A9; 0070 0061; Additional folding */
- 0x000061 }},
- { 0x0033AA, 0, { 0x00006B, /* 33AA; 006B 0070 0061; Additional folding */
- 0x000070, 0x000061 }},
- { 0x0033AB, 0, { 0x00006D, /* 33AB; 006D 0070 0061; Additional folding */
- 0x000070, 0x000061 }},
- { 0x0033AC, 0, { 0x000067, /* 33AC; 0067 0070 0061; Additional folding */
- 0x000070, 0x000061 }},
- { 0x0033B4, 0, { 0x000070, /* 33B4; 0070 0076; Additional folding */
- 0x000076 }},
- { 0x0033B5, 0, { 0x00006E, /* 33B5; 006E 0076; Additional folding */
- 0x000076 }},
- { 0x0033B6, 0, { 0x0003BC, /* 33B6; 03BC 0076; Additional folding */
- 0x000076 }},
- { 0x0033B7, 0, { 0x00006D, /* 33B7; 006D 0076; Additional folding */
- 0x000076 }},
- { 0x0033B8, 0, { 0x00006B, /* 33B8; 006B 0076; Additional folding */
- 0x000076 }},
- { 0x0033B9, 0, { 0x00006D, /* 33B9; 006D 0076; Additional folding */
- 0x000076 }},
- { 0x0033BA, 0, { 0x000070, /* 33BA; 0070 0077; Additional folding */
- 0x000077 }},
- { 0x0033BB, 0, { 0x00006E, /* 33BB; 006E 0077; Additional folding */
- 0x000077 }},
- { 0x0033BC, 0, { 0x0003BC, /* 33BC; 03BC 0077; Additional folding */
- 0x000077 }},
- { 0x0033BD, 0, { 0x00006D, /* 33BD; 006D 0077; Additional folding */
- 0x000077 }},
- { 0x0033BE, 0, { 0x00006B, /* 33BE; 006B 0077; Additional folding */
- 0x000077 }},
- { 0x0033BF, 0, { 0x00006D, /* 33BF; 006D 0077; Additional folding */
- 0x000077 }},
- { 0x0033C0, 0, { 0x00006B, /* 33C0; 006B 03C9; Additional folding */
- 0x0003C9 }},
- { 0x0033C1, 0, { 0x00006D, /* 33C1; 006D 03C9; Additional folding */
- 0x0003C9 }},
- { 0x0033C3, 0, { 0x000062, /* 33C3; 0062 0071; Additional folding */
- 0x000071 }},
- { 0x0033C6, 0, { 0x000063, /* 33C6; 0063 2215 006B 0067; Additional folding */
- 0x002215, 0x00006B, 0x000067 }},
- { 0x0033C7, 0, { 0x000063, /* 33C7; 0063 006F 002E; Additional folding */
- 0x00006F, 0x00002E }},
- { 0x0033C8, 0, { 0x000064, /* 33C8; 0064 0062; Additional folding */
- 0x000062 }},
- { 0x0033C9, 0, { 0x000067, /* 33C9; 0067 0079; Additional folding */
- 0x000079 }},
- { 0x0033CB, 0, { 0x000068, /* 33CB; 0068 0070; Additional folding */
- 0x000070 }},
- { 0x0033CD, 0, { 0x00006B, /* 33CD; 006B 006B; Additional folding */
- 0x00006B }},
- { 0x0033CE, 0, { 0x00006B, /* 33CE; 006B 006D; Additional folding */
- 0x00006D }},
- { 0x0033D7, 0, { 0x000070, /* 33D7; 0070 0068; Additional folding */
- 0x000068 }},
- { 0x0033D9, 0, { 0x000070, /* 33D9; 0070 0070 006D; Additional folding */
- 0x000070, 0x00006D }},
- { 0x0033DA, 0, { 0x000070, /* 33DA; 0070 0072; Additional folding */
- 0x000072 }},
- { 0x0033DC, 0, { 0x000073, /* 33DC; 0073 0076; Additional folding */
- 0x000076 }},
- { 0x0033DD, 0, { 0x000077, /* 33DD; 0077 0062; Additional folding */
- 0x000062 }},
- { 0x00FB00, 0, { 0x000066, /* FB00; 0066 0066; Case map */
- 0x000066 }},
- { 0x00FB01, 0, { 0x000066, /* FB01; 0066 0069; Case map */
- 0x000069 }},
- { 0x00FB02, 0, { 0x000066, /* FB02; 0066 006C; Case map */
- 0x00006C }},
- { 0x00FB03, 0, { 0x000066, /* FB03; 0066 0066 0069; Case map */
- 0x000066, 0x000069 }},
- { 0x00FB04, 0, { 0x000066, /* FB04; 0066 0066 006C; Case map */
- 0x000066, 0x00006C }},
- { 0x00FB05, 0, { 0x000073, /* FB05; 0073 0074; Case map */
- 0x000074 }},
- { 0x00FB06, 0, { 0x000073, /* FB06; 0073 0074; Case map */
- 0x000074 }},
- { 0x00FB13, 0, { 0x000574, /* FB13; 0574 0576; Case map */
- 0x000576 }},
- { 0x00FB14, 0, { 0x000574, /* FB14; 0574 0565; Case map */
- 0x000565 }},
- { 0x00FB15, 0, { 0x000574, /* FB15; 0574 056B; Case map */
- 0x00056B }},
- { 0x00FB16, 0, { 0x00057E, /* FB16; 057E 0576; Case map */
- 0x000576 }},
- { 0x00FB17, 0, { 0x000574, /* FB17; 0574 056D; Case map */
- 0x00056D }},
- { 0x00FF21, 0, { 0x00FF41 }}, /* FF21; FF41; Case map */
- { 0x00FF22, 0, { 0x00FF42 }}, /* FF22; FF42; Case map */
- { 0x00FF23, 0, { 0x00FF43 }}, /* FF23; FF43; Case map */
- { 0x00FF24, 0, { 0x00FF44 }}, /* FF24; FF44; Case map */
- { 0x00FF25, 0, { 0x00FF45 }}, /* FF25; FF45; Case map */
- { 0x00FF26, 0, { 0x00FF46 }}, /* FF26; FF46; Case map */
- { 0x00FF27, 0, { 0x00FF47 }}, /* FF27; FF47; Case map */
- { 0x00FF28, 0, { 0x00FF48 }}, /* FF28; FF48; Case map */
- { 0x00FF29, 0, { 0x00FF49 }}, /* FF29; FF49; Case map */
- { 0x00FF2A, 0, { 0x00FF4A }}, /* FF2A; FF4A; Case map */
- { 0x00FF2B, 0, { 0x00FF4B }}, /* FF2B; FF4B; Case map */
- { 0x00FF2C, 0, { 0x00FF4C }}, /* FF2C; FF4C; Case map */
- { 0x00FF2D, 0, { 0x00FF4D }}, /* FF2D; FF4D; Case map */
- { 0x00FF2E, 0, { 0x00FF4E }}, /* FF2E; FF4E; Case map */
- { 0x00FF2F, 0, { 0x00FF4F }}, /* FF2F; FF4F; Case map */
- { 0x00FF30, 0, { 0x00FF50 }}, /* FF30; FF50; Case map */
- { 0x00FF31, 0, { 0x00FF51 }}, /* FF31; FF51; Case map */
- { 0x00FF32, 0, { 0x00FF52 }}, /* FF32; FF52; Case map */
- { 0x00FF33, 0, { 0x00FF53 }}, /* FF33; FF53; Case map */
- { 0x00FF34, 0, { 0x00FF54 }}, /* FF34; FF54; Case map */
- { 0x00FF35, 0, { 0x00FF55 }}, /* FF35; FF55; Case map */
- { 0x00FF36, 0, { 0x00FF56 }}, /* FF36; FF56; Case map */
- { 0x00FF37, 0, { 0x00FF57 }}, /* FF37; FF57; Case map */
- { 0x00FF38, 0, { 0x00FF58 }}, /* FF38; FF58; Case map */
- { 0x00FF39, 0, { 0x00FF59 }}, /* FF39; FF59; Case map */
- { 0x00FF3A, 0, { 0x00FF5A }}, /* FF3A; FF5A; Case map */
- { 0x010400, 0, { 0x010428 }}, /* 10400; 10428; Case map */
- { 0x010401, 0, { 0x010429 }}, /* 10401; 10429; Case map */
- { 0x010402, 0, { 0x01042A }}, /* 10402; 1042A; Case map */
- { 0x010403, 0, { 0x01042B }}, /* 10403; 1042B; Case map */
- { 0x010404, 0, { 0x01042C }}, /* 10404; 1042C; Case map */
- { 0x010405, 0, { 0x01042D }}, /* 10405; 1042D; Case map */
- { 0x010406, 0, { 0x01042E }}, /* 10406; 1042E; Case map */
- { 0x010407, 0, { 0x01042F }}, /* 10407; 1042F; Case map */
- { 0x010408, 0, { 0x010430 }}, /* 10408; 10430; Case map */
- { 0x010409, 0, { 0x010431 }}, /* 10409; 10431; Case map */
- { 0x01040A, 0, { 0x010432 }}, /* 1040A; 10432; Case map */
- { 0x01040B, 0, { 0x010433 }}, /* 1040B; 10433; Case map */
- { 0x01040C, 0, { 0x010434 }}, /* 1040C; 10434; Case map */
- { 0x01040D, 0, { 0x010435 }}, /* 1040D; 10435; Case map */
- { 0x01040E, 0, { 0x010436 }}, /* 1040E; 10436; Case map */
- { 0x01040F, 0, { 0x010437 }}, /* 1040F; 10437; Case map */
- { 0x010410, 0, { 0x010438 }}, /* 10410; 10438; Case map */
- { 0x010411, 0, { 0x010439 }}, /* 10411; 10439; Case map */
- { 0x010412, 0, { 0x01043A }}, /* 10412; 1043A; Case map */
- { 0x010413, 0, { 0x01043B }}, /* 10413; 1043B; Case map */
- { 0x010414, 0, { 0x01043C }}, /* 10414; 1043C; Case map */
- { 0x010415, 0, { 0x01043D }}, /* 10415; 1043D; Case map */
- { 0x010416, 0, { 0x01043E }}, /* 10416; 1043E; Case map */
- { 0x010417, 0, { 0x01043F }}, /* 10417; 1043F; Case map */
- { 0x010418, 0, { 0x010440 }}, /* 10418; 10440; Case map */
- { 0x010419, 0, { 0x010441 }}, /* 10419; 10441; Case map */
- { 0x01041A, 0, { 0x010442 }}, /* 1041A; 10442; Case map */
- { 0x01041B, 0, { 0x010443 }}, /* 1041B; 10443; Case map */
- { 0x01041C, 0, { 0x010444 }}, /* 1041C; 10444; Case map */
- { 0x01041D, 0, { 0x010445 }}, /* 1041D; 10445; Case map */
- { 0x01041E, 0, { 0x010446 }}, /* 1041E; 10446; Case map */
- { 0x01041F, 0, { 0x010447 }}, /* 1041F; 10447; Case map */
- { 0x010420, 0, { 0x010448 }}, /* 10420; 10448; Case map */
- { 0x010421, 0, { 0x010449 }}, /* 10421; 10449; Case map */
- { 0x010422, 0, { 0x01044A }}, /* 10422; 1044A; Case map */
- { 0x010423, 0, { 0x01044B }}, /* 10423; 1044B; Case map */
- { 0x010424, 0, { 0x01044C }}, /* 10424; 1044C; Case map */
- { 0x010425, 0, { 0x01044D }}, /* 10425; 1044D; Case map */
- { 0x01D400, 0, { 0x000061 }}, /* 1D400; 0061; Additional folding */
- { 0x01D401, 0, { 0x000062 }}, /* 1D401; 0062; Additional folding */
- { 0x01D402, 0, { 0x000063 }}, /* 1D402; 0063; Additional folding */
- { 0x01D403, 0, { 0x000064 }}, /* 1D403; 0064; Additional folding */
- { 0x01D404, 0, { 0x000065 }}, /* 1D404; 0065; Additional folding */
- { 0x01D405, 0, { 0x000066 }}, /* 1D405; 0066; Additional folding */
- { 0x01D406, 0, { 0x000067 }}, /* 1D406; 0067; Additional folding */
- { 0x01D407, 0, { 0x000068 }}, /* 1D407; 0068; Additional folding */
- { 0x01D408, 0, { 0x000069 }}, /* 1D408; 0069; Additional folding */
- { 0x01D409, 0, { 0x00006A }}, /* 1D409; 006A; Additional folding */
- { 0x01D40A, 0, { 0x00006B }}, /* 1D40A; 006B; Additional folding */
- { 0x01D40B, 0, { 0x00006C }}, /* 1D40B; 006C; Additional folding */
- { 0x01D40C, 0, { 0x00006D }}, /* 1D40C; 006D; Additional folding */
- { 0x01D40D, 0, { 0x00006E }}, /* 1D40D; 006E; Additional folding */
- { 0x01D40E, 0, { 0x00006F }}, /* 1D40E; 006F; Additional folding */
- { 0x01D40F, 0, { 0x000070 }}, /* 1D40F; 0070; Additional folding */
- { 0x01D410, 0, { 0x000071 }}, /* 1D410; 0071; Additional folding */
- { 0x01D411, 0, { 0x000072 }}, /* 1D411; 0072; Additional folding */
- { 0x01D412, 0, { 0x000073 }}, /* 1D412; 0073; Additional folding */
- { 0x01D413, 0, { 0x000074 }}, /* 1D413; 0074; Additional folding */
- { 0x01D414, 0, { 0x000075 }}, /* 1D414; 0075; Additional folding */
- { 0x01D415, 0, { 0x000076 }}, /* 1D415; 0076; Additional folding */
- { 0x01D416, 0, { 0x000077 }}, /* 1D416; 0077; Additional folding */
- { 0x01D417, 0, { 0x000078 }}, /* 1D417; 0078; Additional folding */
- { 0x01D418, 0, { 0x000079 }}, /* 1D418; 0079; Additional folding */
- { 0x01D419, 0, { 0x00007A }}, /* 1D419; 007A; Additional folding */
- { 0x01D434, 0, { 0x000061 }}, /* 1D434; 0061; Additional folding */
- { 0x01D435, 0, { 0x000062 }}, /* 1D435; 0062; Additional folding */
- { 0x01D436, 0, { 0x000063 }}, /* 1D436; 0063; Additional folding */
- { 0x01D437, 0, { 0x000064 }}, /* 1D437; 0064; Additional folding */
- { 0x01D438, 0, { 0x000065 }}, /* 1D438; 0065; Additional folding */
- { 0x01D439, 0, { 0x000066 }}, /* 1D439; 0066; Additional folding */
- { 0x01D43A, 0, { 0x000067 }}, /* 1D43A; 0067; Additional folding */
- { 0x01D43B, 0, { 0x000068 }}, /* 1D43B; 0068; Additional folding */
- { 0x01D43C, 0, { 0x000069 }}, /* 1D43C; 0069; Additional folding */
- { 0x01D43D, 0, { 0x00006A }}, /* 1D43D; 006A; Additional folding */
- { 0x01D43E, 0, { 0x00006B }}, /* 1D43E; 006B; Additional folding */
- { 0x01D43F, 0, { 0x00006C }}, /* 1D43F; 006C; Additional folding */
- { 0x01D440, 0, { 0x00006D }}, /* 1D440; 006D; Additional folding */
- { 0x01D441, 0, { 0x00006E }}, /* 1D441; 006E; Additional folding */
- { 0x01D442, 0, { 0x00006F }}, /* 1D442; 006F; Additional folding */
- { 0x01D443, 0, { 0x000070 }}, /* 1D443; 0070; Additional folding */
- { 0x01D444, 0, { 0x000071 }}, /* 1D444; 0071; Additional folding */
- { 0x01D445, 0, { 0x000072 }}, /* 1D445; 0072; Additional folding */
- { 0x01D446, 0, { 0x000073 }}, /* 1D446; 0073; Additional folding */
- { 0x01D447, 0, { 0x000074 }}, /* 1D447; 0074; Additional folding */
- { 0x01D448, 0, { 0x000075 }}, /* 1D448; 0075; Additional folding */
- { 0x01D449, 0, { 0x000076 }}, /* 1D449; 0076; Additional folding */
- { 0x01D44A, 0, { 0x000077 }}, /* 1D44A; 0077; Additional folding */
- { 0x01D44B, 0, { 0x000078 }}, /* 1D44B; 0078; Additional folding */
- { 0x01D44C, 0, { 0x000079 }}, /* 1D44C; 0079; Additional folding */
- { 0x01D44D, 0, { 0x00007A }}, /* 1D44D; 007A; Additional folding */
- { 0x01D468, 0, { 0x000061 }}, /* 1D468; 0061; Additional folding */
- { 0x01D469, 0, { 0x000062 }}, /* 1D469; 0062; Additional folding */
- { 0x01D46A, 0, { 0x000063 }}, /* 1D46A; 0063; Additional folding */
- { 0x01D46B, 0, { 0x000064 }}, /* 1D46B; 0064; Additional folding */
- { 0x01D46C, 0, { 0x000065 }}, /* 1D46C; 0065; Additional folding */
- { 0x01D46D, 0, { 0x000066 }}, /* 1D46D; 0066; Additional folding */
- { 0x01D46E, 0, { 0x000067 }}, /* 1D46E; 0067; Additional folding */
- { 0x01D46F, 0, { 0x000068 }}, /* 1D46F; 0068; Additional folding */
- { 0x01D470, 0, { 0x000069 }}, /* 1D470; 0069; Additional folding */
- { 0x01D471, 0, { 0x00006A }}, /* 1D471; 006A; Additional folding */
- { 0x01D472, 0, { 0x00006B }}, /* 1D472; 006B; Additional folding */
- { 0x01D473, 0, { 0x00006C }}, /* 1D473; 006C; Additional folding */
- { 0x01D474, 0, { 0x00006D }}, /* 1D474; 006D; Additional folding */
- { 0x01D475, 0, { 0x00006E }}, /* 1D475; 006E; Additional folding */
- { 0x01D476, 0, { 0x00006F }}, /* 1D476; 006F; Additional folding */
- { 0x01D477, 0, { 0x000070 }}, /* 1D477; 0070; Additional folding */
- { 0x01D478, 0, { 0x000071 }}, /* 1D478; 0071; Additional folding */
- { 0x01D479, 0, { 0x000072 }}, /* 1D479; 0072; Additional folding */
- { 0x01D47A, 0, { 0x000073 }}, /* 1D47A; 0073; Additional folding */
- { 0x01D47B, 0, { 0x000074 }}, /* 1D47B; 0074; Additional folding */
- { 0x01D47C, 0, { 0x000075 }}, /* 1D47C; 0075; Additional folding */
- { 0x01D47D, 0, { 0x000076 }}, /* 1D47D; 0076; Additional folding */
- { 0x01D47E, 0, { 0x000077 }}, /* 1D47E; 0077; Additional folding */
- { 0x01D47F, 0, { 0x000078 }}, /* 1D47F; 0078; Additional folding */
- { 0x01D480, 0, { 0x000079 }}, /* 1D480; 0079; Additional folding */
- { 0x01D481, 0, { 0x00007A }}, /* 1D481; 007A; Additional folding */
- { 0x01D49C, 0, { 0x000061 }}, /* 1D49C; 0061; Additional folding */
- { 0x01D49E, 0, { 0x000063 }}, /* 1D49E; 0063; Additional folding */
- { 0x01D49F, 0, { 0x000064 }}, /* 1D49F; 0064; Additional folding */
- { 0x01D4A2, 0, { 0x000067 }}, /* 1D4A2; 0067; Additional folding */
- { 0x01D4A5, 0, { 0x00006A }}, /* 1D4A5; 006A; Additional folding */
- { 0x01D4A6, 0, { 0x00006B }}, /* 1D4A6; 006B; Additional folding */
- { 0x01D4A9, 0, { 0x00006E }}, /* 1D4A9; 006E; Additional folding */
- { 0x01D4AA, 0, { 0x00006F }}, /* 1D4AA; 006F; Additional folding */
- { 0x01D4AB, 0, { 0x000070 }}, /* 1D4AB; 0070; Additional folding */
- { 0x01D4AC, 0, { 0x000071 }}, /* 1D4AC; 0071; Additional folding */
- { 0x01D4AE, 0, { 0x000073 }}, /* 1D4AE; 0073; Additional folding */
- { 0x01D4AF, 0, { 0x000074 }}, /* 1D4AF; 0074; Additional folding */
- { 0x01D4B0, 0, { 0x000075 }}, /* 1D4B0; 0075; Additional folding */
- { 0x01D4B1, 0, { 0x000076 }}, /* 1D4B1; 0076; Additional folding */
- { 0x01D4B2, 0, { 0x000077 }}, /* 1D4B2; 0077; Additional folding */
- { 0x01D4B3, 0, { 0x000078 }}, /* 1D4B3; 0078; Additional folding */
- { 0x01D4B4, 0, { 0x000079 }}, /* 1D4B4; 0079; Additional folding */
- { 0x01D4B5, 0, { 0x00007A }}, /* 1D4B5; 007A; Additional folding */
- { 0x01D4D0, 0, { 0x000061 }}, /* 1D4D0; 0061; Additional folding */
- { 0x01D4D1, 0, { 0x000062 }}, /* 1D4D1; 0062; Additional folding */
- { 0x01D4D2, 0, { 0x000063 }}, /* 1D4D2; 0063; Additional folding */
- { 0x01D4D3, 0, { 0x000064 }}, /* 1D4D3; 0064; Additional folding */
- { 0x01D4D4, 0, { 0x000065 }}, /* 1D4D4; 0065; Additional folding */
- { 0x01D4D5, 0, { 0x000066 }}, /* 1D4D5; 0066; Additional folding */
- { 0x01D4D6, 0, { 0x000067 }}, /* 1D4D6; 0067; Additional folding */
- { 0x01D4D7, 0, { 0x000068 }}, /* 1D4D7; 0068; Additional folding */
- { 0x01D4D8, 0, { 0x000069 }}, /* 1D4D8; 0069; Additional folding */
- { 0x01D4D9, 0, { 0x00006A }}, /* 1D4D9; 006A; Additional folding */
- { 0x01D4DA, 0, { 0x00006B }}, /* 1D4DA; 006B; Additional folding */
- { 0x01D4DB, 0, { 0x00006C }}, /* 1D4DB; 006C; Additional folding */
- { 0x01D4DC, 0, { 0x00006D }}, /* 1D4DC; 006D; Additional folding */
- { 0x01D4DD, 0, { 0x00006E }}, /* 1D4DD; 006E; Additional folding */
- { 0x01D4DE, 0, { 0x00006F }}, /* 1D4DE; 006F; Additional folding */
- { 0x01D4DF, 0, { 0x000070 }}, /* 1D4DF; 0070; Additional folding */
- { 0x01D4E0, 0, { 0x000071 }}, /* 1D4E0; 0071; Additional folding */
- { 0x01D4E1, 0, { 0x000072 }}, /* 1D4E1; 0072; Additional folding */
- { 0x01D4E2, 0, { 0x000073 }}, /* 1D4E2; 0073; Additional folding */
- { 0x01D4E3, 0, { 0x000074 }}, /* 1D4E3; 0074; Additional folding */
- { 0x01D4E4, 0, { 0x000075 }}, /* 1D4E4; 0075; Additional folding */
- { 0x01D4E5, 0, { 0x000076 }}, /* 1D4E5; 0076; Additional folding */
- { 0x01D4E6, 0, { 0x000077 }}, /* 1D4E6; 0077; Additional folding */
- { 0x01D4E7, 0, { 0x000078 }}, /* 1D4E7; 0078; Additional folding */
- { 0x01D4E8, 0, { 0x000079 }}, /* 1D4E8; 0079; Additional folding */
- { 0x01D4E9, 0, { 0x00007A }}, /* 1D4E9; 007A; Additional folding */
- { 0x01D504, 0, { 0x000061 }}, /* 1D504; 0061; Additional folding */
- { 0x01D505, 0, { 0x000062 }}, /* 1D505; 0062; Additional folding */
- { 0x01D507, 0, { 0x000064 }}, /* 1D507; 0064; Additional folding */
- { 0x01D508, 0, { 0x000065 }}, /* 1D508; 0065; Additional folding */
- { 0x01D509, 0, { 0x000066 }}, /* 1D509; 0066; Additional folding */
- { 0x01D50A, 0, { 0x000067 }}, /* 1D50A; 0067; Additional folding */
- { 0x01D50D, 0, { 0x00006A }}, /* 1D50D; 006A; Additional folding */
- { 0x01D50E, 0, { 0x00006B }}, /* 1D50E; 006B; Additional folding */
- { 0x01D50F, 0, { 0x00006C }}, /* 1D50F; 006C; Additional folding */
- { 0x01D510, 0, { 0x00006D }}, /* 1D510; 006D; Additional folding */
- { 0x01D511, 0, { 0x00006E }}, /* 1D511; 006E; Additional folding */
- { 0x01D512, 0, { 0x00006F }}, /* 1D512; 006F; Additional folding */
- { 0x01D513, 0, { 0x000070 }}, /* 1D513; 0070; Additional folding */
- { 0x01D514, 0, { 0x000071 }}, /* 1D514; 0071; Additional folding */
- { 0x01D516, 0, { 0x000073 }}, /* 1D516; 0073; Additional folding */
- { 0x01D517, 0, { 0x000074 }}, /* 1D517; 0074; Additional folding */
- { 0x01D518, 0, { 0x000075 }}, /* 1D518; 0075; Additional folding */
- { 0x01D519, 0, { 0x000076 }}, /* 1D519; 0076; Additional folding */
- { 0x01D51A, 0, { 0x000077 }}, /* 1D51A; 0077; Additional folding */
- { 0x01D51B, 0, { 0x000078 }}, /* 1D51B; 0078; Additional folding */
- { 0x01D51C, 0, { 0x000079 }}, /* 1D51C; 0079; Additional folding */
- { 0x01D538, 0, { 0x000061 }}, /* 1D538; 0061; Additional folding */
- { 0x01D539, 0, { 0x000062 }}, /* 1D539; 0062; Additional folding */
- { 0x01D53B, 0, { 0x000064 }}, /* 1D53B; 0064; Additional folding */
- { 0x01D53C, 0, { 0x000065 }}, /* 1D53C; 0065; Additional folding */
- { 0x01D53D, 0, { 0x000066 }}, /* 1D53D; 0066; Additional folding */
- { 0x01D53E, 0, { 0x000067 }}, /* 1D53E; 0067; Additional folding */
- { 0x01D540, 0, { 0x000069 }}, /* 1D540; 0069; Additional folding */
- { 0x01D541, 0, { 0x00006A }}, /* 1D541; 006A; Additional folding */
- { 0x01D542, 0, { 0x00006B }}, /* 1D542; 006B; Additional folding */
- { 0x01D543, 0, { 0x00006C }}, /* 1D543; 006C; Additional folding */
- { 0x01D544, 0, { 0x00006D }}, /* 1D544; 006D; Additional folding */
- { 0x01D546, 0, { 0x00006F }}, /* 1D546; 006F; Additional folding */
- { 0x01D54A, 0, { 0x000073 }}, /* 1D54A; 0073; Additional folding */
- { 0x01D54B, 0, { 0x000074 }}, /* 1D54B; 0074; Additional folding */
- { 0x01D54C, 0, { 0x000075 }}, /* 1D54C; 0075; Additional folding */
- { 0x01D54D, 0, { 0x000076 }}, /* 1D54D; 0076; Additional folding */
- { 0x01D54E, 0, { 0x000077 }}, /* 1D54E; 0077; Additional folding */
- { 0x01D54F, 0, { 0x000078 }}, /* 1D54F; 0078; Additional folding */
- { 0x01D550, 0, { 0x000079 }}, /* 1D550; 0079; Additional folding */
- { 0x01D56C, 0, { 0x000061 }}, /* 1D56C; 0061; Additional folding */
- { 0x01D56D, 0, { 0x000062 }}, /* 1D56D; 0062; Additional folding */
- { 0x01D56E, 0, { 0x000063 }}, /* 1D56E; 0063; Additional folding */
- { 0x01D56F, 0, { 0x000064 }}, /* 1D56F; 0064; Additional folding */
- { 0x01D570, 0, { 0x000065 }}, /* 1D570; 0065; Additional folding */
- { 0x01D571, 0, { 0x000066 }}, /* 1D571; 0066; Additional folding */
- { 0x01D572, 0, { 0x000067 }}, /* 1D572; 0067; Additional folding */
- { 0x01D573, 0, { 0x000068 }}, /* 1D573; 0068; Additional folding */
- { 0x01D574, 0, { 0x000069 }}, /* 1D574; 0069; Additional folding */
- { 0x01D575, 0, { 0x00006A }}, /* 1D575; 006A; Additional folding */
- { 0x01D576, 0, { 0x00006B }}, /* 1D576; 006B; Additional folding */
- { 0x01D577, 0, { 0x00006C }}, /* 1D577; 006C; Additional folding */
- { 0x01D578, 0, { 0x00006D }}, /* 1D578; 006D; Additional folding */
- { 0x01D579, 0, { 0x00006E }}, /* 1D579; 006E; Additional folding */
- { 0x01D57A, 0, { 0x00006F }}, /* 1D57A; 006F; Additional folding */
- { 0x01D57B, 0, { 0x000070 }}, /* 1D57B; 0070; Additional folding */
- { 0x01D57C, 0, { 0x000071 }}, /* 1D57C; 0071; Additional folding */
- { 0x01D57D, 0, { 0x000072 }}, /* 1D57D; 0072; Additional folding */
- { 0x01D57E, 0, { 0x000073 }}, /* 1D57E; 0073; Additional folding */
- { 0x01D57F, 0, { 0x000074 }}, /* 1D57F; 0074; Additional folding */
- { 0x01D580, 0, { 0x000075 }}, /* 1D580; 0075; Additional folding */
- { 0x01D581, 0, { 0x000076 }}, /* 1D581; 0076; Additional folding */
- { 0x01D582, 0, { 0x000077 }}, /* 1D582; 0077; Additional folding */
- { 0x01D583, 0, { 0x000078 }}, /* 1D583; 0078; Additional folding */
- { 0x01D584, 0, { 0x000079 }}, /* 1D584; 0079; Additional folding */
- { 0x01D585, 0, { 0x00007A }}, /* 1D585; 007A; Additional folding */
- { 0x01D5A0, 0, { 0x000061 }}, /* 1D5A0; 0061; Additional folding */
- { 0x01D5A1, 0, { 0x000062 }}, /* 1D5A1; 0062; Additional folding */
- { 0x01D5A2, 0, { 0x000063 }}, /* 1D5A2; 0063; Additional folding */
- { 0x01D5A3, 0, { 0x000064 }}, /* 1D5A3; 0064; Additional folding */
- { 0x01D5A4, 0, { 0x000065 }}, /* 1D5A4; 0065; Additional folding */
- { 0x01D5A5, 0, { 0x000066 }}, /* 1D5A5; 0066; Additional folding */
- { 0x01D5A6, 0, { 0x000067 }}, /* 1D5A6; 0067; Additional folding */
- { 0x01D5A7, 0, { 0x000068 }}, /* 1D5A7; 0068; Additional folding */
- { 0x01D5A8, 0, { 0x000069 }}, /* 1D5A8; 0069; Additional folding */
- { 0x01D5A9, 0, { 0x00006A }}, /* 1D5A9; 006A; Additional folding */
- { 0x01D5AA, 0, { 0x00006B }}, /* 1D5AA; 006B; Additional folding */
- { 0x01D5AB, 0, { 0x00006C }}, /* 1D5AB; 006C; Additional folding */
- { 0x01D5AC, 0, { 0x00006D }}, /* 1D5AC; 006D; Additional folding */
- { 0x01D5AD, 0, { 0x00006E }}, /* 1D5AD; 006E; Additional folding */
- { 0x01D5AE, 0, { 0x00006F }}, /* 1D5AE; 006F; Additional folding */
- { 0x01D5AF, 0, { 0x000070 }}, /* 1D5AF; 0070; Additional folding */
- { 0x01D5B0, 0, { 0x000071 }}, /* 1D5B0; 0071; Additional folding */
- { 0x01D5B1, 0, { 0x000072 }}, /* 1D5B1; 0072; Additional folding */
- { 0x01D5B2, 0, { 0x000073 }}, /* 1D5B2; 0073; Additional folding */
- { 0x01D5B3, 0, { 0x000074 }}, /* 1D5B3; 0074; Additional folding */
- { 0x01D5B4, 0, { 0x000075 }}, /* 1D5B4; 0075; Additional folding */
- { 0x01D5B5, 0, { 0x000076 }}, /* 1D5B5; 0076; Additional folding */
- { 0x01D5B6, 0, { 0x000077 }}, /* 1D5B6; 0077; Additional folding */
- { 0x01D5B7, 0, { 0x000078 }}, /* 1D5B7; 0078; Additional folding */
- { 0x01D5B8, 0, { 0x000079 }}, /* 1D5B8; 0079; Additional folding */
- { 0x01D5B9, 0, { 0x00007A }}, /* 1D5B9; 007A; Additional folding */
- { 0x01D5D4, 0, { 0x000061 }}, /* 1D5D4; 0061; Additional folding */
- { 0x01D5D5, 0, { 0x000062 }}, /* 1D5D5; 0062; Additional folding */
- { 0x01D5D6, 0, { 0x000063 }}, /* 1D5D6; 0063; Additional folding */
- { 0x01D5D7, 0, { 0x000064 }}, /* 1D5D7; 0064; Additional folding */
- { 0x01D5D8, 0, { 0x000065 }}, /* 1D5D8; 0065; Additional folding */
- { 0x01D5D9, 0, { 0x000066 }}, /* 1D5D9; 0066; Additional folding */
- { 0x01D5DA, 0, { 0x000067 }}, /* 1D5DA; 0067; Additional folding */
- { 0x01D5DB, 0, { 0x000068 }}, /* 1D5DB; 0068; Additional folding */
- { 0x01D5DC, 0, { 0x000069 }}, /* 1D5DC; 0069; Additional folding */
- { 0x01D5DD, 0, { 0x00006A }}, /* 1D5DD; 006A; Additional folding */
- { 0x01D5DE, 0, { 0x00006B }}, /* 1D5DE; 006B; Additional folding */
- { 0x01D5DF, 0, { 0x00006C }}, /* 1D5DF; 006C; Additional folding */
- { 0x01D5E0, 0, { 0x00006D }}, /* 1D5E0; 006D; Additional folding */
- { 0x01D5E1, 0, { 0x00006E }}, /* 1D5E1; 006E; Additional folding */
- { 0x01D5E2, 0, { 0x00006F }}, /* 1D5E2; 006F; Additional folding */
- { 0x01D5E3, 0, { 0x000070 }}, /* 1D5E3; 0070; Additional folding */
- { 0x01D5E4, 0, { 0x000071 }}, /* 1D5E4; 0071; Additional folding */
- { 0x01D5E5, 0, { 0x000072 }}, /* 1D5E5; 0072; Additional folding */
- { 0x01D5E6, 0, { 0x000073 }}, /* 1D5E6; 0073; Additional folding */
- { 0x01D5E7, 0, { 0x000074 }}, /* 1D5E7; 0074; Additional folding */
- { 0x01D5E8, 0, { 0x000075 }}, /* 1D5E8; 0075; Additional folding */
- { 0x01D5E9, 0, { 0x000076 }}, /* 1D5E9; 0076; Additional folding */
- { 0x01D5EA, 0, { 0x000077 }}, /* 1D5EA; 0077; Additional folding */
- { 0x01D5EB, 0, { 0x000078 }}, /* 1D5EB; 0078; Additional folding */
- { 0x01D5EC, 0, { 0x000079 }}, /* 1D5EC; 0079; Additional folding */
- { 0x01D5ED, 0, { 0x00007A }}, /* 1D5ED; 007A; Additional folding */
- { 0x01D608, 0, { 0x000061 }}, /* 1D608; 0061; Additional folding */
- { 0x01D609, 0, { 0x000062 }}, /* 1D609; 0062; Additional folding */
- { 0x01D60A, 0, { 0x000063 }}, /* 1D60A; 0063; Additional folding */
- { 0x01D60B, 0, { 0x000064 }}, /* 1D60B; 0064; Additional folding */
- { 0x01D60C, 0, { 0x000065 }}, /* 1D60C; 0065; Additional folding */
- { 0x01D60D, 0, { 0x000066 }}, /* 1D60D; 0066; Additional folding */
- { 0x01D60E, 0, { 0x000067 }}, /* 1D60E; 0067; Additional folding */
- { 0x01D60F, 0, { 0x000068 }}, /* 1D60F; 0068; Additional folding */
- { 0x01D610, 0, { 0x000069 }}, /* 1D610; 0069; Additional folding */
- { 0x01D611, 0, { 0x00006A }}, /* 1D611; 006A; Additional folding */
- { 0x01D612, 0, { 0x00006B }}, /* 1D612; 006B; Additional folding */
- { 0x01D613, 0, { 0x00006C }}, /* 1D613; 006C; Additional folding */
- { 0x01D614, 0, { 0x00006D }}, /* 1D614; 006D; Additional folding */
- { 0x01D615, 0, { 0x00006E }}, /* 1D615; 006E; Additional folding */
- { 0x01D616, 0, { 0x00006F }}, /* 1D616; 006F; Additional folding */
- { 0x01D617, 0, { 0x000070 }}, /* 1D617; 0070; Additional folding */
- { 0x01D618, 0, { 0x000071 }}, /* 1D618; 0071; Additional folding */
- { 0x01D619, 0, { 0x000072 }}, /* 1D619; 0072; Additional folding */
- { 0x01D61A, 0, { 0x000073 }}, /* 1D61A; 0073; Additional folding */
- { 0x01D61B, 0, { 0x000074 }}, /* 1D61B; 0074; Additional folding */
- { 0x01D61C, 0, { 0x000075 }}, /* 1D61C; 0075; Additional folding */
- { 0x01D61D, 0, { 0x000076 }}, /* 1D61D; 0076; Additional folding */
- { 0x01D61E, 0, { 0x000077 }}, /* 1D61E; 0077; Additional folding */
- { 0x01D61F, 0, { 0x000078 }}, /* 1D61F; 0078; Additional folding */
- { 0x01D620, 0, { 0x000079 }}, /* 1D620; 0079; Additional folding */
- { 0x01D621, 0, { 0x00007A }}, /* 1D621; 007A; Additional folding */
- { 0x01D63C, 0, { 0x000061 }}, /* 1D63C; 0061; Additional folding */
- { 0x01D63D, 0, { 0x000062 }}, /* 1D63D; 0062; Additional folding */
- { 0x01D63E, 0, { 0x000063 }}, /* 1D63E; 0063; Additional folding */
- { 0x01D63F, 0, { 0x000064 }}, /* 1D63F; 0064; Additional folding */
- { 0x01D640, 0, { 0x000065 }}, /* 1D640; 0065; Additional folding */
- { 0x01D641, 0, { 0x000066 }}, /* 1D641; 0066; Additional folding */
- { 0x01D642, 0, { 0x000067 }}, /* 1D642; 0067; Additional folding */
- { 0x01D643, 0, { 0x000068 }}, /* 1D643; 0068; Additional folding */
- { 0x01D644, 0, { 0x000069 }}, /* 1D644; 0069; Additional folding */
- { 0x01D645, 0, { 0x00006A }}, /* 1D645; 006A; Additional folding */
- { 0x01D646, 0, { 0x00006B }}, /* 1D646; 006B; Additional folding */
- { 0x01D647, 0, { 0x00006C }}, /* 1D647; 006C; Additional folding */
- { 0x01D648, 0, { 0x00006D }}, /* 1D648; 006D; Additional folding */
- { 0x01D649, 0, { 0x00006E }}, /* 1D649; 006E; Additional folding */
- { 0x01D64A, 0, { 0x00006F }}, /* 1D64A; 006F; Additional folding */
- { 0x01D64B, 0, { 0x000070 }}, /* 1D64B; 0070; Additional folding */
- { 0x01D64C, 0, { 0x000071 }}, /* 1D64C; 0071; Additional folding */
- { 0x01D64D, 0, { 0x000072 }}, /* 1D64D; 0072; Additional folding */
- { 0x01D64E, 0, { 0x000073 }}, /* 1D64E; 0073; Additional folding */
- { 0x01D64F, 0, { 0x000074 }}, /* 1D64F; 0074; Additional folding */
- { 0x01D650, 0, { 0x000075 }}, /* 1D650; 0075; Additional folding */
- { 0x01D651, 0, { 0x000076 }}, /* 1D651; 0076; Additional folding */
- { 0x01D652, 0, { 0x000077 }}, /* 1D652; 0077; Additional folding */
- { 0x01D653, 0, { 0x000078 }}, /* 1D653; 0078; Additional folding */
- { 0x01D654, 0, { 0x000079 }}, /* 1D654; 0079; Additional folding */
- { 0x01D655, 0, { 0x00007A }}, /* 1D655; 007A; Additional folding */
- { 0x01D670, 0, { 0x000061 }}, /* 1D670; 0061; Additional folding */
- { 0x01D671, 0, { 0x000062 }}, /* 1D671; 0062; Additional folding */
- { 0x01D672, 0, { 0x000063 }}, /* 1D672; 0063; Additional folding */
- { 0x01D673, 0, { 0x000064 }}, /* 1D673; 0064; Additional folding */
- { 0x01D674, 0, { 0x000065 }}, /* 1D674; 0065; Additional folding */
- { 0x01D675, 0, { 0x000066 }}, /* 1D675; 0066; Additional folding */
- { 0x01D676, 0, { 0x000067 }}, /* 1D676; 0067; Additional folding */
- { 0x01D677, 0, { 0x000068 }}, /* 1D677; 0068; Additional folding */
- { 0x01D678, 0, { 0x000069 }}, /* 1D678; 0069; Additional folding */
- { 0x01D679, 0, { 0x00006A }}, /* 1D679; 006A; Additional folding */
- { 0x01D67A, 0, { 0x00006B }}, /* 1D67A; 006B; Additional folding */
- { 0x01D67B, 0, { 0x00006C }}, /* 1D67B; 006C; Additional folding */
- { 0x01D67C, 0, { 0x00006D }}, /* 1D67C; 006D; Additional folding */
- { 0x01D67D, 0, { 0x00006E }}, /* 1D67D; 006E; Additional folding */
- { 0x01D67E, 0, { 0x00006F }}, /* 1D67E; 006F; Additional folding */
- { 0x01D67F, 0, { 0x000070 }}, /* 1D67F; 0070; Additional folding */
- { 0x01D680, 0, { 0x000071 }}, /* 1D680; 0071; Additional folding */
- { 0x01D681, 0, { 0x000072 }}, /* 1D681; 0072; Additional folding */
- { 0x01D682, 0, { 0x000073 }}, /* 1D682; 0073; Additional folding */
- { 0x01D683, 0, { 0x000074 }}, /* 1D683; 0074; Additional folding */
- { 0x01D684, 0, { 0x000075 }}, /* 1D684; 0075; Additional folding */
- { 0x01D685, 0, { 0x000076 }}, /* 1D685; 0076; Additional folding */
- { 0x01D686, 0, { 0x000077 }}, /* 1D686; 0077; Additional folding */
- { 0x01D687, 0, { 0x000078 }}, /* 1D687; 0078; Additional folding */
- { 0x01D688, 0, { 0x000079 }}, /* 1D688; 0079; Additional folding */
- { 0x01D689, 0, { 0x00007A }}, /* 1D689; 007A; Additional folding */
- { 0x01D6A8, 0, { 0x0003B1 }}, /* 1D6A8; 03B1; Additional folding */
- { 0x01D6A9, 0, { 0x0003B2 }}, /* 1D6A9; 03B2; Additional folding */
- { 0x01D6AA, 0, { 0x0003B3 }}, /* 1D6AA; 03B3; Additional folding */
- { 0x01D6AB, 0, { 0x0003B4 }}, /* 1D6AB; 03B4; Additional folding */
- { 0x01D6AC, 0, { 0x0003B5 }}, /* 1D6AC; 03B5; Additional folding */
- { 0x01D6AD, 0, { 0x0003B6 }}, /* 1D6AD; 03B6; Additional folding */
- { 0x01D6AE, 0, { 0x0003B7 }}, /* 1D6AE; 03B7; Additional folding */
- { 0x01D6AF, 0, { 0x0003B8 }}, /* 1D6AF; 03B8; Additional folding */
- { 0x01D6B0, 0, { 0x0003B9 }}, /* 1D6B0; 03B9; Additional folding */
- { 0x01D6B1, 0, { 0x0003BA }}, /* 1D6B1; 03BA; Additional folding */
- { 0x01D6B2, 0, { 0x0003BB }}, /* 1D6B2; 03BB; Additional folding */
- { 0x01D6B3, 0, { 0x0003BC }}, /* 1D6B3; 03BC; Additional folding */
- { 0x01D6B4, 0, { 0x0003BD }}, /* 1D6B4; 03BD; Additional folding */
- { 0x01D6B5, 0, { 0x0003BE }}, /* 1D6B5; 03BE; Additional folding */
- { 0x01D6B6, 0, { 0x0003BF }}, /* 1D6B6; 03BF; Additional folding */
- { 0x01D6B7, 0, { 0x0003C0 }}, /* 1D6B7; 03C0; Additional folding */
- { 0x01D6B8, 0, { 0x0003C1 }}, /* 1D6B8; 03C1; Additional folding */
- { 0x01D6B9, 0, { 0x0003B8 }}, /* 1D6B9; 03B8; Additional folding */
- { 0x01D6BA, 0, { 0x0003C3 }}, /* 1D6BA; 03C3; Additional folding */
- { 0x01D6BB, 0, { 0x0003C4 }}, /* 1D6BB; 03C4; Additional folding */
- { 0x01D6BC, 0, { 0x0003C5 }}, /* 1D6BC; 03C5; Additional folding */
- { 0x01D6BD, 0, { 0x0003C6 }}, /* 1D6BD; 03C6; Additional folding */
- { 0x01D6BE, 0, { 0x0003C7 }}, /* 1D6BE; 03C7; Additional folding */
- { 0x01D6BF, 0, { 0x0003C8 }}, /* 1D6BF; 03C8; Additional folding */
- { 0x01D6C0, 0, { 0x0003C9 }}, /* 1D6C0; 03C9; Additional folding */
- { 0x01D6D3, 0, { 0x0003C3 }}, /* 1D6D3; 03C3; Additional folding */
- { 0x01D6E2, 0, { 0x0003B1 }}, /* 1D6E2; 03B1; Additional folding */
- { 0x01D6E3, 0, { 0x0003B2 }}, /* 1D6E3; 03B2; Additional folding */
- { 0x01D6E4, 0, { 0x0003B3 }}, /* 1D6E4; 03B3; Additional folding */
- { 0x01D6E5, 0, { 0x0003B4 }}, /* 1D6E5; 03B4; Additional folding */
- { 0x01D6E6, 0, { 0x0003B5 }}, /* 1D6E6; 03B5; Additional folding */
- { 0x01D6E7, 0, { 0x0003B6 }}, /* 1D6E7; 03B6; Additional folding */
- { 0x01D6E8, 0, { 0x0003B7 }}, /* 1D6E8; 03B7; Additional folding */
- { 0x01D6E9, 0, { 0x0003B8 }}, /* 1D6E9; 03B8; Additional folding */
- { 0x01D6EA, 0, { 0x0003B9 }}, /* 1D6EA; 03B9; Additional folding */
- { 0x01D6EB, 0, { 0x0003BA }}, /* 1D6EB; 03BA; Additional folding */
- { 0x01D6EC, 0, { 0x0003BB }}, /* 1D6EC; 03BB; Additional folding */
- { 0x01D6ED, 0, { 0x0003BC }}, /* 1D6ED; 03BC; Additional folding */
- { 0x01D6EE, 0, { 0x0003BD }}, /* 1D6EE; 03BD; Additional folding */
- { 0x01D6EF, 0, { 0x0003BE }}, /* 1D6EF; 03BE; Additional folding */
- { 0x01D6F0, 0, { 0x0003BF }}, /* 1D6F0; 03BF; Additional folding */
- { 0x01D6F1, 0, { 0x0003C0 }}, /* 1D6F1; 03C0; Additional folding */
- { 0x01D6F2, 0, { 0x0003C1 }}, /* 1D6F2; 03C1; Additional folding */
- { 0x01D6F3, 0, { 0x0003B8 }}, /* 1D6F3; 03B8; Additional folding */
- { 0x01D6F4, 0, { 0x0003C3 }}, /* 1D6F4; 03C3; Additional folding */
- { 0x01D6F5, 0, { 0x0003C4 }}, /* 1D6F5; 03C4; Additional folding */
- { 0x01D6F6, 0, { 0x0003C5 }}, /* 1D6F6; 03C5; Additional folding */
- { 0x01D6F7, 0, { 0x0003C6 }}, /* 1D6F7; 03C6; Additional folding */
- { 0x01D6F8, 0, { 0x0003C7 }}, /* 1D6F8; 03C7; Additional folding */
- { 0x01D6F9, 0, { 0x0003C8 }}, /* 1D6F9; 03C8; Additional folding */
- { 0x01D6FA, 0, { 0x0003C9 }}, /* 1D6FA; 03C9; Additional folding */
- { 0x01D70D, 0, { 0x0003C3 }}, /* 1D70D; 03C3; Additional folding */
- { 0x01D71C, 0, { 0x0003B1 }}, /* 1D71C; 03B1; Additional folding */
- { 0x01D71D, 0, { 0x0003B2 }}, /* 1D71D; 03B2; Additional folding */
- { 0x01D71E, 0, { 0x0003B3 }}, /* 1D71E; 03B3; Additional folding */
- { 0x01D71F, 0, { 0x0003B4 }}, /* 1D71F; 03B4; Additional folding */
- { 0x01D720, 0, { 0x0003B5 }}, /* 1D720; 03B5; Additional folding */
- { 0x01D721, 0, { 0x0003B6 }}, /* 1D721; 03B6; Additional folding */
- { 0x01D722, 0, { 0x0003B7 }}, /* 1D722; 03B7; Additional folding */
- { 0x01D723, 0, { 0x0003B8 }}, /* 1D723; 03B8; Additional folding */
- { 0x01D724, 0, { 0x0003B9 }}, /* 1D724; 03B9; Additional folding */
- { 0x01D725, 0, { 0x0003BA }}, /* 1D725; 03BA; Additional folding */
- { 0x01D726, 0, { 0x0003BB }}, /* 1D726; 03BB; Additional folding */
- { 0x01D727, 0, { 0x0003BC }}, /* 1D727; 03BC; Additional folding */
- { 0x01D728, 0, { 0x0003BD }}, /* 1D728; 03BD; Additional folding */
- { 0x01D729, 0, { 0x0003BE }}, /* 1D729; 03BE; Additional folding */
- { 0x01D72A, 0, { 0x0003BF }}, /* 1D72A; 03BF; Additional folding */
- { 0x01D72B, 0, { 0x0003C0 }}, /* 1D72B; 03C0; Additional folding */
- { 0x01D72C, 0, { 0x0003C1 }}, /* 1D72C; 03C1; Additional folding */
- { 0x01D72D, 0, { 0x0003B8 }}, /* 1D72D; 03B8; Additional folding */
- { 0x01D72E, 0, { 0x0003C3 }}, /* 1D72E; 03C3; Additional folding */
- { 0x01D72F, 0, { 0x0003C4 }}, /* 1D72F; 03C4; Additional folding */
- { 0x01D730, 0, { 0x0003C5 }}, /* 1D730; 03C5; Additional folding */
- { 0x01D731, 0, { 0x0003C6 }}, /* 1D731; 03C6; Additional folding */
- { 0x01D732, 0, { 0x0003C7 }}, /* 1D732; 03C7; Additional folding */
- { 0x01D733, 0, { 0x0003C8 }}, /* 1D733; 03C8; Additional folding */
- { 0x01D734, 0, { 0x0003C9 }}, /* 1D734; 03C9; Additional folding */
- { 0x01D747, 0, { 0x0003C3 }}, /* 1D747; 03C3; Additional folding */
- { 0x01D756, 0, { 0x0003B1 }}, /* 1D756; 03B1; Additional folding */
- { 0x01D757, 0, { 0x0003B2 }}, /* 1D757; 03B2; Additional folding */
- { 0x01D758, 0, { 0x0003B3 }}, /* 1D758; 03B3; Additional folding */
- { 0x01D759, 0, { 0x0003B4 }}, /* 1D759; 03B4; Additional folding */
- { 0x01D75A, 0, { 0x0003B5 }}, /* 1D75A; 03B5; Additional folding */
- { 0x01D75B, 0, { 0x0003B6 }}, /* 1D75B; 03B6; Additional folding */
- { 0x01D75C, 0, { 0x0003B7 }}, /* 1D75C; 03B7; Additional folding */
- { 0x01D75D, 0, { 0x0003B8 }}, /* 1D75D; 03B8; Additional folding */
- { 0x01D75E, 0, { 0x0003B9 }}, /* 1D75E; 03B9; Additional folding */
- { 0x01D75F, 0, { 0x0003BA }}, /* 1D75F; 03BA; Additional folding */
- { 0x01D760, 0, { 0x0003BB }}, /* 1D760; 03BB; Additional folding */
- { 0x01D761, 0, { 0x0003BC }}, /* 1D761; 03BC; Additional folding */
- { 0x01D762, 0, { 0x0003BD }}, /* 1D762; 03BD; Additional folding */
- { 0x01D763, 0, { 0x0003BE }}, /* 1D763; 03BE; Additional folding */
- { 0x01D764, 0, { 0x0003BF }}, /* 1D764; 03BF; Additional folding */
- { 0x01D765, 0, { 0x0003C0 }}, /* 1D765; 03C0; Additional folding */
- { 0x01D766, 0, { 0x0003C1 }}, /* 1D766; 03C1; Additional folding */
- { 0x01D767, 0, { 0x0003B8 }}, /* 1D767; 03B8; Additional folding */
- { 0x01D768, 0, { 0x0003C3 }}, /* 1D768; 03C3; Additional folding */
- { 0x01D769, 0, { 0x0003C4 }}, /* 1D769; 03C4; Additional folding */
- { 0x01D76A, 0, { 0x0003C5 }}, /* 1D76A; 03C5; Additional folding */
- { 0x01D76B, 0, { 0x0003C6 }}, /* 1D76B; 03C6; Additional folding */
- { 0x01D76C, 0, { 0x0003C7 }}, /* 1D76C; 03C7; Additional folding */
- { 0x01D76D, 0, { 0x0003C8 }}, /* 1D76D; 03C8; Additional folding */
- { 0x01D76E, 0, { 0x0003C9 }}, /* 1D76E; 03C9; Additional folding */
- { 0x01D781, 0, { 0x0003C3 }}, /* 1D781; 03C3; Additional folding */
- { 0x01D790, 0, { 0x0003B1 }}, /* 1D790; 03B1; Additional folding */
- { 0x01D791, 0, { 0x0003B2 }}, /* 1D791; 03B2; Additional folding */
- { 0x01D792, 0, { 0x0003B3 }}, /* 1D792; 03B3; Additional folding */
- { 0x01D793, 0, { 0x0003B4 }}, /* 1D793; 03B4; Additional folding */
- { 0x01D794, 0, { 0x0003B5 }}, /* 1D794; 03B5; Additional folding */
- { 0x01D795, 0, { 0x0003B6 }}, /* 1D795; 03B6; Additional folding */
- { 0x01D796, 0, { 0x0003B7 }}, /* 1D796; 03B7; Additional folding */
- { 0x01D797, 0, { 0x0003B8 }}, /* 1D797; 03B8; Additional folding */
- { 0x01D798, 0, { 0x0003B9 }}, /* 1D798; 03B9; Additional folding */
- { 0x01D799, 0, { 0x0003BA }}, /* 1D799; 03BA; Additional folding */
- { 0x01D79A, 0, { 0x0003BB }}, /* 1D79A; 03BB; Additional folding */
- { 0x01D79B, 0, { 0x0003BC }}, /* 1D79B; 03BC; Additional folding */
- { 0x01D79C, 0, { 0x0003BD }}, /* 1D79C; 03BD; Additional folding */
- { 0x01D79D, 0, { 0x0003BE }}, /* 1D79D; 03BE; Additional folding */
- { 0x01D79E, 0, { 0x0003BF }}, /* 1D79E; 03BF; Additional folding */
- { 0x01D79F, 0, { 0x0003C0 }}, /* 1D79F; 03C0; Additional folding */
- { 0x01D7A0, 0, { 0x0003C1 }}, /* 1D7A0; 03C1; Additional folding */
- { 0x01D7A1, 0, { 0x0003B8 }}, /* 1D7A1; 03B8; Additional folding */
- { 0x01D7A2, 0, { 0x0003C3 }}, /* 1D7A2; 03C3; Additional folding */
- { 0x01D7A3, 0, { 0x0003C4 }}, /* 1D7A3; 03C4; Additional folding */
- { 0x01D7A4, 0, { 0x0003C5 }}, /* 1D7A4; 03C5; Additional folding */
- { 0x01D7A5, 0, { 0x0003C6 }}, /* 1D7A5; 03C6; Additional folding */
- { 0x01D7A6, 0, { 0x0003C7 }}, /* 1D7A6; 03C7; Additional folding */
- { 0x01D7A7, 0, { 0x0003C8 }}, /* 1D7A7; 03C8; Additional folding */
- { 0x01D7A8, 0, { 0x0003C9 }}, /* 1D7A8; 03C9; Additional folding */
- { 0x01D7BB, 0, { 0x0003C3 }}, /* 1D7BB; 03C3; Additional folding */
- { 0 },
-};
-
-
-/*
- * FF3A; FF5A; Case map
- * 10400; 10428; Case map
-10401; 10429; Case map
-10402; 1042A; Case map
-10403; 1042B; Case map
-10404; 1042C; Case map
-10405; 1042D; Case map
-10406; 1042E; Case map
-10407; 1042F; Case map
-10408; 10430; Case map
-10409; 10431; Case map
-1040A; 10432; Case map
-1040B; 10433; Case map
-1040C; 10434; Case map
-1040D; 10435; Case map
-1040E; 10436; Case map
-1040F; 10437; Case map
-10410; 10438; Case map
-10411; 10439; Case map
-10412; 1043A; Case map
-10413; 1043B; Case map
-10414; 1043C; Case map
-10415; 1043D; Case map
-10416; 1043E; Case map
-10417; 1043F; Case map
-10418; 10440; Case map
-10419; 10441; Case map
-1041A; 10442; Case map
-1041B; 10443; Case map
-1041C; 10444; Case map
-1041D; 10445; Case map
-1041E; 10446; Case map
-1041F; 10447; Case map
-10420; 10448; Case map
-10421; 10449; Case map
-10422; 1044A; Case map
-10423; 1044B; Case map
-10424; 1044C; Case map
-10425; 1044D; Case map
-1D400; 0061; Additional folding
-1D401; 0062; Additional folding
-1D402; 0063; Additional folding
-1D403; 0064; Additional folding
-1D404; 0065; Additional folding
-1D405; 0066; Additional folding
-1D406; 0067; Additional folding
-1D407; 0068; Additional folding
-1D408; 0069; Additional folding
-1D409; 006A; Additional folding
-1D40A; 006B; Additional folding
-1D40B; 006C; Additional folding
-1D40C; 006D; Additional folding
-1D40D; 006E; Additional folding
-1D40E; 006F; Additional folding
-1D40F; 0070; Additional folding
-1D410; 0071; Additional folding
-1D411; 0072; Additional folding
-1D412; 0073; Additional folding
-1D413; 0074; Additional folding
-1D414; 0075; Additional folding
-1D415; 0076; Additional folding
-1D416; 0077; Additional folding
-1D417; 0078; Additional folding
-1D418; 0079; Additional folding
-1D419; 007A; Additional folding
-1D434; 0061; Additional folding
-1D435; 0062; Additional folding
-1D436; 0063; Additional folding
-1D437; 0064; Additional folding
-1D438; 0065; Additional folding
-1D439; 0066; Additional folding
-1D43A; 0067; Additional folding
-1D43B; 0068; Additional folding
-1D43C; 0069; Additional folding
-1D43D; 006A; Additional folding
-1D43E; 006B; Additional folding
-1D43F; 006C; Additional folding
-1D440; 006D; Additional folding
-1D441; 006E; Additional folding
-1D442; 006F; Additional folding
-1D443; 0070; Additional folding
-1D444; 0071; Additional folding
-1D445; 0072; Additional folding
-1D446; 0073; Additional folding
-1D447; 0074; Additional folding
-1D448; 0075; Additional folding
-1D449; 0076; Additional folding
-1D44A; 0077; Additional folding
-1D44B; 0078; Additional folding
-1D44C; 0079; Additional folding
-1D44D; 007A; Additional folding
-1D468; 0061; Additional folding
-1D469; 0062; Additional folding
-1D46A; 0063; Additional folding
-1D46B; 0064; Additional folding
-1D46C; 0065; Additional folding
-1D46D; 0066; Additional folding
-1D46E; 0067; Additional folding
-1D46F; 0068; Additional folding
-1D470; 0069; Additional folding
-1D471; 006A; Additional folding
-1D472; 006B; Additional folding
-1D473; 006C; Additional folding
-1D474; 006D; Additional folding
-1D475; 006E; Additional folding
-1D476; 006F; Additional folding
-1D477; 0070; Additional folding
-1D478; 0071; Additional folding
-1D479; 0072; Additional folding
-1D47A; 0073; Additional folding
-1D47B; 0074; Additional folding
-1D47C; 0075; Additional folding
-1D47D; 0076; Additional folding
-1D47E; 0077; Additional folding
-1D47F; 0078; Additional folding
-1D480; 0079; Additional folding
-1D481; 007A; Additional folding
-1D49C; 0061; Additional folding
-1D49E; 0063; Additional folding
-1D49F; 0064; Additional folding
-1D4A2; 0067; Additional folding
-1D4A5; 006A; Additional folding
-1D4A6; 006B; Additional folding
-1D4A9; 006E; Additional folding
-1D4AA; 006F; Additional folding
-1D4AB; 0070; Additional folding
-1D4AC; 0071; Additional folding
-1D4AE; 0073; Additional folding
-1D4AF; 0074; Additional folding
-1D4B0; 0075; Additional folding
-1D4B1; 0076; Additional folding
-1D4B2; 0077; Additional folding
-1D4B3; 0078; Additional folding
-1D4B4; 0079; Additional folding
-1D4B5; 007A; Additional folding
-1D4D0; 0061; Additional folding
-1D4D1; 0062; Additional folding
-1D4D2; 0063; Additional folding
-1D4D3; 0064; Additional folding
-1D4D4; 0065; Additional folding
-1D4D5; 0066; Additional folding
-1D4D6; 0067; Additional folding
-1D4D7; 0068; Additional folding
-1D4D8; 0069; Additional folding
-1D4D9; 006A; Additional folding
-1D4DA; 006B; Additional folding
-1D4DB; 006C; Additional folding
-1D4DC; 006D; Additional folding
-1D4DD; 006E; Additional folding
-1D4DE; 006F; Additional folding
-1D4DF; 0070; Additional folding
-1D4E0; 0071; Additional folding
-1D4E1; 0072; Additional folding
-1D4E2; 0073; Additional folding
-1D4E3; 0074; Additional folding
-1D4E4; 0075; Additional folding
-1D4E5; 0076; Additional folding
-1D4E6; 0077; Additional folding
-1D4E7; 0078; Additional folding
-1D4E8; 0079; Additional folding
-1D4E9; 007A; Additional folding
-1D504; 0061; Additional folding
-1D505; 0062; Additional folding
-1D507; 0064; Additional folding
-1D508; 0065; Additional folding
-1D509; 0066; Additional folding
-1D50A; 0067; Additional folding
-1D50D; 006A; Additional folding
-1D50E; 006B; Additional folding
-1D50F; 006C; Additional folding
-1D510; 006D; Additional folding
-1D511; 006E; Additional folding
-1D512; 006F; Additional folding
-1D513; 0070; Additional folding
-1D514; 0071; Additional folding
-1D516; 0073; Additional folding
-1D517; 0074; Additional folding
-1D518; 0075; Additional folding
-1D519; 0076; Additional folding
-1D51A; 0077; Additional folding
-1D51B; 0078; Additional folding
-1D51C; 0079; Additional folding
-1D538; 0061; Additional folding
-1D539; 0062; Additional folding
-1D53B; 0064; Additional folding
-1D53C; 0065; Additional folding
-1D53D; 0066; Additional folding
-1D53E; 0067; Additional folding
-1D540; 0069; Additional folding
-1D541; 006A; Additional folding
-1D542; 006B; Additional folding
-1D543; 006C; Additional folding
-1D544; 006D; Additional folding
-1D546; 006F; Additional folding
-1D54A; 0073; Additional folding
-1D54B; 0074; Additional folding
-1D54C; 0075; Additional folding
-1D54D; 0076; Additional folding
-1D54E; 0077; Additional folding
-1D54F; 0078; Additional folding
-1D550; 0079; Additional folding
-1D56C; 0061; Additional folding
-1D56D; 0062; Additional folding
-1D56E; 0063; Additional folding
-1D56F; 0064; Additional folding
-1D570; 0065; Additional folding
-1D571; 0066; Additional folding
-1D572; 0067; Additional folding
-1D573; 0068; Additional folding
-1D574; 0069; Additional folding
-1D575; 006A; Additional folding
-1D576; 006B; Additional folding
-1D577; 006C; Additional folding
-1D578; 006D; Additional folding
-1D579; 006E; Additional folding
-1D57A; 006F; Additional folding
-1D57B; 0070; Additional folding
-1D57C; 0071; Additional folding
-1D57D; 0072; Additional folding
-1D57E; 0073; Additional folding
-1D57F; 0074; Additional folding
-1D580; 0075; Additional folding
-1D581; 0076; Additional folding
-1D582; 0077; Additional folding
-1D583; 0078; Additional folding
-1D584; 0079; Additional folding
-1D585; 007A; Additional folding
-1D5A0; 0061; Additional folding
-1D5A1; 0062; Additional folding
-1D5A2; 0063; Additional folding
-1D5A3; 0064; Additional folding
-1D5A4; 0065; Additional folding
-1D5A5; 0066; Additional folding
-1D5A6; 0067; Additional folding
-1D5A7; 0068; Additional folding
-1D5A8; 0069; Additional folding
-1D5A9; 006A; Additional folding
-1D5AA; 006B; Additional folding
-1D5AB; 006C; Additional folding
-1D5AC; 006D; Additional folding
-1D5AD; 006E; Additional folding
-1D5AE; 006F; Additional folding
-1D5AF; 0070; Additional folding
-1D5B0; 0071; Additional folding
-1D5B1; 0072; Additional folding
-1D5B2; 0073; Additional folding
-1D5B3; 0074; Additional folding
-1D5B4; 0075; Additional folding
-1D5B5; 0076; Additional folding
-1D5B6; 0077; Additional folding
-1D5B7; 0078; Additional folding
-1D5B8; 0079; Additional folding
-1D5B9; 007A; Additional folding
-1D5D4; 0061; Additional folding
-1D5D5; 0062; Additional folding
-1D5D6; 0063; Additional folding
-1D5D7; 0064; Additional folding
-1D5D8; 0065; Additional folding
-1D5D9; 0066; Additional folding
-1D5DA; 0067; Additional folding
-1D5DB; 0068; Additional folding
-1D5DC; 0069; Additional folding
-1D5DD; 006A; Additional folding
-1D5DE; 006B; Additional folding
-1D5DF; 006C; Additional folding
-1D5E0; 006D; Additional folding
-1D5E1; 006E; Additional folding
-1D5E2; 006F; Additional folding
-1D5E3; 0070; Additional folding
-1D5E4; 0071; Additional folding
-1D5E5; 0072; Additional folding
-1D5E6; 0073; Additional folding
-1D5E7; 0074; Additional folding
-1D5E8; 0075; Additional folding
-1D5E9; 0076; Additional folding
-1D5EA; 0077; Additional folding
-1D5EB; 0078; Additional folding
-1D5EC; 0079; Additional folding
-1D5ED; 007A; Additional folding
-1D608; 0061; Additional folding
-1D609; 0062; Additional folding
-1D60A; 0063; Additional folding
-1D60B; 0064; Additional folding
-1D60C; 0065; Additional folding
-1D60D; 0066; Additional folding
-1D60E; 0067; Additional folding
-1D60F; 0068; Additional folding
-1D610; 0069; Additional folding
-1D611; 006A; Additional folding
-1D612; 006B; Additional folding
-1D613; 006C; Additional folding
-1D614; 006D; Additional folding
-1D615; 006E; Additional folding
-1D616; 006F; Additional folding
-1D617; 0070; Additional folding
-1D618; 0071; Additional folding
-1D619; 0072; Additional folding
-1D61A; 0073; Additional folding
-1D61B; 0074; Additional folding
-1D61C; 0075; Additional folding
-1D61D; 0076; Additional folding
-1D61E; 0077; Additional folding
-1D61F; 0078; Additional folding
-1D620; 0079; Additional folding
-1D621; 007A; Additional folding
-1D63C; 0061; Additional folding
-1D63D; 0062; Additional folding
-1D63E; 0063; Additional folding
-1D63F; 0064; Additional folding
-1D640; 0065; Additional folding
-1D641; 0066; Additional folding
-1D642; 0067; Additional folding
-1D643; 0068; Additional folding
-1D644; 0069; Additional folding
-1D645; 006A; Additional folding
-1D646; 006B; Additional folding
-1D647; 006C; Additional folding
-1D648; 006D; Additional folding
-1D649; 006E; Additional folding
-1D64A; 006F; Additional folding
-1D64B; 0070; Additional folding
-1D64C; 0071; Additional folding
-1D64D; 0072; Additional folding
-1D64E; 0073; Additional folding
-1D64F; 0074; Additional folding
-1D650; 0075; Additional folding
-1D651; 0076; Additional folding
-1D652; 0077; Additional folding
-1D653; 0078; Additional folding
-1D654; 0079; Additional folding
-1D655; 007A; Additional folding
-1D670; 0061; Additional folding
-1D671; 0062; Additional folding
-1D672; 0063; Additional folding
-1D673; 0064; Additional folding
-1D674; 0065; Additional folding
-1D675; 0066; Additional folding
-1D676; 0067; Additional folding
-1D677; 0068; Additional folding
-1D678; 0069; Additional folding
-1D679; 006A; Additional folding
-1D67A; 006B; Additional folding
-1D67B; 006C; Additional folding
-1D67C; 006D; Additional folding
-1D67D; 006E; Additional folding
-1D67E; 006F; Additional folding
-1D67F; 0070; Additional folding
-1D680; 0071; Additional folding
-1D681; 0072; Additional folding
-1D682; 0073; Additional folding
-1D683; 0074; Additional folding
-1D684; 0075; Additional folding
-1D685; 0076; Additional folding
-1D686; 0077; Additional folding
-1D687; 0078; Additional folding
-1D688; 0079; Additional folding
-1D689; 007A; Additional folding
-1D6A8; 03B1; Additional folding
-1D6A9; 03B2; Additional folding
-1D6AA; 03B3; Additional folding
-1D6AB; 03B4; Additional folding
-1D6AC; 03B5; Additional folding
-1D6AD; 03B6; Additional folding
-1D6AE; 03B7; Additional folding
-1D6AF; 03B8; Additional folding
-1D6B0; 03B9; Additional folding
-1D6B1; 03BA; Additional folding
-1D6B2; 03BB; Additional folding
-1D6B3; 03BC; Additional folding
-1D6B4; 03BD; Additional folding
-1D6B5; 03BE; Additional folding
-1D6B6; 03BF; Additional folding
-1D6B7; 03C0; Additional folding
-1D6B8; 03C1; Additional folding
-1D6B9; 03B8; Additional folding
-1D6BA; 03C3; Additional folding
-1D6BB; 03C4; Additional folding
-1D6BC; 03C5; Additional folding
-1D6BD; 03C6; Additional folding
-1D6BE; 03C7; Additional folding
-1D6BF; 03C8; Additional folding
-1D6C0; 03C9; Additional folding
-1D6D3; 03C3; Additional folding
-1D6E2; 03B1; Additional folding
-1D6E3; 03B2; Additional folding
-1D6E4; 03B3; Additional folding
-1D6E5; 03B4; Additional folding
-1D6E6; 03B5; Additional folding
-1D6E7; 03B6; Additional folding
-1D6E8; 03B7; Additional folding
-1D6E9; 03B8; Additional folding
-1D6EA; 03B9; Additional folding
-1D6EB; 03BA; Additional folding
-1D6EC; 03BB; Additional folding
-1D6ED; 03BC; Additional folding
-1D6EE; 03BD; Additional folding
-1D6EF; 03BE; Additional folding
-1D6F0; 03BF; Additional folding
-1D6F1; 03C0; Additional folding
-1D6F2; 03C1; Additional folding
-1D6F3; 03B8; Additional folding
-1D6F4; 03C3; Additional folding
-1D6F5; 03C4; Additional folding
-1D6F6; 03C5; Additional folding
-1D6F7; 03C6; Additional folding
-1D6F8; 03C7; Additional folding
-1D6F9; 03C8; Additional folding
-1D6FA; 03C9; Additional folding
-1D70D; 03C3; Additional folding
-1D71C; 03B1; Additional folding
-1D71D; 03B2; Additional folding
-1D71E; 03B3; Additional folding
-1D71F; 03B4; Additional folding
-1D720; 03B5; Additional folding
-1D721; 03B6; Additional folding
-1D722; 03B7; Additional folding
-1D723; 03B8; Additional folding
-1D724; 03B9; Additional folding
-1D725; 03BA; Additional folding
-1D726; 03BB; Additional folding
-1D727; 03BC; Additional folding
-1D728; 03BD; Additional folding
-1D729; 03BE; Additional folding
-1D72A; 03BF; Additional folding
-1D72B; 03C0; Additional folding
-1D72C; 03C1; Additional folding
-1D72D; 03B8; Additional folding
-1D72E; 03C3; Additional folding
-1D72F; 03C4; Additional folding
-1D730; 03C5; Additional folding
-1D731; 03C6; Additional folding
-1D732; 03C7; Additional folding
-1D733; 03C8; Additional folding
-1D734; 03C9; Additional folding
-1D747; 03C3; Additional folding
-1D756; 03B1; Additional folding
-1D757; 03B2; Additional folding
-1D758; 03B3; Additional folding
-1D759; 03B4; Additional folding
-1D75A; 03B5; Additional folding
-1D75B; 03B6; Additional folding
-1D75C; 03B7; Additional folding
-1D75D; 03B8; Additional folding
-1D75E; 03B9; Additional folding
-1D75F; 03BA; Additional folding
-1D760; 03BB; Additional folding
-1D761; 03BC; Additional folding
-1D762; 03BD; Additional folding
-1D763; 03BE; Additional folding
-1D764; 03BF; Additional folding
-1D765; 03C0; Additional folding
-1D766; 03C1; Additional folding
-1D767; 03B8; Additional folding
-1D768; 03C3; Additional folding
-1D769; 03C4; Additional folding
-1D76A; 03C5; Additional folding
-1D76B; 03C6; Additional folding
-1D76C; 03C7; Additional folding
-1D76D; 03C8; Additional folding
-1D76E; 03C9; Additional folding
-1D781; 03C3; Additional folding
-1D790; 03B1; Additional folding
-1D791; 03B2; Additional folding
-1D792; 03B3; Additional folding
-1D793; 03B4; Additional folding
-1D794; 03B5; Additional folding
-1D795; 03B6; Additional folding
-1D796; 03B7; Additional folding
-1D797; 03B8; Additional folding
-1D798; 03B9; Additional folding
-1D799; 03BA; Additional folding
-1D79A; 03BB; Additional folding
-1D79B; 03BC; Additional folding
-1D79C; 03BD; Additional folding
-1D79D; 03BE; Additional folding
-1D79E; 03BF; Additional folding
-1D79F; 03C0; Additional folding
-1D7A0; 03C1; Additional folding
-1D7A1; 03B8; Additional folding
-1D7A2; 03C3; Additional folding
-1D7A3; 03C4; Additional folding
-1D7A4; 03C5; Additional folding
-1D7A5; 03C6; Additional folding
-1D7A6; 03C7; Additional folding
-1D7A7; 03C8; Additional folding
-1D7A8; 03C9; Additional folding
-1D7BB; 03C3; Additional folding
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_B_3[] = {
- { 0x000041, 0, { 0x000061 }}, /* 0041; 0061; Case map */
- { 0x000042, 0, { 0x000062 }}, /* 0042; 0062; Case map */
- { 0x000043, 0, { 0x000063 }}, /* 0043; 0063; Case map */
- { 0x000044, 0, { 0x000064 }}, /* 0044; 0064; Case map */
- { 0x000045, 0, { 0x000065 }}, /* 0045; 0065; Case map */
- { 0x000046, 0, { 0x000066 }}, /* 0046; 0066; Case map */
- { 0x000047, 0, { 0x000067 }}, /* 0047; 0067; Case map */
- { 0x000048, 0, { 0x000068 }}, /* 0048; 0068; Case map */
- { 0x000049, 0, { 0x000069 }}, /* 0049; 0069; Case map */
- { 0x00004A, 0, { 0x00006A }}, /* 004A; 006A; Case map */
- { 0x00004B, 0, { 0x00006B }}, /* 004B; 006B; Case map */
- { 0x00004C, 0, { 0x00006C }}, /* 004C; 006C; Case map */
- { 0x00004D, 0, { 0x00006D }}, /* 004D; 006D; Case map */
- { 0x00004E, 0, { 0x00006E }}, /* 004E; 006E; Case map */
- { 0x00004F, 0, { 0x00006F }}, /* 004F; 006F; Case map */
- { 0x000050, 0, { 0x000070 }}, /* 0050; 0070; Case map */
- { 0x000051, 0, { 0x000071 }}, /* 0051; 0071; Case map */
- { 0x000052, 0, { 0x000072 }}, /* 0052; 0072; Case map */
- { 0x000053, 0, { 0x000073 }}, /* 0053; 0073; Case map */
- { 0x000054, 0, { 0x000074 }}, /* 0054; 0074; Case map */
- { 0x000055, 0, { 0x000075 }}, /* 0055; 0075; Case map */
- { 0x000056, 0, { 0x000076 }}, /* 0056; 0076; Case map */
- { 0x000057, 0, { 0x000077 }}, /* 0057; 0077; Case map */
- { 0x000058, 0, { 0x000078 }}, /* 0058; 0078; Case map */
- { 0x000059, 0, { 0x000079 }}, /* 0059; 0079; Case map */
- { 0x00005A, 0, { 0x00007A }}, /* 005A; 007A; Case map */
- { 0x0000B5, 0, { 0x0003BC }}, /* 00B5; 03BC; Case map */
- { 0x0000C0, 0, { 0x0000E0 }}, /* 00C0; 00E0; Case map */
- { 0x0000C1, 0, { 0x0000E1 }}, /* 00C1; 00E1; Case map */
- { 0x0000C2, 0, { 0x0000E2 }}, /* 00C2; 00E2; Case map */
- { 0x0000C3, 0, { 0x0000E3 }}, /* 00C3; 00E3; Case map */
- { 0x0000C4, 0, { 0x0000E4 }}, /* 00C4; 00E4; Case map */
- { 0x0000C5, 0, { 0x0000E5 }}, /* 00C5; 00E5; Case map */
- { 0x0000C6, 0, { 0x0000E6 }}, /* 00C6; 00E6; Case map */
- { 0x0000C7, 0, { 0x0000E7 }}, /* 00C7; 00E7; Case map */
- { 0x0000C8, 0, { 0x0000E8 }}, /* 00C8; 00E8; Case map */
- { 0x0000C9, 0, { 0x0000E9 }}, /* 00C9; 00E9; Case map */
- { 0x0000CA, 0, { 0x0000EA }}, /* 00CA; 00EA; Case map */
- { 0x0000CB, 0, { 0x0000EB }}, /* 00CB; 00EB; Case map */
- { 0x0000CC, 0, { 0x0000EC }}, /* 00CC; 00EC; Case map */
- { 0x0000CD, 0, { 0x0000ED }}, /* 00CD; 00ED; Case map */
- { 0x0000CE, 0, { 0x0000EE }}, /* 00CE; 00EE; Case map */
- { 0x0000CF, 0, { 0x0000EF }}, /* 00CF; 00EF; Case map */
- { 0x0000D0, 0, { 0x0000F0 }}, /* 00D0; 00F0; Case map */
- { 0x0000D1, 0, { 0x0000F1 }}, /* 00D1; 00F1; Case map */
- { 0x0000D2, 0, { 0x0000F2 }}, /* 00D2; 00F2; Case map */
- { 0x0000D3, 0, { 0x0000F3 }}, /* 00D3; 00F3; Case map */
- { 0x0000D4, 0, { 0x0000F4 }}, /* 00D4; 00F4; Case map */
- { 0x0000D5, 0, { 0x0000F5 }}, /* 00D5; 00F5; Case map */
- { 0x0000D6, 0, { 0x0000F6 }}, /* 00D6; 00F6; Case map */
- { 0x0000D8, 0, { 0x0000F8 }}, /* 00D8; 00F8; Case map */
- { 0x0000D9, 0, { 0x0000F9 }}, /* 00D9; 00F9; Case map */
- { 0x0000DA, 0, { 0x0000FA }}, /* 00DA; 00FA; Case map */
- { 0x0000DB, 0, { 0x0000FB }}, /* 00DB; 00FB; Case map */
- { 0x0000DC, 0, { 0x0000FC }}, /* 00DC; 00FC; Case map */
- { 0x0000DD, 0, { 0x0000FD }}, /* 00DD; 00FD; Case map */
- { 0x0000DE, 0, { 0x0000FE }}, /* 00DE; 00FE; Case map */
- { 0x0000DF, 0, { 0x000073, /* 00DF; 0073 0073; Case map */
- 0x000073 }},
- { 0x000100, 0, { 0x000101 }}, /* 0100; 0101; Case map */
- { 0x000102, 0, { 0x000103 }}, /* 0102; 0103; Case map */
- { 0x000104, 0, { 0x000105 }}, /* 0104; 0105; Case map */
- { 0x000106, 0, { 0x000107 }}, /* 0106; 0107; Case map */
- { 0x000108, 0, { 0x000109 }}, /* 0108; 0109; Case map */
- { 0x00010A, 0, { 0x00010B }}, /* 010A; 010B; Case map */
- { 0x00010C, 0, { 0x00010D }}, /* 010C; 010D; Case map */
- { 0x00010E, 0, { 0x00010F }}, /* 010E; 010F; Case map */
- { 0x000110, 0, { 0x000111 }}, /* 0110; 0111; Case map */
- { 0x000112, 0, { 0x000113 }}, /* 0112; 0113; Case map */
- { 0x000114, 0, { 0x000115 }}, /* 0114; 0115; Case map */
- { 0x000116, 0, { 0x000117 }}, /* 0116; 0117; Case map */
- { 0x000118, 0, { 0x000119 }}, /* 0118; 0119; Case map */
- { 0x00011A, 0, { 0x00011B }}, /* 011A; 011B; Case map */
- { 0x00011C, 0, { 0x00011D }}, /* 011C; 011D; Case map */
- { 0x00011E, 0, { 0x00011F }}, /* 011E; 011F; Case map */
- { 0x000120, 0, { 0x000121 }}, /* 0120; 0121; Case map */
- { 0x000122, 0, { 0x000123 }}, /* 0122; 0123; Case map */
- { 0x000124, 0, { 0x000125 }}, /* 0124; 0125; Case map */
- { 0x000126, 0, { 0x000127 }}, /* 0126; 0127; Case map */
- { 0x000128, 0, { 0x000129 }}, /* 0128; 0129; Case map */
- { 0x00012A, 0, { 0x00012B }}, /* 012A; 012B; Case map */
- { 0x00012C, 0, { 0x00012D }}, /* 012C; 012D; Case map */
- { 0x00012E, 0, { 0x00012F }}, /* 012E; 012F; Case map */
- { 0x000130, 0, { 0x000069, /* 0130; 0069 0307; Case map */
- 0x000307 }},
- { 0x000132, 0, { 0x000133 }}, /* 0132; 0133; Case map */
- { 0x000134, 0, { 0x000135 }}, /* 0134; 0135; Case map */
- { 0x000136, 0, { 0x000137 }}, /* 0136; 0137; Case map */
- { 0x000139, 0, { 0x00013A }}, /* 0139; 013A; Case map */
- { 0x00013B, 0, { 0x00013C }}, /* 013B; 013C; Case map */
- { 0x00013D, 0, { 0x00013E }}, /* 013D; 013E; Case map */
- { 0x00013F, 0, { 0x000140 }}, /* 013F; 0140; Case map */
- { 0x000141, 0, { 0x000142 }}, /* 0141; 0142; Case map */
- { 0x000143, 0, { 0x000144 }}, /* 0143; 0144; Case map */
- { 0x000145, 0, { 0x000146 }}, /* 0145; 0146; Case map */
- { 0x000147, 0, { 0x000148 }}, /* 0147; 0148; Case map */
- { 0x000149, 0, { 0x0002BC, /* 0149; 02BC 006E; Case map */
- 0x00006E }},
- { 0x00014A, 0, { 0x00014B }}, /* 014A; 014B; Case map */
- { 0x00014C, 0, { 0x00014D }}, /* 014C; 014D; Case map */
- { 0x00014E, 0, { 0x00014F }}, /* 014E; 014F; Case map */
- { 0x000150, 0, { 0x000151 }}, /* 0150; 0151; Case map */
- { 0x000152, 0, { 0x000153 }}, /* 0152; 0153; Case map */
- { 0x000154, 0, { 0x000155 }}, /* 0154; 0155; Case map */
- { 0x000156, 0, { 0x000157 }}, /* 0156; 0157; Case map */
- { 0x000158, 0, { 0x000159 }}, /* 0158; 0159; Case map */
- { 0x00015A, 0, { 0x00015B }}, /* 015A; 015B; Case map */
- { 0x00015C, 0, { 0x00015D }}, /* 015C; 015D; Case map */
- { 0x00015E, 0, { 0x00015F }}, /* 015E; 015F; Case map */
- { 0x000160, 0, { 0x000161 }}, /* 0160; 0161; Case map */
- { 0x000162, 0, { 0x000163 }}, /* 0162; 0163; Case map */
- { 0x000164, 0, { 0x000165 }}, /* 0164; 0165; Case map */
- { 0x000166, 0, { 0x000167 }}, /* 0166; 0167; Case map */
- { 0x000168, 0, { 0x000169 }}, /* 0168; 0169; Case map */
- { 0x00016A, 0, { 0x00016B }}, /* 016A; 016B; Case map */
- { 0x00016C, 0, { 0x00016D }}, /* 016C; 016D; Case map */
- { 0x00016E, 0, { 0x00016F }}, /* 016E; 016F; Case map */
- { 0x000170, 0, { 0x000171 }}, /* 0170; 0171; Case map */
- { 0x000172, 0, { 0x000173 }}, /* 0172; 0173; Case map */
- { 0x000174, 0, { 0x000175 }}, /* 0174; 0175; Case map */
- { 0x000176, 0, { 0x000177 }}, /* 0176; 0177; Case map */
- { 0x000178, 0, { 0x0000FF }}, /* 0178; 00FF; Case map */
- { 0x000179, 0, { 0x00017A }}, /* 0179; 017A; Case map */
- { 0x00017B, 0, { 0x00017C }}, /* 017B; 017C; Case map */
- { 0x00017D, 0, { 0x00017E }}, /* 017D; 017E; Case map */
- { 0x00017F, 0, { 0x000073 }}, /* 017F; 0073; Case map */
- { 0x000181, 0, { 0x000253 }}, /* 0181; 0253; Case map */
- { 0x000182, 0, { 0x000183 }}, /* 0182; 0183; Case map */
- { 0x000184, 0, { 0x000185 }}, /* 0184; 0185; Case map */
- { 0x000186, 0, { 0x000254 }}, /* 0186; 0254; Case map */
- { 0x000187, 0, { 0x000188 }}, /* 0187; 0188; Case map */
- { 0x000189, 0, { 0x000256 }}, /* 0189; 0256; Case map */
- { 0x00018A, 0, { 0x000257 }}, /* 018A; 0257; Case map */
- { 0x00018B, 0, { 0x00018C }}, /* 018B; 018C; Case map */
- { 0x00018E, 0, { 0x0001DD }}, /* 018E; 01DD; Case map */
- { 0x00018F, 0, { 0x000259 }}, /* 018F; 0259; Case map */
- { 0x000190, 0, { 0x00025B }}, /* 0190; 025B; Case map */
- { 0x000191, 0, { 0x000192 }}, /* 0191; 0192; Case map */
- { 0x000193, 0, { 0x000260 }}, /* 0193; 0260; Case map */
- { 0x000194, 0, { 0x000263 }}, /* 0194; 0263; Case map */
- { 0x000196, 0, { 0x000269 }}, /* 0196; 0269; Case map */
- { 0x000197, 0, { 0x000268 }}, /* 0197; 0268; Case map */
- { 0x000198, 0, { 0x000199 }}, /* 0198; 0199; Case map */
- { 0x00019C, 0, { 0x00026F }}, /* 019C; 026F; Case map */
- { 0x00019D, 0, { 0x000272 }}, /* 019D; 0272; Case map */
- { 0x00019F, 0, { 0x000275 }}, /* 019F; 0275; Case map */
- { 0x0001A0, 0, { 0x0001A1 }}, /* 01A0; 01A1; Case map */
- { 0x0001A2, 0, { 0x0001A3 }}, /* 01A2; 01A3; Case map */
- { 0x0001A4, 0, { 0x0001A5 }}, /* 01A4; 01A5; Case map */
- { 0x0001A6, 0, { 0x000280 }}, /* 01A6; 0280; Case map */
- { 0x0001A7, 0, { 0x0001A8 }}, /* 01A7; 01A8; Case map */
- { 0x0001A9, 0, { 0x000283 }}, /* 01A9; 0283; Case map */
- { 0x0001AC, 0, { 0x0001AD }}, /* 01AC; 01AD; Case map */
- { 0x0001AE, 0, { 0x000288 }}, /* 01AE; 0288; Case map */
- { 0x0001AF, 0, { 0x0001B0 }}, /* 01AF; 01B0; Case map */
- { 0x0001B1, 0, { 0x00028A }}, /* 01B1; 028A; Case map */
- { 0x0001B2, 0, { 0x00028B }}, /* 01B2; 028B; Case map */
- { 0x0001B3, 0, { 0x0001B4 }}, /* 01B3; 01B4; Case map */
- { 0x0001B5, 0, { 0x0001B6 }}, /* 01B5; 01B6; Case map */
- { 0x0001B7, 0, { 0x000292 }}, /* 01B7; 0292; Case map */
- { 0x0001B8, 0, { 0x0001B9 }}, /* 01B8; 01B9; Case map */
- { 0x0001BC, 0, { 0x0001BD }}, /* 01BC; 01BD; Case map */
- { 0x0001C4, 0, { 0x0001C6 }}, /* 01C4; 01C6; Case map */
- { 0x0001C5, 0, { 0x0001C6 }}, /* 01C5; 01C6; Case map */
- { 0x0001C7, 0, { 0x0001C9 }}, /* 01C7; 01C9; Case map */
- { 0x0001C8, 0, { 0x0001C9 }}, /* 01C8; 01C9; Case map */
- { 0x0001CA, 0, { 0x0001CC }}, /* 01CA; 01CC; Case map */
- { 0x0001CB, 0, { 0x0001CC }}, /* 01CB; 01CC; Case map */
- { 0x0001CD, 0, { 0x0001CE }}, /* 01CD; 01CE; Case map */
- { 0x0001CF, 0, { 0x0001D0 }}, /* 01CF; 01D0; Case map */
- { 0x0001D1, 0, { 0x0001D2 }}, /* 01D1; 01D2; Case map */
- { 0x0001D3, 0, { 0x0001D4 }}, /* 01D3; 01D4; Case map */
- { 0x0001D5, 0, { 0x0001D6 }}, /* 01D5; 01D6; Case map */
- { 0x0001D7, 0, { 0x0001D8 }}, /* 01D7; 01D8; Case map */
- { 0x0001D9, 0, { 0x0001DA }}, /* 01D9; 01DA; Case map */
- { 0x0001DB, 0, { 0x0001DC }}, /* 01DB; 01DC; Case map */
- { 0x0001DE, 0, { 0x0001DF }}, /* 01DE; 01DF; Case map */
- { 0x0001E0, 0, { 0x0001E1 }}, /* 01E0; 01E1; Case map */
- { 0x0001E2, 0, { 0x0001E3 }}, /* 01E2; 01E3; Case map */
- { 0x0001E4, 0, { 0x0001E5 }}, /* 01E4; 01E5; Case map */
- { 0x0001E6, 0, { 0x0001E7 }}, /* 01E6; 01E7; Case map */
- { 0x0001E8, 0, { 0x0001E9 }}, /* 01E8; 01E9; Case map */
- { 0x0001EA, 0, { 0x0001EB }}, /* 01EA; 01EB; Case map */
- { 0x0001EC, 0, { 0x0001ED }}, /* 01EC; 01ED; Case map */
- { 0x0001EE, 0, { 0x0001EF }}, /* 01EE; 01EF; Case map */
- { 0x0001F0, 0, { 0x00006A, /* 01F0; 006A 030C; Case map */
- 0x00030C }},
- { 0x0001F1, 0, { 0x0001F3 }}, /* 01F1; 01F3; Case map */
- { 0x0001F2, 0, { 0x0001F3 }}, /* 01F2; 01F3; Case map */
- { 0x0001F4, 0, { 0x0001F5 }}, /* 01F4; 01F5; Case map */
- { 0x0001F6, 0, { 0x000195 }}, /* 01F6; 0195; Case map */
- { 0x0001F7, 0, { 0x0001BF }}, /* 01F7; 01BF; Case map */
- { 0x0001F8, 0, { 0x0001F9 }}, /* 01F8; 01F9; Case map */
- { 0x0001FA, 0, { 0x0001FB }}, /* 01FA; 01FB; Case map */
- { 0x0001FC, 0, { 0x0001FD }}, /* 01FC; 01FD; Case map */
- { 0x0001FE, 0, { 0x0001FF }}, /* 01FE; 01FF; Case map */
- { 0x000200, 0, { 0x000201 }}, /* 0200; 0201; Case map */
- { 0x000202, 0, { 0x000203 }}, /* 0202; 0203; Case map */
- { 0x000204, 0, { 0x000205 }}, /* 0204; 0205; Case map */
- { 0x000206, 0, { 0x000207 }}, /* 0206; 0207; Case map */
- { 0x000208, 0, { 0x000209 }}, /* 0208; 0209; Case map */
- { 0x00020A, 0, { 0x00020B }}, /* 020A; 020B; Case map */
- { 0x00020C, 0, { 0x00020D }}, /* 020C; 020D; Case map */
- { 0x00020E, 0, { 0x00020F }}, /* 020E; 020F; Case map */
- { 0x000210, 0, { 0x000211 }}, /* 0210; 0211; Case map */
- { 0x000212, 0, { 0x000213 }}, /* 0212; 0213; Case map */
- { 0x000214, 0, { 0x000215 }}, /* 0214; 0215; Case map */
- { 0x000216, 0, { 0x000217 }}, /* 0216; 0217; Case map */
- { 0x000218, 0, { 0x000219 }}, /* 0218; 0219; Case map */
- { 0x00021A, 0, { 0x00021B }}, /* 021A; 021B; Case map */
- { 0x00021C, 0, { 0x00021D }}, /* 021C; 021D; Case map */
- { 0x00021E, 0, { 0x00021F }}, /* 021E; 021F; Case map */
- { 0x000220, 0, { 0x00019E }}, /* 0220; 019E; Case map */
- { 0x000222, 0, { 0x000223 }}, /* 0222; 0223; Case map */
- { 0x000224, 0, { 0x000225 }}, /* 0224; 0225; Case map */
- { 0x000226, 0, { 0x000227 }}, /* 0226; 0227; Case map */
- { 0x000228, 0, { 0x000229 }}, /* 0228; 0229; Case map */
- { 0x00022A, 0, { 0x00022B }}, /* 022A; 022B; Case map */
- { 0x00022C, 0, { 0x00022D }}, /* 022C; 022D; Case map */
- { 0x00022E, 0, { 0x00022F }}, /* 022E; 022F; Case map */
- { 0x000230, 0, { 0x000231 }}, /* 0230; 0231; Case map */
- { 0x000232, 0, { 0x000233 }}, /* 0232; 0233; Case map */
- { 0x000345, 0, { 0x0003B9 }}, /* 0345; 03B9; Case map */
- { 0x000386, 0, { 0x0003AC }}, /* 0386; 03AC; Case map */
- { 0x000388, 0, { 0x0003AD }}, /* 0388; 03AD; Case map */
- { 0x000389, 0, { 0x0003AE }}, /* 0389; 03AE; Case map */
- { 0x00038A, 0, { 0x0003AF }}, /* 038A; 03AF; Case map */
- { 0x00038C, 0, { 0x0003CC }}, /* 038C; 03CC; Case map */
- { 0x00038E, 0, { 0x0003CD }}, /* 038E; 03CD; Case map */
- { 0x00038F, 0, { 0x0003CE }}, /* 038F; 03CE; Case map */
- { 0x000390, 0, { 0x0003B9, /* 0390; 03B9 0308 0301; Case map */
- 0x000308, 0x000301 }},
- { 0x000391, 0, { 0x0003B1 }}, /* 0391; 03B1; Case map */
- { 0x000392, 0, { 0x0003B2 }}, /* 0392; 03B2; Case map */
- { 0x000393, 0, { 0x0003B3 }}, /* 0393; 03B3; Case map */
- { 0x000394, 0, { 0x0003B4 }}, /* 0394; 03B4; Case map */
- { 0x000395, 0, { 0x0003B5 }}, /* 0395; 03B5; Case map */
- { 0x000396, 0, { 0x0003B6 }}, /* 0396; 03B6; Case map */
- { 0x000397, 0, { 0x0003B7 }}, /* 0397; 03B7; Case map */
- { 0x000398, 0, { 0x0003B8 }}, /* 0398; 03B8; Case map */
- { 0x000399, 0, { 0x0003B9 }}, /* 0399; 03B9; Case map */
- { 0x00039A, 0, { 0x0003BA }}, /* 039A; 03BA; Case map */
- { 0x00039B, 0, { 0x0003BB }}, /* 039B; 03BB; Case map */
- { 0x00039C, 0, { 0x0003BC }}, /* 039C; 03BC; Case map */
- { 0x00039D, 0, { 0x0003BD }}, /* 039D; 03BD; Case map */
- { 0x00039E, 0, { 0x0003BE }}, /* 039E; 03BE; Case map */
- { 0x00039F, 0, { 0x0003BF }}, /* 039F; 03BF; Case map */
- { 0x0003A0, 0, { 0x0003C0 }}, /* 03A0; 03C0; Case map */
- { 0x0003A1, 0, { 0x0003C1 }}, /* 03A1; 03C1; Case map */
- { 0x0003A3, 0, { 0x0003C3 }}, /* 03A3; 03C3; Case map */
- { 0x0003A4, 0, { 0x0003C4 }}, /* 03A4; 03C4; Case map */
- { 0x0003A5, 0, { 0x0003C5 }}, /* 03A5; 03C5; Case map */
- { 0x0003A6, 0, { 0x0003C6 }}, /* 03A6; 03C6; Case map */
- { 0x0003A7, 0, { 0x0003C7 }}, /* 03A7; 03C7; Case map */
- { 0x0003A8, 0, { 0x0003C8 }}, /* 03A8; 03C8; Case map */
- { 0x0003A9, 0, { 0x0003C9 }}, /* 03A9; 03C9; Case map */
- { 0x0003AA, 0, { 0x0003CA }}, /* 03AA; 03CA; Case map */
- { 0x0003AB, 0, { 0x0003CB }}, /* 03AB; 03CB; Case map */
- { 0x0003B0, 0, { 0x0003C5, /* 03B0; 03C5 0308 0301; Case map */
- 0x000308, 0x000301 }},
- { 0x0003C2, 0, { 0x0003C3 }}, /* 03C2; 03C3; Case map */
- { 0x0003D0, 0, { 0x0003B2 }}, /* 03D0; 03B2; Case map */
- { 0x0003D1, 0, { 0x0003B8 }}, /* 03D1; 03B8; Case map */
- { 0x0003D5, 0, { 0x0003C6 }}, /* 03D5; 03C6; Case map */
- { 0x0003D6, 0, { 0x0003C0 }}, /* 03D6; 03C0; Case map */
- { 0x0003D8, 0, { 0x0003D9 }}, /* 03D8; 03D9; Case map */
- { 0x0003DA, 0, { 0x0003DB }}, /* 03DA; 03DB; Case map */
- { 0x0003DC, 0, { 0x0003DD }}, /* 03DC; 03DD; Case map */
- { 0x0003DE, 0, { 0x0003DF }}, /* 03DE; 03DF; Case map */
- { 0x0003E0, 0, { 0x0003E1 }}, /* 03E0; 03E1; Case map */
- { 0x0003E2, 0, { 0x0003E3 }}, /* 03E2; 03E3; Case map */
- { 0x0003E4, 0, { 0x0003E5 }}, /* 03E4; 03E5; Case map */
- { 0x0003E6, 0, { 0x0003E7 }}, /* 03E6; 03E7; Case map */
- { 0x0003E8, 0, { 0x0003E9 }}, /* 03E8; 03E9; Case map */
- { 0x0003EA, 0, { 0x0003EB }}, /* 03EA; 03EB; Case map */
- { 0x0003EC, 0, { 0x0003ED }}, /* 03EC; 03ED; Case map */
- { 0x0003EE, 0, { 0x0003EF }}, /* 03EE; 03EF; Case map */
- { 0x0003F0, 0, { 0x0003BA }}, /* 03F0; 03BA; Case map */
- { 0x0003F1, 0, { 0x0003C1 }}, /* 03F1; 03C1; Case map */
- { 0x0003F2, 0, { 0x0003C3 }}, /* 03F2; 03C3; Case map */
- { 0x0003F4, 0, { 0x0003B8 }}, /* 03F4; 03B8; Case map */
- { 0x0003F5, 0, { 0x0003B5 }}, /* 03F5; 03B5; Case map */
- { 0x000400, 0, { 0x000450 }}, /* 0400; 0450; Case map */
- { 0x000401, 0, { 0x000451 }}, /* 0401; 0451; Case map */
- { 0x000402, 0, { 0x000452 }}, /* 0402; 0452; Case map */
- { 0x000403, 0, { 0x000453 }}, /* 0403; 0453; Case map */
- { 0x000404, 0, { 0x000454 }}, /* 0404; 0454; Case map */
- { 0x000405, 0, { 0x000455 }}, /* 0405; 0455; Case map */
- { 0x000406, 0, { 0x000456 }}, /* 0406; 0456; Case map */
- { 0x000407, 0, { 0x000457 }}, /* 0407; 0457; Case map */
- { 0x000408, 0, { 0x000458 }}, /* 0408; 0458; Case map */
- { 0x000409, 0, { 0x000459 }}, /* 0409; 0459; Case map */
- { 0x00040A, 0, { 0x00045A }}, /* 040A; 045A; Case map */
- { 0x00040B, 0, { 0x00045B }}, /* 040B; 045B; Case map */
- { 0x00040C, 0, { 0x00045C }}, /* 040C; 045C; Case map */
- { 0x00040D, 0, { 0x00045D }}, /* 040D; 045D; Case map */
- { 0x00040E, 0, { 0x00045E }}, /* 040E; 045E; Case map */
- { 0x00040F, 0, { 0x00045F }}, /* 040F; 045F; Case map */
- { 0x000410, 0, { 0x000430 }}, /* 0410; 0430; Case map */
- { 0x000411, 0, { 0x000431 }}, /* 0411; 0431; Case map */
- { 0x000412, 0, { 0x000432 }}, /* 0412; 0432; Case map */
- { 0x000413, 0, { 0x000433 }}, /* 0413; 0433; Case map */
- { 0x000414, 0, { 0x000434 }}, /* 0414; 0434; Case map */
- { 0x000415, 0, { 0x000435 }}, /* 0415; 0435; Case map */
- { 0x000416, 0, { 0x000436 }}, /* 0416; 0436; Case map */
- { 0x000417, 0, { 0x000437 }}, /* 0417; 0437; Case map */
- { 0x000418, 0, { 0x000438 }}, /* 0418; 0438; Case map */
- { 0x000419, 0, { 0x000439 }}, /* 0419; 0439; Case map */
- { 0x00041A, 0, { 0x00043A }}, /* 041A; 043A; Case map */
- { 0x00041B, 0, { 0x00043B }}, /* 041B; 043B; Case map */
- { 0x00041C, 0, { 0x00043C }}, /* 041C; 043C; Case map */
- { 0x00041D, 0, { 0x00043D }}, /* 041D; 043D; Case map */
- { 0x00041E, 0, { 0x00043E }}, /* 041E; 043E; Case map */
- { 0x00041F, 0, { 0x00043F }}, /* 041F; 043F; Case map */
- { 0x000420, 0, { 0x000440 }}, /* 0420; 0440; Case map */
- { 0x000421, 0, { 0x000441 }}, /* 0421; 0441; Case map */
- { 0x000422, 0, { 0x000442 }}, /* 0422; 0442; Case map */
- { 0x000423, 0, { 0x000443 }}, /* 0423; 0443; Case map */
- { 0x000424, 0, { 0x000444 }}, /* 0424; 0444; Case map */
- { 0x000425, 0, { 0x000445 }}, /* 0425; 0445; Case map */
- { 0x000426, 0, { 0x000446 }}, /* 0426; 0446; Case map */
- { 0x000427, 0, { 0x000447 }}, /* 0427; 0447; Case map */
- { 0x000428, 0, { 0x000448 }}, /* 0428; 0448; Case map */
- { 0x000429, 0, { 0x000449 }}, /* 0429; 0449; Case map */
- { 0x00042A, 0, { 0x00044A }}, /* 042A; 044A; Case map */
- { 0x00042B, 0, { 0x00044B }}, /* 042B; 044B; Case map */
- { 0x00042C, 0, { 0x00044C }}, /* 042C; 044C; Case map */
- { 0x00042D, 0, { 0x00044D }}, /* 042D; 044D; Case map */
- { 0x00042E, 0, { 0x00044E }}, /* 042E; 044E; Case map */
- { 0x00042F, 0, { 0x00044F }}, /* 042F; 044F; Case map */
- { 0x000460, 0, { 0x000461 }}, /* 0460; 0461; Case map */
- { 0x000462, 0, { 0x000463 }}, /* 0462; 0463; Case map */
- { 0x000464, 0, { 0x000465 }}, /* 0464; 0465; Case map */
- { 0x000466, 0, { 0x000467 }}, /* 0466; 0467; Case map */
- { 0x000468, 0, { 0x000469 }}, /* 0468; 0469; Case map */
- { 0x00046A, 0, { 0x00046B }}, /* 046A; 046B; Case map */
- { 0x00046C, 0, { 0x00046D }}, /* 046C; 046D; Case map */
- { 0x00046E, 0, { 0x00046F }}, /* 046E; 046F; Case map */
- { 0x000470, 0, { 0x000471 }}, /* 0470; 0471; Case map */
- { 0x000472, 0, { 0x000473 }}, /* 0472; 0473; Case map */
- { 0x000474, 0, { 0x000475 }}, /* 0474; 0475; Case map */
- { 0x000476, 0, { 0x000477 }}, /* 0476; 0477; Case map */
- { 0x000478, 0, { 0x000479 }}, /* 0478; 0479; Case map */
- { 0x00047A, 0, { 0x00047B }}, /* 047A; 047B; Case map */
- { 0x00047C, 0, { 0x00047D }}, /* 047C; 047D; Case map */
- { 0x00047E, 0, { 0x00047F }}, /* 047E; 047F; Case map */
- { 0x000480, 0, { 0x000481 }}, /* 0480; 0481; Case map */
- { 0x00048A, 0, { 0x00048B }}, /* 048A; 048B; Case map */
- { 0x00048C, 0, { 0x00048D }}, /* 048C; 048D; Case map */
- { 0x00048E, 0, { 0x00048F }}, /* 048E; 048F; Case map */
- { 0x000490, 0, { 0x000491 }}, /* 0490; 0491; Case map */
- { 0x000492, 0, { 0x000493 }}, /* 0492; 0493; Case map */
- { 0x000494, 0, { 0x000495 }}, /* 0494; 0495; Case map */
- { 0x000496, 0, { 0x000497 }}, /* 0496; 0497; Case map */
- { 0x000498, 0, { 0x000499 }}, /* 0498; 0499; Case map */
- { 0x00049A, 0, { 0x00049B }}, /* 049A; 049B; Case map */
- { 0x00049C, 0, { 0x00049D }}, /* 049C; 049D; Case map */
- { 0x00049E, 0, { 0x00049F }}, /* 049E; 049F; Case map */
- { 0x0004A0, 0, { 0x0004A1 }}, /* 04A0; 04A1; Case map */
- { 0x0004A2, 0, { 0x0004A3 }}, /* 04A2; 04A3; Case map */
- { 0x0004A4, 0, { 0x0004A5 }}, /* 04A4; 04A5; Case map */
- { 0x0004A6, 0, { 0x0004A7 }}, /* 04A6; 04A7; Case map */
- { 0x0004A8, 0, { 0x0004A9 }}, /* 04A8; 04A9; Case map */
- { 0x0004AA, 0, { 0x0004AB }}, /* 04AA; 04AB; Case map */
- { 0x0004AC, 0, { 0x0004AD }}, /* 04AC; 04AD; Case map */
- { 0x0004AE, 0, { 0x0004AF }}, /* 04AE; 04AF; Case map */
- { 0x0004B0, 0, { 0x0004B1 }}, /* 04B0; 04B1; Case map */
- { 0x0004B2, 0, { 0x0004B3 }}, /* 04B2; 04B3; Case map */
- { 0x0004B4, 0, { 0x0004B5 }}, /* 04B4; 04B5; Case map */
- { 0x0004B6, 0, { 0x0004B7 }}, /* 04B6; 04B7; Case map */
- { 0x0004B8, 0, { 0x0004B9 }}, /* 04B8; 04B9; Case map */
- { 0x0004BA, 0, { 0x0004BB }}, /* 04BA; 04BB; Case map */
- { 0x0004BC, 0, { 0x0004BD }}, /* 04BC; 04BD; Case map */
- { 0x0004BE, 0, { 0x0004BF }}, /* 04BE; 04BF; Case map */
- { 0x0004C1, 0, { 0x0004C2 }}, /* 04C1; 04C2; Case map */
- { 0x0004C3, 0, { 0x0004C4 }}, /* 04C3; 04C4; Case map */
- { 0x0004C5, 0, { 0x0004C6 }}, /* 04C5; 04C6; Case map */
- { 0x0004C7, 0, { 0x0004C8 }}, /* 04C7; 04C8; Case map */
- { 0x0004C9, 0, { 0x0004CA }}, /* 04C9; 04CA; Case map */
- { 0x0004CB, 0, { 0x0004CC }}, /* 04CB; 04CC; Case map */
- { 0x0004CD, 0, { 0x0004CE }}, /* 04CD; 04CE; Case map */
- { 0x0004D0, 0, { 0x0004D1 }}, /* 04D0; 04D1; Case map */
- { 0x0004D2, 0, { 0x0004D3 }}, /* 04D2; 04D3; Case map */
- { 0x0004D4, 0, { 0x0004D5 }}, /* 04D4; 04D5; Case map */
- { 0x0004D6, 0, { 0x0004D7 }}, /* 04D6; 04D7; Case map */
- { 0x0004D8, 0, { 0x0004D9 }}, /* 04D8; 04D9; Case map */
- { 0x0004DA, 0, { 0x0004DB }}, /* 04DA; 04DB; Case map */
- { 0x0004DC, 0, { 0x0004DD }}, /* 04DC; 04DD; Case map */
- { 0x0004DE, 0, { 0x0004DF }}, /* 04DE; 04DF; Case map */
- { 0x0004E0, 0, { 0x0004E1 }}, /* 04E0; 04E1; Case map */
- { 0x0004E2, 0, { 0x0004E3 }}, /* 04E2; 04E3; Case map */
- { 0x0004E4, 0, { 0x0004E5 }}, /* 04E4; 04E5; Case map */
- { 0x0004E6, 0, { 0x0004E7 }}, /* 04E6; 04E7; Case map */
- { 0x0004E8, 0, { 0x0004E9 }}, /* 04E8; 04E9; Case map */
- { 0x0004EA, 0, { 0x0004EB }}, /* 04EA; 04EB; Case map */
- { 0x0004EC, 0, { 0x0004ED }}, /* 04EC; 04ED; Case map */
- { 0x0004EE, 0, { 0x0004EF }}, /* 04EE; 04EF; Case map */
- { 0x0004F0, 0, { 0x0004F1 }}, /* 04F0; 04F1; Case map */
- { 0x0004F2, 0, { 0x0004F3 }}, /* 04F2; 04F3; Case map */
- { 0x0004F4, 0, { 0x0004F5 }}, /* 04F4; 04F5; Case map */
- { 0x0004F8, 0, { 0x0004F9 }}, /* 04F8; 04F9; Case map */
- { 0x000500, 0, { 0x000501 }}, /* 0500; 0501; Case map */
- { 0x000502, 0, { 0x000503 }}, /* 0502; 0503; Case map */
- { 0x000504, 0, { 0x000505 }}, /* 0504; 0505; Case map */
- { 0x000506, 0, { 0x000507 }}, /* 0506; 0507; Case map */
- { 0x000508, 0, { 0x000509 }}, /* 0508; 0509; Case map */
- { 0x00050A, 0, { 0x00050B }}, /* 050A; 050B; Case map */
- { 0x00050C, 0, { 0x00050D }}, /* 050C; 050D; Case map */
- { 0x00050E, 0, { 0x00050F }}, /* 050E; 050F; Case map */
- { 0x000531, 0, { 0x000561 }}, /* 0531; 0561; Case map */
- { 0x000532, 0, { 0x000562 }}, /* 0532; 0562; Case map */
- { 0x000533, 0, { 0x000563 }}, /* 0533; 0563; Case map */
- { 0x000534, 0, { 0x000564 }}, /* 0534; 0564; Case map */
- { 0x000535, 0, { 0x000565 }}, /* 0535; 0565; Case map */
- { 0x000536, 0, { 0x000566 }}, /* 0536; 0566; Case map */
- { 0x000537, 0, { 0x000567 }}, /* 0537; 0567; Case map */
- { 0x000538, 0, { 0x000568 }}, /* 0538; 0568; Case map */
- { 0x000539, 0, { 0x000569 }}, /* 0539; 0569; Case map */
- { 0x00053A, 0, { 0x00056A }}, /* 053A; 056A; Case map */
- { 0x00053B, 0, { 0x00056B }}, /* 053B; 056B; Case map */
- { 0x00053C, 0, { 0x00056C }}, /* 053C; 056C; Case map */
- { 0x00053D, 0, { 0x00056D }}, /* 053D; 056D; Case map */
- { 0x00053E, 0, { 0x00056E }}, /* 053E; 056E; Case map */
- { 0x00053F, 0, { 0x00056F }}, /* 053F; 056F; Case map */
- { 0x000540, 0, { 0x000570 }}, /* 0540; 0570; Case map */
- { 0x000541, 0, { 0x000571 }}, /* 0541; 0571; Case map */
- { 0x000542, 0, { 0x000572 }}, /* 0542; 0572; Case map */
- { 0x000543, 0, { 0x000573 }}, /* 0543; 0573; Case map */
- { 0x000544, 0, { 0x000574 }}, /* 0544; 0574; Case map */
- { 0x000545, 0, { 0x000575 }}, /* 0545; 0575; Case map */
- { 0x000546, 0, { 0x000576 }}, /* 0546; 0576; Case map */
- { 0x000547, 0, { 0x000577 }}, /* 0547; 0577; Case map */
- { 0x000548, 0, { 0x000578 }}, /* 0548; 0578; Case map */
- { 0x000549, 0, { 0x000579 }}, /* 0549; 0579; Case map */
- { 0x00054A, 0, { 0x00057A }}, /* 054A; 057A; Case map */
- { 0x00054B, 0, { 0x00057B }}, /* 054B; 057B; Case map */
- { 0x00054C, 0, { 0x00057C }}, /* 054C; 057C; Case map */
- { 0x00054D, 0, { 0x00057D }}, /* 054D; 057D; Case map */
- { 0x00054E, 0, { 0x00057E }}, /* 054E; 057E; Case map */
- { 0x00054F, 0, { 0x00057F }}, /* 054F; 057F; Case map */
- { 0x000550, 0, { 0x000580 }}, /* 0550; 0580; Case map */
- { 0x000551, 0, { 0x000581 }}, /* 0551; 0581; Case map */
- { 0x000552, 0, { 0x000582 }}, /* 0552; 0582; Case map */
- { 0x000553, 0, { 0x000583 }}, /* 0553; 0583; Case map */
- { 0x000554, 0, { 0x000584 }}, /* 0554; 0584; Case map */
- { 0x000555, 0, { 0x000585 }}, /* 0555; 0585; Case map */
- { 0x000556, 0, { 0x000586 }}, /* 0556; 0586; Case map */
- { 0x000587, 0, { 0x000565, /* 0587; 0565 0582; Case map */
- 0x000582 }},
- { 0x001E00, 0, { 0x001E01 }}, /* 1E00; 1E01; Case map */
- { 0x001E02, 0, { 0x001E03 }}, /* 1E02; 1E03; Case map */
- { 0x001E04, 0, { 0x001E05 }}, /* 1E04; 1E05; Case map */
- { 0x001E06, 0, { 0x001E07 }}, /* 1E06; 1E07; Case map */
- { 0x001E08, 0, { 0x001E09 }}, /* 1E08; 1E09; Case map */
- { 0x001E0A, 0, { 0x001E0B }}, /* 1E0A; 1E0B; Case map */
- { 0x001E0C, 0, { 0x001E0D }}, /* 1E0C; 1E0D; Case map */
- { 0x001E0E, 0, { 0x001E0F }}, /* 1E0E; 1E0F; Case map */
- { 0x001E10, 0, { 0x001E11 }}, /* 1E10; 1E11; Case map */
- { 0x001E12, 0, { 0x001E13 }}, /* 1E12; 1E13; Case map */
- { 0x001E14, 0, { 0x001E15 }}, /* 1E14; 1E15; Case map */
- { 0x001E16, 0, { 0x001E17 }}, /* 1E16; 1E17; Case map */
- { 0x001E18, 0, { 0x001E19 }}, /* 1E18; 1E19; Case map */
- { 0x001E1A, 0, { 0x001E1B }}, /* 1E1A; 1E1B; Case map */
- { 0x001E1C, 0, { 0x001E1D }}, /* 1E1C; 1E1D; Case map */
- { 0x001E1E, 0, { 0x001E1F }}, /* 1E1E; 1E1F; Case map */
- { 0x001E20, 0, { 0x001E21 }}, /* 1E20; 1E21; Case map */
- { 0x001E22, 0, { 0x001E23 }}, /* 1E22; 1E23; Case map */
- { 0x001E24, 0, { 0x001E25 }}, /* 1E24; 1E25; Case map */
- { 0x001E26, 0, { 0x001E27 }}, /* 1E26; 1E27; Case map */
- { 0x001E28, 0, { 0x001E29 }}, /* 1E28; 1E29; Case map */
- { 0x001E2A, 0, { 0x001E2B }}, /* 1E2A; 1E2B; Case map */
- { 0x001E2C, 0, { 0x001E2D }}, /* 1E2C; 1E2D; Case map */
- { 0x001E2E, 0, { 0x001E2F }}, /* 1E2E; 1E2F; Case map */
- { 0x001E30, 0, { 0x001E31 }}, /* 1E30; 1E31; Case map */
- { 0x001E32, 0, { 0x001E33 }}, /* 1E32; 1E33; Case map */
- { 0x001E34, 0, { 0x001E35 }}, /* 1E34; 1E35; Case map */
- { 0x001E36, 0, { 0x001E37 }}, /* 1E36; 1E37; Case map */
- { 0x001E38, 0, { 0x001E39 }}, /* 1E38; 1E39; Case map */
- { 0x001E3A, 0, { 0x001E3B }}, /* 1E3A; 1E3B; Case map */
- { 0x001E3C, 0, { 0x001E3D }}, /* 1E3C; 1E3D; Case map */
- { 0x001E3E, 0, { 0x001E3F }}, /* 1E3E; 1E3F; Case map */
- { 0x001E40, 0, { 0x001E41 }}, /* 1E40; 1E41; Case map */
- { 0x001E42, 0, { 0x001E43 }}, /* 1E42; 1E43; Case map */
- { 0x001E44, 0, { 0x001E45 }}, /* 1E44; 1E45; Case map */
- { 0x001E46, 0, { 0x001E47 }}, /* 1E46; 1E47; Case map */
- { 0x001E48, 0, { 0x001E49 }}, /* 1E48; 1E49; Case map */
- { 0x001E4A, 0, { 0x001E4B }}, /* 1E4A; 1E4B; Case map */
- { 0x001E4C, 0, { 0x001E4D }}, /* 1E4C; 1E4D; Case map */
- { 0x001E4E, 0, { 0x001E4F }}, /* 1E4E; 1E4F; Case map */
- { 0x001E50, 0, { 0x001E51 }}, /* 1E50; 1E51; Case map */
- { 0x001E52, 0, { 0x001E53 }}, /* 1E52; 1E53; Case map */
- { 0x001E54, 0, { 0x001E55 }}, /* 1E54; 1E55; Case map */
- { 0x001E56, 0, { 0x001E57 }}, /* 1E56; 1E57; Case map */
- { 0x001E58, 0, { 0x001E59 }}, /* 1E58; 1E59; Case map */
- { 0x001E5A, 0, { 0x001E5B }}, /* 1E5A; 1E5B; Case map */
- { 0x001E5C, 0, { 0x001E5D }}, /* 1E5C; 1E5D; Case map */
- { 0x001E5E, 0, { 0x001E5F }}, /* 1E5E; 1E5F; Case map */
- { 0x001E60, 0, { 0x001E61 }}, /* 1E60; 1E61; Case map */
- { 0x001E62, 0, { 0x001E63 }}, /* 1E62; 1E63; Case map */
- { 0x001E64, 0, { 0x001E65 }}, /* 1E64; 1E65; Case map */
- { 0x001E66, 0, { 0x001E67 }}, /* 1E66; 1E67; Case map */
- { 0x001E68, 0, { 0x001E69 }}, /* 1E68; 1E69; Case map */
- { 0x001E6A, 0, { 0x001E6B }}, /* 1E6A; 1E6B; Case map */
- { 0x001E6C, 0, { 0x001E6D }}, /* 1E6C; 1E6D; Case map */
- { 0x001E6E, 0, { 0x001E6F }}, /* 1E6E; 1E6F; Case map */
- { 0x001E70, 0, { 0x001E71 }}, /* 1E70; 1E71; Case map */
- { 0x001E72, 0, { 0x001E73 }}, /* 1E72; 1E73; Case map */
- { 0x001E74, 0, { 0x001E75 }}, /* 1E74; 1E75; Case map */
- { 0x001E76, 0, { 0x001E77 }}, /* 1E76; 1E77; Case map */
- { 0x001E78, 0, { 0x001E79 }}, /* 1E78; 1E79; Case map */
- { 0x001E7A, 0, { 0x001E7B }}, /* 1E7A; 1E7B; Case map */
- { 0x001E7C, 0, { 0x001E7D }}, /* 1E7C; 1E7D; Case map */
- { 0x001E7E, 0, { 0x001E7F }}, /* 1E7E; 1E7F; Case map */
- { 0x001E80, 0, { 0x001E81 }}, /* 1E80; 1E81; Case map */
- { 0x001E82, 0, { 0x001E83 }}, /* 1E82; 1E83; Case map */
- { 0x001E84, 0, { 0x001E85 }}, /* 1E84; 1E85; Case map */
- { 0x001E86, 0, { 0x001E87 }}, /* 1E86; 1E87; Case map */
- { 0x001E88, 0, { 0x001E89 }}, /* 1E88; 1E89; Case map */
- { 0x001E8A, 0, { 0x001E8B }}, /* 1E8A; 1E8B; Case map */
- { 0x001E8C, 0, { 0x001E8D }}, /* 1E8C; 1E8D; Case map */
- { 0x001E8E, 0, { 0x001E8F }}, /* 1E8E; 1E8F; Case map */
- { 0x001E90, 0, { 0x001E91 }}, /* 1E90; 1E91; Case map */
- { 0x001E92, 0, { 0x001E93 }}, /* 1E92; 1E93; Case map */
- { 0x001E94, 0, { 0x001E95 }}, /* 1E94; 1E95; Case map */
- { 0x001E96, 0, { 0x000068, /* 1E96; 0068 0331; Case map */
- 0x000331 }},
- { 0x001E97, 0, { 0x000074, /* 1E97; 0074 0308; Case map */
- 0x000308 }},
- { 0x001E98, 0, { 0x000077, /* 1E98; 0077 030A; Case map */
- 0x00030A }},
- { 0x001E99, 0, { 0x000079, /* 1E99; 0079 030A; Case map */
- 0x00030A }},
- { 0x001E9A, 0, { 0x000061, /* 1E9A; 0061 02BE; Case map */
- 0x0002BE }},
- { 0x001E9B, 0, { 0x001E61 }}, /* 1E9B; 1E61; Case map */
- { 0x001EA0, 0, { 0x001EA1 }}, /* 1EA0; 1EA1; Case map */
- { 0x001EA2, 0, { 0x001EA3 }}, /* 1EA2; 1EA3; Case map */
- { 0x001EA4, 0, { 0x001EA5 }}, /* 1EA4; 1EA5; Case map */
- { 0x001EA6, 0, { 0x001EA7 }}, /* 1EA6; 1EA7; Case map */
- { 0x001EA8, 0, { 0x001EA9 }}, /* 1EA8; 1EA9; Case map */
- { 0x001EAA, 0, { 0x001EAB }}, /* 1EAA; 1EAB; Case map */
- { 0x001EAC, 0, { 0x001EAD }}, /* 1EAC; 1EAD; Case map */
- { 0x001EAE, 0, { 0x001EAF }}, /* 1EAE; 1EAF; Case map */
- { 0x001EB0, 0, { 0x001EB1 }}, /* 1EB0; 1EB1; Case map */
- { 0x001EB2, 0, { 0x001EB3 }}, /* 1EB2; 1EB3; Case map */
- { 0x001EB4, 0, { 0x001EB5 }}, /* 1EB4; 1EB5; Case map */
- { 0x001EB6, 0, { 0x001EB7 }}, /* 1EB6; 1EB7; Case map */
- { 0x001EB8, 0, { 0x001EB9 }}, /* 1EB8; 1EB9; Case map */
- { 0x001EBA, 0, { 0x001EBB }}, /* 1EBA; 1EBB; Case map */
- { 0x001EBC, 0, { 0x001EBD }}, /* 1EBC; 1EBD; Case map */
- { 0x001EBE, 0, { 0x001EBF }}, /* 1EBE; 1EBF; Case map */
- { 0x001EC0, 0, { 0x001EC1 }}, /* 1EC0; 1EC1; Case map */
- { 0x001EC2, 0, { 0x001EC3 }}, /* 1EC2; 1EC3; Case map */
- { 0x001EC4, 0, { 0x001EC5 }}, /* 1EC4; 1EC5; Case map */
- { 0x001EC6, 0, { 0x001EC7 }}, /* 1EC6; 1EC7; Case map */
- { 0x001EC8, 0, { 0x001EC9 }}, /* 1EC8; 1EC9; Case map */
- { 0x001ECA, 0, { 0x001ECB }}, /* 1ECA; 1ECB; Case map */
- { 0x001ECC, 0, { 0x001ECD }}, /* 1ECC; 1ECD; Case map */
- { 0x001ECE, 0, { 0x001ECF }}, /* 1ECE; 1ECF; Case map */
- { 0x001ED0, 0, { 0x001ED1 }}, /* 1ED0; 1ED1; Case map */
- { 0x001ED2, 0, { 0x001ED3 }}, /* 1ED2; 1ED3; Case map */
- { 0x001ED4, 0, { 0x001ED5 }}, /* 1ED4; 1ED5; Case map */
- { 0x001ED6, 0, { 0x001ED7 }}, /* 1ED6; 1ED7; Case map */
- { 0x001ED8, 0, { 0x001ED9 }}, /* 1ED8; 1ED9; Case map */
- { 0x001EDA, 0, { 0x001EDB }}, /* 1EDA; 1EDB; Case map */
- { 0x001EDC, 0, { 0x001EDD }}, /* 1EDC; 1EDD; Case map */
- { 0x001EDE, 0, { 0x001EDF }}, /* 1EDE; 1EDF; Case map */
- { 0x001EE0, 0, { 0x001EE1 }}, /* 1EE0; 1EE1; Case map */
- { 0x001EE2, 0, { 0x001EE3 }}, /* 1EE2; 1EE3; Case map */
- { 0x001EE4, 0, { 0x001EE5 }}, /* 1EE4; 1EE5; Case map */
- { 0x001EE6, 0, { 0x001EE7 }}, /* 1EE6; 1EE7; Case map */
- { 0x001EE8, 0, { 0x001EE9 }}, /* 1EE8; 1EE9; Case map */
- { 0x001EEA, 0, { 0x001EEB }}, /* 1EEA; 1EEB; Case map */
- { 0x001EEC, 0, { 0x001EED }}, /* 1EEC; 1EED; Case map */
- { 0x001EEE, 0, { 0x001EEF }}, /* 1EEE; 1EEF; Case map */
- { 0x001EF0, 0, { 0x001EF1 }}, /* 1EF0; 1EF1; Case map */
- { 0x001EF2, 0, { 0x001EF3 }}, /* 1EF2; 1EF3; Case map */
- { 0x001EF4, 0, { 0x001EF5 }}, /* 1EF4; 1EF5; Case map */
- { 0x001EF6, 0, { 0x001EF7 }}, /* 1EF6; 1EF7; Case map */
- { 0x001EF8, 0, { 0x001EF9 }}, /* 1EF8; 1EF9; Case map */
- { 0x001F08, 0, { 0x001F00 }}, /* 1F08; 1F00; Case map */
- { 0x001F09, 0, { 0x001F01 }}, /* 1F09; 1F01; Case map */
- { 0x001F0A, 0, { 0x001F02 }}, /* 1F0A; 1F02; Case map */
- { 0x001F0B, 0, { 0x001F03 }}, /* 1F0B; 1F03; Case map */
- { 0x001F0C, 0, { 0x001F04 }}, /* 1F0C; 1F04; Case map */
- { 0x001F0D, 0, { 0x001F05 }}, /* 1F0D; 1F05; Case map */
- { 0x001F0E, 0, { 0x001F06 }}, /* 1F0E; 1F06; Case map */
- { 0x001F0F, 0, { 0x001F07 }}, /* 1F0F; 1F07; Case map */
- { 0x001F18, 0, { 0x001F10 }}, /* 1F18; 1F10; Case map */
- { 0x001F19, 0, { 0x001F11 }}, /* 1F19; 1F11; Case map */
- { 0x001F1A, 0, { 0x001F12 }}, /* 1F1A; 1F12; Case map */
- { 0x001F1B, 0, { 0x001F13 }}, /* 1F1B; 1F13; Case map */
- { 0x001F1C, 0, { 0x001F14 }}, /* 1F1C; 1F14; Case map */
- { 0x001F1D, 0, { 0x001F15 }}, /* 1F1D; 1F15; Case map */
- { 0x001F28, 0, { 0x001F20 }}, /* 1F28; 1F20; Case map */
- { 0x001F29, 0, { 0x001F21 }}, /* 1F29; 1F21; Case map */
- { 0x001F2A, 0, { 0x001F22 }}, /* 1F2A; 1F22; Case map */
- { 0x001F2B, 0, { 0x001F23 }}, /* 1F2B; 1F23; Case map */
- { 0x001F2C, 0, { 0x001F24 }}, /* 1F2C; 1F24; Case map */
- { 0x001F2D, 0, { 0x001F25 }}, /* 1F2D; 1F25; Case map */
- { 0x001F2E, 0, { 0x001F26 }}, /* 1F2E; 1F26; Case map */
- { 0x001F2F, 0, { 0x001F27 }}, /* 1F2F; 1F27; Case map */
- { 0x001F38, 0, { 0x001F30 }}, /* 1F38; 1F30; Case map */
- { 0x001F39, 0, { 0x001F31 }}, /* 1F39; 1F31; Case map */
- { 0x001F3A, 0, { 0x001F32 }}, /* 1F3A; 1F32; Case map */
- { 0x001F3B, 0, { 0x001F33 }}, /* 1F3B; 1F33; Case map */
- { 0x001F3C, 0, { 0x001F34 }}, /* 1F3C; 1F34; Case map */
- { 0x001F3D, 0, { 0x001F35 }}, /* 1F3D; 1F35; Case map */
- { 0x001F3E, 0, { 0x001F36 }}, /* 1F3E; 1F36; Case map */
- { 0x001F3F, 0, { 0x001F37 }}, /* 1F3F; 1F37; Case map */
- { 0x001F48, 0, { 0x001F40 }}, /* 1F48; 1F40; Case map */
- { 0x001F49, 0, { 0x001F41 }}, /* 1F49; 1F41; Case map */
- { 0x001F4A, 0, { 0x001F42 }}, /* 1F4A; 1F42; Case map */
- { 0x001F4B, 0, { 0x001F43 }}, /* 1F4B; 1F43; Case map */
- { 0x001F4C, 0, { 0x001F44 }}, /* 1F4C; 1F44; Case map */
- { 0x001F4D, 0, { 0x001F45 }}, /* 1F4D; 1F45; Case map */
- { 0x001F50, 0, { 0x0003C5, /* 1F50; 03C5 0313; Case map */
- 0x000313 }},
- { 0x001F52, 0, { 0x0003C5, /* 1F52; 03C5 0313 0300; Case map */
- 0x000313, 0x000300 }},
- { 0x001F54, 0, { 0x0003C5, /* 1F54; 03C5 0313 0301; Case map */
- 0x000313, 0x000301 }},
- { 0x001F56, 0, { 0x0003C5, /* 1F56; 03C5 0313 0342; Case map */
- 0x000313, 0x000342 }},
- { 0x001F59, 0, { 0x001F51 }}, /* 1F59; 1F51; Case map */
- { 0x001F5B, 0, { 0x001F53 }}, /* 1F5B; 1F53; Case map */
- { 0x001F5D, 0, { 0x001F55 }}, /* 1F5D; 1F55; Case map */
- { 0x001F5F, 0, { 0x001F57 }}, /* 1F5F; 1F57; Case map */
- { 0x001F68, 0, { 0x001F60 }}, /* 1F68; 1F60; Case map */
- { 0x001F69, 0, { 0x001F61 }}, /* 1F69; 1F61; Case map */
- { 0x001F6A, 0, { 0x001F62 }}, /* 1F6A; 1F62; Case map */
- { 0x001F6B, 0, { 0x001F63 }}, /* 1F6B; 1F63; Case map */
- { 0x001F6C, 0, { 0x001F64 }}, /* 1F6C; 1F64; Case map */
- { 0x001F6D, 0, { 0x001F65 }}, /* 1F6D; 1F65; Case map */
- { 0x001F6E, 0, { 0x001F66 }}, /* 1F6E; 1F66; Case map */
- { 0x001F6F, 0, { 0x001F67 }}, /* 1F6F; 1F67; Case map */
- { 0x001F80, 0, { 0x001F00, /* 1F80; 1F00 03B9; Case map */
- 0x0003B9 }},
- { 0x001F81, 0, { 0x001F01, /* 1F81; 1F01 03B9; Case map */
- 0x0003B9 }},
- { 0x001F82, 0, { 0x001F02, /* 1F82; 1F02 03B9; Case map */
- 0x0003B9 }},
- { 0x001F83, 0, { 0x001F03, /* 1F83; 1F03 03B9; Case map */
- 0x0003B9 }},
- { 0x001F84, 0, { 0x001F04, /* 1F84; 1F04 03B9; Case map */
- 0x0003B9 }},
- { 0x001F85, 0, { 0x001F05, /* 1F85; 1F05 03B9; Case map */
- 0x0003B9 }},
- { 0x001F86, 0, { 0x001F06, /* 1F86; 1F06 03B9; Case map */
- 0x0003B9 }},
- { 0x001F87, 0, { 0x001F07, /* 1F87; 1F07 03B9; Case map */
- 0x0003B9 }},
- { 0x001F88, 0, { 0x001F00, /* 1F88; 1F00 03B9; Case map */
- 0x0003B9 }},
- { 0x001F89, 0, { 0x001F01, /* 1F89; 1F01 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8A, 0, { 0x001F02, /* 1F8A; 1F02 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8B, 0, { 0x001F03, /* 1F8B; 1F03 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8C, 0, { 0x001F04, /* 1F8C; 1F04 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8D, 0, { 0x001F05, /* 1F8D; 1F05 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8E, 0, { 0x001F06, /* 1F8E; 1F06 03B9; Case map */
- 0x0003B9 }},
- { 0x001F8F, 0, { 0x001F07, /* 1F8F; 1F07 03B9; Case map */
- 0x0003B9 }},
- { 0x001F90, 0, { 0x001F20, /* 1F90; 1F20 03B9; Case map */
- 0x0003B9 }},
- { 0x001F91, 0, { 0x001F21, /* 1F91; 1F21 03B9; Case map */
- 0x0003B9 }},
- { 0x001F92, 0, { 0x001F22, /* 1F92; 1F22 03B9; Case map */
- 0x0003B9 }},
- { 0x001F93, 0, { 0x001F23, /* 1F93; 1F23 03B9; Case map */
- 0x0003B9 }},
- { 0x001F94, 0, { 0x001F24, /* 1F94; 1F24 03B9; Case map */
- 0x0003B9 }},
- { 0x001F95, 0, { 0x001F25, /* 1F95; 1F25 03B9; Case map */
- 0x0003B9 }},
- { 0x001F96, 0, { 0x001F26, /* 1F96; 1F26 03B9; Case map */
- 0x0003B9 }},
- { 0x001F97, 0, { 0x001F27, /* 1F97; 1F27 03B9; Case map */
- 0x0003B9 }},
- { 0x001F98, 0, { 0x001F20, /* 1F98; 1F20 03B9; Case map */
- 0x0003B9 }},
- { 0x001F99, 0, { 0x001F21, /* 1F99; 1F21 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9A, 0, { 0x001F22, /* 1F9A; 1F22 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9B, 0, { 0x001F23, /* 1F9B; 1F23 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9C, 0, { 0x001F24, /* 1F9C; 1F24 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9D, 0, { 0x001F25, /* 1F9D; 1F25 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9E, 0, { 0x001F26, /* 1F9E; 1F26 03B9; Case map */
- 0x0003B9 }},
- { 0x001F9F, 0, { 0x001F27, /* 1F9F; 1F27 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA0, 0, { 0x001F60, /* 1FA0; 1F60 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA1, 0, { 0x001F61, /* 1FA1; 1F61 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA2, 0, { 0x001F62, /* 1FA2; 1F62 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA3, 0, { 0x001F63, /* 1FA3; 1F63 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA4, 0, { 0x001F64, /* 1FA4; 1F64 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA5, 0, { 0x001F65, /* 1FA5; 1F65 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA6, 0, { 0x001F66, /* 1FA6; 1F66 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA7, 0, { 0x001F67, /* 1FA7; 1F67 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA8, 0, { 0x001F60, /* 1FA8; 1F60 03B9; Case map */
- 0x0003B9 }},
- { 0x001FA9, 0, { 0x001F61, /* 1FA9; 1F61 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAA, 0, { 0x001F62, /* 1FAA; 1F62 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAB, 0, { 0x001F63, /* 1FAB; 1F63 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAC, 0, { 0x001F64, /* 1FAC; 1F64 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAD, 0, { 0x001F65, /* 1FAD; 1F65 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAE, 0, { 0x001F66, /* 1FAE; 1F66 03B9; Case map */
- 0x0003B9 }},
- { 0x001FAF, 0, { 0x001F67, /* 1FAF; 1F67 03B9; Case map */
- 0x0003B9 }},
- { 0x001FB2, 0, { 0x001F70, /* 1FB2; 1F70 03B9; Case map */
- 0x0003B9 }},
- { 0x001FB3, 0, { 0x0003B1, /* 1FB3; 03B1 03B9; Case map */
- 0x0003B9 }},
- { 0x001FB4, 0, { 0x0003AC, /* 1FB4; 03AC 03B9; Case map */
- 0x0003B9 }},
- { 0x001FB6, 0, { 0x0003B1, /* 1FB6; 03B1 0342; Case map */
- 0x000342 }},
- { 0x001FB7, 0, { 0x0003B1, /* 1FB7; 03B1 0342 03B9; Case map */
- 0x000342, 0x0003B9 }},
- { 0x001FB8, 0, { 0x001FB0 }}, /* 1FB8; 1FB0; Case map */
- { 0x001FB9, 0, { 0x001FB1 }}, /* 1FB9; 1FB1; Case map */
- { 0x001FBA, 0, { 0x001F70 }}, /* 1FBA; 1F70; Case map */
- { 0x001FBB, 0, { 0x001F71 }}, /* 1FBB; 1F71; Case map */
- { 0x001FBC, 0, { 0x0003B1, /* 1FBC; 03B1 03B9; Case map */
- 0x0003B9 }},
- { 0x001FBE, 0, { 0x0003B9 }}, /* 1FBE; 03B9; Case map */
- { 0x001FC2, 0, { 0x001F74, /* 1FC2; 1F74 03B9; Case map */
- 0x0003B9 }},
- { 0x001FC3, 0, { 0x0003B7, /* 1FC3; 03B7 03B9; Case map */
- 0x0003B9 }},
- { 0x001FC4, 0, { 0x0003AE, /* 1FC4; 03AE 03B9; Case map */
- 0x0003B9 }},
- { 0x001FC6, 0, { 0x0003B7, /* 1FC6; 03B7 0342; Case map */
- 0x000342 }},
- { 0x001FC7, 0, { 0x0003B7, /* 1FC7; 03B7 0342 03B9; Case map */
- 0x000342, 0x0003B9 }},
- { 0x001FC8, 0, { 0x001F72 }}, /* 1FC8; 1F72; Case map */
- { 0x001FC9, 0, { 0x001F73 }}, /* 1FC9; 1F73; Case map */
- { 0x001FCA, 0, { 0x001F74 }}, /* 1FCA; 1F74; Case map */
- { 0x001FCB, 0, { 0x001F75 }}, /* 1FCB; 1F75; Case map */
- { 0x001FCC, 0, { 0x0003B7, /* 1FCC; 03B7 03B9; Case map */
- 0x0003B9 }},
- { 0x001FD2, 0, { 0x0003B9, /* 1FD2; 03B9 0308 0300; Case map */
- 0x000308, 0x000300 }},
- { 0x001FD3, 0, { 0x0003B9, /* 1FD3; 03B9 0308 0301; Case map */
- 0x000308, 0x000301 }},
- { 0x001FD6, 0, { 0x0003B9, /* 1FD6; 03B9 0342; Case map */
- 0x000342 }},
- { 0x001FD7, 0, { 0x0003B9, /* 1FD7; 03B9 0308 0342; Case map */
- 0x000308, 0x000342 }},
- { 0x001FD8, 0, { 0x001FD0 }}, /* 1FD8; 1FD0; Case map */
- { 0x001FD9, 0, { 0x001FD1 }}, /* 1FD9; 1FD1; Case map */
- { 0x001FDA, 0, { 0x001F76 }}, /* 1FDA; 1F76; Case map */
- { 0x001FDB, 0, { 0x001F77 }}, /* 1FDB; 1F77; Case map */
- { 0x001FE2, 0, { 0x0003C5, /* 1FE2; 03C5 0308 0300; Case map */
- 0x000308, 0x000300 }},
- { 0x001FE3, 0, { 0x0003C5, /* 1FE3; 03C5 0308 0301; Case map */
- 0x000308, 0x000301 }},
- { 0x001FE4, 0, { 0x0003C1, /* 1FE4; 03C1 0313; Case map */
- 0x000313 }},
- { 0x001FE6, 0, { 0x0003C5, /* 1FE6; 03C5 0342; Case map */
- 0x000342 }},
- { 0x001FE7, 0, { 0x0003C5, /* 1FE7; 03C5 0308 0342; Case map */
- 0x000308, 0x000342 }},
- { 0x001FE8, 0, { 0x001FE0 }}, /* 1FE8; 1FE0; Case map */
- { 0x001FE9, 0, { 0x001FE1 }}, /* 1FE9; 1FE1; Case map */
- { 0x001FEA, 0, { 0x001F7A }}, /* 1FEA; 1F7A; Case map */
- { 0x001FEB, 0, { 0x001F7B }}, /* 1FEB; 1F7B; Case map */
- { 0x001FEC, 0, { 0x001FE5 }}, /* 1FEC; 1FE5; Case map */
- { 0x001FF2, 0, { 0x001F7C, /* 1FF2; 1F7C 03B9; Case map */
- 0x0003B9 }},
- { 0x001FF3, 0, { 0x0003C9, /* 1FF3; 03C9 03B9; Case map */
- 0x0003B9 }},
- { 0x001FF4, 0, { 0x0003CE, /* 1FF4; 03CE 03B9; Case map */
- 0x0003B9 }},
- { 0x001FF6, 0, { 0x0003C9, /* 1FF6; 03C9 0342; Case map */
- 0x000342 }},
- { 0x001FF7, 0, { 0x0003C9, /* 1FF7; 03C9 0342 03B9; Case map */
- 0x000342, 0x0003B9 }},
- { 0x001FF8, 0, { 0x001F78 }}, /* 1FF8; 1F78; Case map */
- { 0x001FF9, 0, { 0x001F79 }}, /* 1FF9; 1F79; Case map */
- { 0x001FFA, 0, { 0x001F7C }}, /* 1FFA; 1F7C; Case map */
- { 0x001FFB, 0, { 0x001F7D }}, /* 1FFB; 1F7D; Case map */
- { 0x001FFC, 0, { 0x0003C9, /* 1FFC; 03C9 03B9; Case map */
- 0x0003B9 }},
- { 0x002126, 0, { 0x0003C9 }}, /* 2126; 03C9; Case map */
- { 0x00212A, 0, { 0x00006B }}, /* 212A; 006B; Case map */
- { 0x00212B, 0, { 0x0000E5 }}, /* 212B; 00E5; Case map */
- { 0x002160, 0, { 0x002170 }}, /* 2160; 2170; Case map */
- { 0x002161, 0, { 0x002171 }}, /* 2161; 2171; Case map */
- { 0x002162, 0, { 0x002172 }}, /* 2162; 2172; Case map */
- { 0x002163, 0, { 0x002173 }}, /* 2163; 2173; Case map */
- { 0x002164, 0, { 0x002174 }}, /* 2164; 2174; Case map */
- { 0x002165, 0, { 0x002175 }}, /* 2165; 2175; Case map */
- { 0x002166, 0, { 0x002176 }}, /* 2166; 2176; Case map */
- { 0x002167, 0, { 0x002177 }}, /* 2167; 2177; Case map */
- { 0x002168, 0, { 0x002178 }}, /* 2168; 2178; Case map */
- { 0x002169, 0, { 0x002179 }}, /* 2169; 2179; Case map */
- { 0x00216A, 0, { 0x00217A }}, /* 216A; 217A; Case map */
- { 0x00216B, 0, { 0x00217B }}, /* 216B; 217B; Case map */
- { 0x00216C, 0, { 0x00217C }}, /* 216C; 217C; Case map */
- { 0x00216D, 0, { 0x00217D }}, /* 216D; 217D; Case map */
- { 0x00216E, 0, { 0x00217E }}, /* 216E; 217E; Case map */
- { 0x00216F, 0, { 0x00217F }}, /* 216F; 217F; Case map */
- { 0x0024B6, 0, { 0x0024D0 }}, /* 24B6; 24D0; Case map */
- { 0x0024B7, 0, { 0x0024D1 }}, /* 24B7; 24D1; Case map */
- { 0x0024B8, 0, { 0x0024D2 }}, /* 24B8; 24D2; Case map */
- { 0x0024B9, 0, { 0x0024D3 }}, /* 24B9; 24D3; Case map */
- { 0x0024BA, 0, { 0x0024D4 }}, /* 24BA; 24D4; Case map */
- { 0x0024BB, 0, { 0x0024D5 }}, /* 24BB; 24D5; Case map */
- { 0x0024BC, 0, { 0x0024D6 }}, /* 24BC; 24D6; Case map */
- { 0x0024BD, 0, { 0x0024D7 }}, /* 24BD; 24D7; Case map */
- { 0x0024BE, 0, { 0x0024D8 }}, /* 24BE; 24D8; Case map */
- { 0x0024BF, 0, { 0x0024D9 }}, /* 24BF; 24D9; Case map */
- { 0x0024C0, 0, { 0x0024DA }}, /* 24C0; 24DA; Case map */
- { 0x0024C1, 0, { 0x0024DB }}, /* 24C1; 24DB; Case map */
- { 0x0024C2, 0, { 0x0024DC }}, /* 24C2; 24DC; Case map */
- { 0x0024C3, 0, { 0x0024DD }}, /* 24C3; 24DD; Case map */
- { 0x0024C4, 0, { 0x0024DE }}, /* 24C4; 24DE; Case map */
- { 0x0024C5, 0, { 0x0024DF }}, /* 24C5; 24DF; Case map */
- { 0x0024C6, 0, { 0x0024E0 }}, /* 24C6; 24E0; Case map */
- { 0x0024C7, 0, { 0x0024E1 }}, /* 24C7; 24E1; Case map */
- { 0x0024C8, 0, { 0x0024E2 }}, /* 24C8; 24E2; Case map */
- { 0x0024C9, 0, { 0x0024E3 }}, /* 24C9; 24E3; Case map */
- { 0x0024CA, 0, { 0x0024E4 }}, /* 24CA; 24E4; Case map */
- { 0x0024CB, 0, { 0x0024E5 }}, /* 24CB; 24E5; Case map */
- { 0x0024CC, 0, { 0x0024E6 }}, /* 24CC; 24E6; Case map */
- { 0x0024CD, 0, { 0x0024E7 }}, /* 24CD; 24E7; Case map */
- { 0x0024CE, 0, { 0x0024E8 }}, /* 24CE; 24E8; Case map */
- { 0x0024CF, 0, { 0x0024E9 }}, /* 24CF; 24E9; Case map */
- { 0x00FB00, 0, { 0x000066, /* FB00; 0066 0066; Case map */
- 0x000066 }},
- { 0x00FB01, 0, { 0x000066, /* FB01; 0066 0069; Case map */
- 0x000069 }},
- { 0x00FB02, 0, { 0x000066, /* FB02; 0066 006C; Case map */
- 0x00006C }},
- { 0x00FB03, 0, { 0x000066, /* FB03; 0066 0066 0069; Case map */
- 0x000066, 0x000069 }},
- { 0x00FB04, 0, { 0x000066, /* FB04; 0066 0066 006C; Case map */
- 0x000066, 0x00006C }},
- { 0x00FB05, 0, { 0x000073, /* FB05; 0073 0074; Case map */
- 0x000074 }},
- { 0x00FB06, 0, { 0x000073, /* FB06; 0073 0074; Case map */
- 0x000074 }},
- { 0x00FB13, 0, { 0x000574, /* FB13; 0574 0576; Case map */
- 0x000576 }},
- { 0x00FB14, 0, { 0x000574, /* FB14; 0574 0565; Case map */
- 0x000565 }},
- { 0x00FB15, 0, { 0x000574, /* FB15; 0574 056B; Case map */
- 0x00056B }},
- { 0x00FB16, 0, { 0x00057E, /* FB16; 057E 0576; Case map */
- 0x000576 }},
- { 0x00FB17, 0, { 0x000574, /* FB17; 0574 056D; Case map */
- 0x00056D }},
- { 0x00FF21, 0, { 0x00FF41 }}, /* FF21; FF41; Case map */
- { 0x00FF22, 0, { 0x00FF42 }}, /* FF22; FF42; Case map */
- { 0x00FF23, 0, { 0x00FF43 }}, /* FF23; FF43; Case map */
- { 0x00FF24, 0, { 0x00FF44 }}, /* FF24; FF44; Case map */
- { 0x00FF25, 0, { 0x00FF45 }}, /* FF25; FF45; Case map */
- { 0x00FF26, 0, { 0x00FF46 }}, /* FF26; FF46; Case map */
- { 0x00FF27, 0, { 0x00FF47 }}, /* FF27; FF47; Case map */
- { 0x00FF28, 0, { 0x00FF48 }}, /* FF28; FF48; Case map */
- { 0x00FF29, 0, { 0x00FF49 }}, /* FF29; FF49; Case map */
- { 0x00FF2A, 0, { 0x00FF4A }}, /* FF2A; FF4A; Case map */
- { 0x00FF2B, 0, { 0x00FF4B }}, /* FF2B; FF4B; Case map */
- { 0x00FF2C, 0, { 0x00FF4C }}, /* FF2C; FF4C; Case map */
- { 0x00FF2D, 0, { 0x00FF4D }}, /* FF2D; FF4D; Case map */
- { 0x00FF2E, 0, { 0x00FF4E }}, /* FF2E; FF4E; Case map */
- { 0x00FF2F, 0, { 0x00FF4F }}, /* FF2F; FF4F; Case map */
- { 0x00FF30, 0, { 0x00FF50 }}, /* FF30; FF50; Case map */
- { 0x00FF31, 0, { 0x00FF51 }}, /* FF31; FF51; Case map */
- { 0x00FF32, 0, { 0x00FF52 }}, /* FF32; FF52; Case map */
- { 0x00FF33, 0, { 0x00FF53 }}, /* FF33; FF53; Case map */
- { 0x00FF34, 0, { 0x00FF54 }}, /* FF34; FF54; Case map */
- { 0x00FF35, 0, { 0x00FF55 }}, /* FF35; FF55; Case map */
- { 0x00FF36, 0, { 0x00FF56 }}, /* FF36; FF56; Case map */
- { 0x00FF37, 0, { 0x00FF57 }}, /* FF37; FF57; Case map */
- { 0x00FF38, 0, { 0x00FF58 }}, /* FF38; FF58; Case map */
- { 0x00FF39, 0, { 0x00FF59 }}, /* FF39; FF59; Case map */
- { 0x00FF3A, 0, { 0x00FF5A }}, /* FF3A; FF5A; Case map */
- { 0x010400, 0, { 0x010428 }}, /* 10400; 10428; Case map */
- { 0x010401, 0, { 0x010429 }}, /* 10401; 10429; Case map */
- { 0x010402, 0, { 0x01042A }}, /* 10402; 1042A; Case map */
- { 0x010403, 0, { 0x01042B }}, /* 10403; 1042B; Case map */
- { 0x010404, 0, { 0x01042C }}, /* 10404; 1042C; Case map */
- { 0x010405, 0, { 0x01042D }}, /* 10405; 1042D; Case map */
- { 0x010406, 0, { 0x01042E }}, /* 10406; 1042E; Case map */
- { 0x010407, 0, { 0x01042F }}, /* 10407; 1042F; Case map */
- { 0x010408, 0, { 0x010430 }}, /* 10408; 10430; Case map */
- { 0x010409, 0, { 0x010431 }}, /* 10409; 10431; Case map */
- { 0x01040A, 0, { 0x010432 }}, /* 1040A; 10432; Case map */
- { 0x01040B, 0, { 0x010433 }}, /* 1040B; 10433; Case map */
- { 0x01040C, 0, { 0x010434 }}, /* 1040C; 10434; Case map */
- { 0x01040D, 0, { 0x010435 }}, /* 1040D; 10435; Case map */
- { 0x01040E, 0, { 0x010436 }}, /* 1040E; 10436; Case map */
- { 0x01040F, 0, { 0x010437 }}, /* 1040F; 10437; Case map */
- { 0x010410, 0, { 0x010438 }}, /* 10410; 10438; Case map */
- { 0x010411, 0, { 0x010439 }}, /* 10411; 10439; Case map */
- { 0x010412, 0, { 0x01043A }}, /* 10412; 1043A; Case map */
- { 0x010413, 0, { 0x01043B }}, /* 10413; 1043B; Case map */
- { 0x010414, 0, { 0x01043C }}, /* 10414; 1043C; Case map */
- { 0x010415, 0, { 0x01043D }}, /* 10415; 1043D; Case map */
- { 0x010416, 0, { 0x01043E }}, /* 10416; 1043E; Case map */
- { 0x010417, 0, { 0x01043F }}, /* 10417; 1043F; Case map */
- { 0x010418, 0, { 0x010440 }}, /* 10418; 10440; Case map */
- { 0x010419, 0, { 0x010441 }}, /* 10419; 10441; Case map */
- { 0x01041A, 0, { 0x010442 }}, /* 1041A; 10442; Case map */
- { 0x01041B, 0, { 0x010443 }}, /* 1041B; 10443; Case map */
- { 0x01041C, 0, { 0x010444 }}, /* 1041C; 10444; Case map */
- { 0x01041D, 0, { 0x010445 }}, /* 1041D; 10445; Case map */
- { 0x01041E, 0, { 0x010446 }}, /* 1041E; 10446; Case map */
- { 0x01041F, 0, { 0x010447 }}, /* 1041F; 10447; Case map */
- { 0x010420, 0, { 0x010448 }}, /* 10420; 10448; Case map */
- { 0x010421, 0, { 0x010449 }}, /* 10421; 10449; Case map */
- { 0x010422, 0, { 0x01044A }}, /* 10422; 1044A; Case map */
- { 0x010423, 0, { 0x01044B }}, /* 10423; 1044B; Case map */
- { 0x010424, 0, { 0x01044C }}, /* 10424; 1044C; Case map */
- { 0x010425, 0, { 0x01044D }}, /* 10425; 1044D; Case map */
- { 0 },
-};
-
-
-/*
- * FF3A; FF5A; Case map
- * 10400; 10428; Case map
-10401; 10429; Case map
-10402; 1042A; Case map
-10403; 1042B; Case map
-10404; 1042C; Case map
-10405; 1042D; Case map
-10406; 1042E; Case map
-10407; 1042F; Case map
-10408; 10430; Case map
-10409; 10431; Case map
-1040A; 10432; Case map
-1040B; 10433; Case map
-1040C; 10434; Case map
-1040D; 10435; Case map
-1040E; 10436; Case map
-1040F; 10437; Case map
-10410; 10438; Case map
-10411; 10439; Case map
-10412; 1043A; Case map
-10413; 1043B; Case map
-10414; 1043C; Case map
-10415; 1043D; Case map
-10416; 1043E; Case map
-10417; 1043F; Case map
-10418; 10440; Case map
-10419; 10441; Case map
-1041A; 10442; Case map
-1041B; 10443; Case map
-1041C; 10444; Case map
-1041D; 10445; Case map
-1041E; 10446; Case map
-1041F; 10447; Case map
-10420; 10448; Case map
-10421; 10449; Case map
-10422; 1044A; Case map
-10423; 1044B; Case map
-10424; 1044C; Case map
-10425; 1044D; Case map
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_1_1[] = {
- { 0x000020 }, /* 0020; SPACE */
- { 0 },
-};
-
-
-/*
- * FF3A; FF5A; Case map
- * * 10400; 10428; Case map
-10401; 10429; Case map
-10402; 1042A; Case map
-10403; 1042B; Case map
-10404; 1042C; Case map
-10405; 1042D; Case map
-10406; 1042E; Case map
-10407; 1042F; Case map
-10408; 10430; Case map
-10409; 10431; Case map
-1040A; 10432; Case map
-1040B; 10433; Case map
-1040C; 10434; Case map
-1040D; 10435; Case map
-1040E; 10436; Case map
-1040F; 10437; Case map
-10410; 10438; Case map
-10411; 10439; Case map
-10412; 1043A; Case map
-10413; 1043B; Case map
-10414; 1043C; Case map
-10415; 1043D; Case map
-10416; 1043E; Case map
-10417; 1043F; Case map
-10418; 10440; Case map
-10419; 10441; Case map
-1041A; 10442; Case map
-1041B; 10443; Case map
-1041C; 10444; Case map
-1041D; 10445; Case map
-1041E; 10446; Case map
-1041F; 10447; Case map
-10420; 10448; Case map
-10421; 10449; Case map
-10422; 1044A; Case map
-10423; 1044B; Case map
-10424; 1044C; Case map
-10425; 1044D; Case map
-
-0020; SPACE
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_1_2[] = {
- { 0x0000A0 }, /* 00A0; NO-BREAK SPACE */
- { 0x001680 }, /* 1680; OGHAM SPACE MARK */
- { 0x002000 }, /* 2000; EN QUAD */
- { 0x002001 }, /* 2001; EM QUAD */
- { 0x002002 }, /* 2002; EN SPACE */
- { 0x002003 }, /* 2003; EM SPACE */
- { 0x002004 }, /* 2004; THREE-PER-EM SPACE */
- { 0x002005 }, /* 2005; FOUR-PER-EM SPACE */
- { 0x002006 }, /* 2006; SIX-PER-EM SPACE */
- { 0x002007 }, /* 2007; FIGURE SPACE */
- { 0x002008 }, /* 2008; PUNCTUATION SPACE */
- { 0x002009 }, /* 2009; THIN SPACE */
- { 0x00200A }, /* 200A; HAIR SPACE */
- { 0x00200B }, /* 200B; ZERO WIDTH SPACE */
- { 0x00202F }, /* 202F; NARROW NO-BREAK SPACE */
- { 0x00205F }, /* 205F; MEDIUM MATHEMATICAL SPACE */
- { 0x003000 }, /* 3000; IDEOGRAPHIC SPACE */
- { 0 },
-};
-
-
-/*
- * FF3A; FF5A; Case map
- * * * 10400; 10428; Case map
-10401; 10429; Case map
-10402; 1042A; Case map
-10403; 1042B; Case map
-10404; 1042C; Case map
-10405; 1042D; Case map
-10406; 1042E; Case map
-10407; 1042F; Case map
-10408; 10430; Case map
-10409; 10431; Case map
-1040A; 10432; Case map
-1040B; 10433; Case map
-1040C; 10434; Case map
-1040D; 10435; Case map
-1040E; 10436; Case map
-1040F; 10437; Case map
-10410; 10438; Case map
-10411; 10439; Case map
-10412; 1043A; Case map
-10413; 1043B; Case map
-10414; 1043C; Case map
-10415; 1043D; Case map
-10416; 1043E; Case map
-10417; 1043F; Case map
-10418; 10440; Case map
-10419; 10441; Case map
-1041A; 10442; Case map
-1041B; 10443; Case map
-1041C; 10444; Case map
-1041D; 10445; Case map
-1041E; 10446; Case map
-1041F; 10447; Case map
-10420; 10448; Case map
-10421; 10449; Case map
-10422; 1044A; Case map
-10423; 1044B; Case map
-10424; 1044C; Case map
-10425; 1044D; Case map
-
-0020; SPACE
-
-00A0; NO-BREAK SPACE
-1680; OGHAM SPACE MARK
-2000; EN QUAD
-2001; EM QUAD
-2002; EN SPACE
-2003; EM SPACE
-2004; THREE-PER-EM SPACE
-2005; FOUR-PER-EM SPACE
-2006; SIX-PER-EM SPACE
-2007; FIGURE SPACE
-2008; PUNCTUATION SPACE
-2009; THIN SPACE
-200A; HAIR SPACE
-200B; ZERO WIDTH SPACE
-202F; NARROW NO-BREAK SPACE
-205F; MEDIUM MATHEMATICAL SPACE
-3000; IDEOGRAPHIC SPACE
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_2_1[] = {
- { 0x000000, 0x00001F }, /* 0000-001F; [CONTROL CHARACTERS] */
- { 0x00007F }, /* 007F; DELETE */
- { 0 },
-};
-
-
-/*
- * FF3A; FF5A; Case map
- * * * * 10400; 10428; Case map
-10401; 10429; Case map
-10402; 1042A; Case map
-10403; 1042B; Case map
-10404; 1042C; Case map
-10405; 1042D; Case map
-10406; 1042E; Case map
-10407; 1042F; Case map
-10408; 10430; Case map
-10409; 10431; Case map
-1040A; 10432; Case map
-1040B; 10433; Case map
-1040C; 10434; Case map
-1040D; 10435; Case map
-1040E; 10436; Case map
-1040F; 10437; Case map
-10410; 10438; Case map
-10411; 10439; Case map
-10412; 1043A; Case map
-10413; 1043B; Case map
-10414; 1043C; Case map
-10415; 1043D; Case map
-10416; 1043E; Case map
-10417; 1043F; Case map
-10418; 10440; Case map
-10419; 10441; Case map
-1041A; 10442; Case map
-1041B; 10443; Case map
-1041C; 10444; Case map
-1041D; 10445; Case map
-1041E; 10446; Case map
-1041F; 10447; Case map
-10420; 10448; Case map
-10421; 10449; Case map
-10422; 1044A; Case map
-10423; 1044B; Case map
-10424; 1044C; Case map
-10425; 1044D; Case map
-
-0020; SPACE
-
-00A0; NO-BREAK SPACE
-1680; OGHAM SPACE MARK
-2000; EN QUAD
-2001; EM QUAD
-2002; EN SPACE
-2003; EM SPACE
-2004; THREE-PER-EM SPACE
-2005; FOUR-PER-EM SPACE
-2006; SIX-PER-EM SPACE
-2007; FIGURE SPACE
-2008; PUNCTUATION SPACE
-2009; THIN SPACE
-200A; HAIR SPACE
-200B; ZERO WIDTH SPACE
-202F; NARROW NO-BREAK SPACE
-205F; MEDIUM MATHEMATICAL SPACE
-3000; IDEOGRAPHIC SPACE
-
-0000-001F; [CONTROL CHARACTERS]
-007F; DELETE
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_2_2[] = {
- { 0x000080, 0x00009F }, /* 0080-009F; [CONTROL CHARACTERS] */
- { 0x0006DD }, /* 06DD; ARABIC END OF AYAH */
- { 0x00070F }, /* 070F; SYRIAC ABBREVIATION MARK */
- { 0x00180E }, /* 180E; MONGOLIAN VOWEL SEPARATOR */
- { 0x00200C }, /* 200C; ZERO WIDTH NON-JOINER */
- { 0x00200D }, /* 200D; ZERO WIDTH JOINER */
- { 0x002028 }, /* 2028; LINE SEPARATOR */
- { 0x002029 }, /* 2029; PARAGRAPH SEPARATOR */
- { 0x002060 }, /* 2060; WORD JOINER */
- { 0x002061 }, /* 2061; FUNCTION APPLICATION */
- { 0x002062 }, /* 2062; INVISIBLE TIMES */
- { 0x002063 }, /* 2063; INVISIBLE SEPARATOR */
- { 0x00206A, 0x00206F }, /* 206A-206F; [CONTROL CHARACTERS] */
- { 0x00FEFF }, /* FEFF; ZERO WIDTH NO-BREAK SPACE */
- { 0x00FFF9, 0x00FFFC }, /* FFF9-FFFC; [CONTROL CHARACTERS] */
- { 0x01D173, 0x01D17A }, /* 1D173-1D17A; [MUSICAL CONTROL CHARACTERS] */
- { 0 },
-};
-
-
-/*
- * FFF9-FFFC; [CONTROL CHARACTERS]
- * 1D173-1D17A; [MUSICAL CONTROL CHARACTERS]
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_3[] = {
- { 0x00E000, 0x00F8FF }, /* E000-F8FF; [PRIVATE USE, PLANE 0] */
- { 0x0F0000, 0x0FFFFD }, /* F0000-FFFFD; [PRIVATE USE, PLANE 15] */
- { 0x100000, 0x10FFFD }, /* 100000-10FFFD; [PRIVATE USE, PLANE 16] */
- { 0 },
-};
-
-
-/*
- * F0000-FFFFD; [PRIVATE USE, PLANE 15]
- * 100000-10FFFD; [PRIVATE USE, PLANE 16]
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_4[] = {
- { 0x00FDD0, 0x00FDEF }, /* FDD0-FDEF; [NONCHARACTER CODE POINTS] */
- { 0x00FFFE, 0x00FFFF }, /* FFFE-FFFF; [NONCHARACTER CODE POINTS] */
- { 0x01FFFE, 0x01FFFF }, /* 1FFFE-1FFFF; [NONCHARACTER CODE POINTS] */
- { 0x02FFFE, 0x02FFFF }, /* 2FFFE-2FFFF; [NONCHARACTER CODE POINTS] */
- { 0x03FFFE, 0x03FFFF }, /* 3FFFE-3FFFF; [NONCHARACTER CODE POINTS] */
- { 0x04FFFE, 0x04FFFF }, /* 4FFFE-4FFFF; [NONCHARACTER CODE POINTS] */
- { 0x05FFFE, 0x05FFFF }, /* 5FFFE-5FFFF; [NONCHARACTER CODE POINTS] */
- { 0x06FFFE, 0x06FFFF }, /* 6FFFE-6FFFF; [NONCHARACTER CODE POINTS] */
- { 0x07FFFE, 0x07FFFF }, /* 7FFFE-7FFFF; [NONCHARACTER CODE POINTS] */
- { 0x08FFFE, 0x08FFFF }, /* 8FFFE-8FFFF; [NONCHARACTER CODE POINTS] */
- { 0x09FFFE, 0x09FFFF }, /* 9FFFE-9FFFF; [NONCHARACTER CODE POINTS] */
- { 0x0AFFFE, 0x0AFFFF }, /* AFFFE-AFFFF; [NONCHARACTER CODE POINTS] */
- { 0x0BFFFE, 0x0BFFFF }, /* BFFFE-BFFFF; [NONCHARACTER CODE POINTS] */
- { 0x0CFFFE, 0x0CFFFF }, /* CFFFE-CFFFF; [NONCHARACTER CODE POINTS] */
- { 0x0DFFFE, 0x0DFFFF }, /* DFFFE-DFFFF; [NONCHARACTER CODE POINTS] */
- { 0x0EFFFE, 0x0EFFFF }, /* EFFFE-EFFFF; [NONCHARACTER CODE POINTS] */
- { 0x0FFFFE, 0x0FFFFF }, /* FFFFE-FFFFF; [NONCHARACTER CODE POINTS] */
- { 0x10FFFE, 0x10FFFF }, /* 10FFFE-10FFFF; [NONCHARACTER CODE POINTS] */
- { 0 },
-};
-
-
-/*
- * FFFFE-FFFFF; [NONCHARACTER CODE POINTS]
- * 10FFFE-10FFFF; [NONCHARACTER CODE POINTS]
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_5[] = {
- { 0x00D800, 0x00DFFF }, /* D800-DFFF; [SURROGATE CODES] */
- { 0 },
-};
-
-
-/*
- * D800-DFFF; [SURROGATE CODES]
- *
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_6[] = {
- { 0x00FFF9 }, /* FFF9; INTERLINEAR ANNOTATION ANCHOR */
- { 0x00FFFA }, /* FFFA; INTERLINEAR ANNOTATION SEPARATOR */
- { 0x00FFFB }, /* FFFB; INTERLINEAR ANNOTATION TERMINATOR */
- { 0x00FFFC }, /* FFFC; OBJECT REPLACEMENT CHARACTER */
- { 0x00FFFD }, /* FFFD; REPLACEMENT CHARACTER */
- { 0 },
-};
-
-
-/*
- * FFFD; REPLACEMENT CHARACTER
- *
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_7[] = {
- { 0x002FF0, 0x002FFB }, /* 2FF0-2FFB; [IDEOGRAPHIC DESCRIPTION CHARACTERS] */
- { 0 },
-};
-
-
-/*
- * FFFD; REPLACEMENT CHARACTER
- * *
-2FF0-2FFB; [IDEOGRAPHIC DESCRIPTION CHARACTERS]
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_8[] = {
- { 0x000340 }, /* 0340; COMBINING GRAVE TONE MARK */
- { 0x000341 }, /* 0341; COMBINING ACUTE TONE MARK */
- { 0x00200E }, /* 200E; LEFT-TO-RIGHT MARK */
- { 0x00200F }, /* 200F; RIGHT-TO-LEFT MARK */
- { 0x00202A }, /* 202A; LEFT-TO-RIGHT EMBEDDING */
- { 0x00202B }, /* 202B; RIGHT-TO-LEFT EMBEDDING */
- { 0x00202C }, /* 202C; POP DIRECTIONAL FORMATTING */
- { 0x00202D }, /* 202D; LEFT-TO-RIGHT OVERRIDE */
- { 0x00202E }, /* 202E; RIGHT-TO-LEFT OVERRIDE */
- { 0x00206A }, /* 206A; INHIBIT SYMMETRIC SWAPPING */
- { 0x00206B }, /* 206B; ACTIVATE SYMMETRIC SWAPPING */
- { 0x00206C }, /* 206C; INHIBIT ARABIC FORM SHAPING */
- { 0x00206D }, /* 206D; ACTIVATE ARABIC FORM SHAPING */
- { 0x00206E }, /* 206E; NATIONAL DIGIT SHAPES */
- { 0x00206F }, /* 206F; NOMINAL DIGIT SHAPES */
- { 0 },
-};
-
-
-/*
- * FFFD; REPLACEMENT CHARACTER
- * * *
-2FF0-2FFB; [IDEOGRAPHIC DESCRIPTION CHARACTERS]
-
-0340; COMBINING GRAVE TONE MARK
-0341; COMBINING ACUTE TONE MARK
-200E; LEFT-TO-RIGHT MARK
-200F; RIGHT-TO-LEFT MARK
-202A; LEFT-TO-RIGHT EMBEDDING
-202B; RIGHT-TO-LEFT EMBEDDING
-202C; POP DIRECTIONAL FORMATTING
-202D; LEFT-TO-RIGHT OVERRIDE
-202E; RIGHT-TO-LEFT OVERRIDE
-206A; INHIBIT SYMMETRIC SWAPPING
-206B; ACTIVATE SYMMETRIC SWAPPING
-206C; INHIBIT ARABIC FORM SHAPING
-206D; ACTIVATE ARABIC FORM SHAPING
-206E; NATIONAL DIGIT SHAPES
-206F; NOMINAL DIGIT SHAPES
-
- */
-
-const Stringprep_table_element stringprep_rfc3454_C_9[] = {
- { 0x0E0001 }, /* E0001; LANGUAGE TAG */
- { 0x0E0020, 0x0E007F }, /* E0020-E007F; [TAGGING CHARACTERS] */
- { 0 },
-};
-
-
-/*
- * E0020-E007F; [TAGGING CHARACTERS]
- *
- */
-
-const Stringprep_table_element stringprep_rfc3454_D_1[] = {
- { 0x0005BE }, /* 05BE */
- { 0x0005C0 }, /* 05C0 */
- { 0x0005C3 }, /* 05C3 */
- { 0x0005D0, 0x0005EA }, /* 05D0-05EA */
- { 0x0005F0, 0x0005F4 }, /* 05F0-05F4 */
- { 0x00061B }, /* 061B */
- { 0x00061F }, /* 061F */
- { 0x000621, 0x00063A }, /* 0621-063A */
- { 0x000640, 0x00064A }, /* 0640-064A */
- { 0x00066D, 0x00066F }, /* 066D-066F */
- { 0x000671, 0x0006D5 }, /* 0671-06D5 */
- { 0x0006DD }, /* 06DD */
- { 0x0006E5, 0x0006E6 }, /* 06E5-06E6 */
- { 0x0006FA, 0x0006FE }, /* 06FA-06FE */
- { 0x000700, 0x00070D }, /* 0700-070D */
- { 0x000710 }, /* 0710 */
- { 0x000712, 0x00072C }, /* 0712-072C */
- { 0x000780, 0x0007A5 }, /* 0780-07A5 */
- { 0x0007B1 }, /* 07B1 */
- { 0x00200F }, /* 200F */
- { 0x00FB1D }, /* FB1D */
- { 0x00FB1F, 0x00FB28 }, /* FB1F-FB28 */
- { 0x00FB2A, 0x00FB36 }, /* FB2A-FB36 */
- { 0x00FB38, 0x00FB3C }, /* FB38-FB3C */
- { 0x00FB3E }, /* FB3E */
- { 0x00FB40, 0x00FB41 }, /* FB40-FB41 */
- { 0x00FB43, 0x00FB44 }, /* FB43-FB44 */
- { 0x00FB46, 0x00FBB1 }, /* FB46-FBB1 */
- { 0x00FBD3, 0x00FD3D }, /* FBD3-FD3D */
- { 0x00FD50, 0x00FD8F }, /* FD50-FD8F */
- { 0x00FD92, 0x00FDC7 }, /* FD92-FDC7 */
- { 0x00FDF0, 0x00FDFC }, /* FDF0-FDFC */
- { 0x00FE70, 0x00FE74 }, /* FE70-FE74 */
- { 0x00FE76, 0x00FEFC }, /* FE76-FEFC */
- { 0 },
-};
-
-
-/*
- * FE76-FEFC
- *
- */
-
-const Stringprep_table_element stringprep_rfc3454_D_2[] = {
- { 0x000041, 0x00005A }, /* 0041-005A */
- { 0x000061, 0x00007A }, /* 0061-007A */
- { 0x0000AA }, /* 00AA */
- { 0x0000B5 }, /* 00B5 */
- { 0x0000BA }, /* 00BA */
- { 0x0000C0, 0x0000D6 }, /* 00C0-00D6 */
- { 0x0000D8, 0x0000F6 }, /* 00D8-00F6 */
- { 0x0000F8, 0x000220 }, /* 00F8-0220 */
- { 0x000222, 0x000233 }, /* 0222-0233 */
- { 0x000250, 0x0002AD }, /* 0250-02AD */
- { 0x0002B0, 0x0002B8 }, /* 02B0-02B8 */
- { 0x0002BB, 0x0002C1 }, /* 02BB-02C1 */
- { 0x0002D0, 0x0002D1 }, /* 02D0-02D1 */
- { 0x0002E0, 0x0002E4 }, /* 02E0-02E4 */
- { 0x0002EE }, /* 02EE */
- { 0x00037A }, /* 037A */
- { 0x000386 }, /* 0386 */
- { 0x000388, 0x00038A }, /* 0388-038A */
- { 0x00038C }, /* 038C */
- { 0x00038E, 0x0003A1 }, /* 038E-03A1 */
- { 0x0003A3, 0x0003CE }, /* 03A3-03CE */
- { 0x0003D0, 0x0003F5 }, /* 03D0-03F5 */
- { 0x000400, 0x000482 }, /* 0400-0482 */
- { 0x00048A, 0x0004CE }, /* 048A-04CE */
- { 0x0004D0, 0x0004F5 }, /* 04D0-04F5 */
- { 0x0004F8, 0x0004F9 }, /* 04F8-04F9 */
- { 0x000500, 0x00050F }, /* 0500-050F */
- { 0x000531, 0x000556 }, /* 0531-0556 */
- { 0x000559, 0x00055F }, /* 0559-055F */
- { 0x000561, 0x000587 }, /* 0561-0587 */
- { 0x000589 }, /* 0589 */
- { 0x000903 }, /* 0903 */
- { 0x000905, 0x000939 }, /* 0905-0939 */
- { 0x00093D, 0x000940 }, /* 093D-0940 */
- { 0x000949, 0x00094C }, /* 0949-094C */
- { 0x000950 }, /* 0950 */
- { 0x000958, 0x000961 }, /* 0958-0961 */
- { 0x000964, 0x000970 }, /* 0964-0970 */
- { 0x000982, 0x000983 }, /* 0982-0983 */
- { 0x000985, 0x00098C }, /* 0985-098C */
- { 0x00098F, 0x000990 }, /* 098F-0990 */
- { 0x000993, 0x0009A8 }, /* 0993-09A8 */
- { 0x0009AA, 0x0009B0 }, /* 09AA-09B0 */
- { 0x0009B2 }, /* 09B2 */
- { 0x0009B6, 0x0009B9 }, /* 09B6-09B9 */
- { 0x0009BE, 0x0009C0 }, /* 09BE-09C0 */
- { 0x0009C7, 0x0009C8 }, /* 09C7-09C8 */
- { 0x0009CB, 0x0009CC }, /* 09CB-09CC */
- { 0x0009D7 }, /* 09D7 */
- { 0x0009DC, 0x0009DD }, /* 09DC-09DD */
- { 0x0009DF, 0x0009E1 }, /* 09DF-09E1 */
- { 0x0009E6, 0x0009F1 }, /* 09E6-09F1 */
- { 0x0009F4, 0x0009FA }, /* 09F4-09FA */
- { 0x000A05, 0x000A0A }, /* 0A05-0A0A */
- { 0x000A0F, 0x000A10 }, /* 0A0F-0A10 */
- { 0x000A13, 0x000A28 }, /* 0A13-0A28 */
- { 0x000A2A, 0x000A30 }, /* 0A2A-0A30 */
- { 0x000A32, 0x000A33 }, /* 0A32-0A33 */
- { 0x000A35, 0x000A36 }, /* 0A35-0A36 */
- { 0x000A38, 0x000A39 }, /* 0A38-0A39 */
- { 0x000A3E, 0x000A40 }, /* 0A3E-0A40 */
- { 0x000A59, 0x000A5C }, /* 0A59-0A5C */
- { 0x000A5E }, /* 0A5E */
- { 0x000A66, 0x000A6F }, /* 0A66-0A6F */
- { 0x000A72, 0x000A74 }, /* 0A72-0A74 */
- { 0x000A83 }, /* 0A83 */
- { 0x000A85, 0x000A8B }, /* 0A85-0A8B */
- { 0x000A8D }, /* 0A8D */
- { 0x000A8F, 0x000A91 }, /* 0A8F-0A91 */
- { 0x000A93, 0x000AA8 }, /* 0A93-0AA8 */
- { 0x000AAA, 0x000AB0 }, /* 0AAA-0AB0 */
- { 0x000AB2, 0x000AB3 }, /* 0AB2-0AB3 */
- { 0x000AB5, 0x000AB9 }, /* 0AB5-0AB9 */
- { 0x000ABD, 0x000AC0 }, /* 0ABD-0AC0 */
- { 0x000AC9 }, /* 0AC9 */
- { 0x000ACB, 0x000ACC }, /* 0ACB-0ACC */
- { 0x000AD0 }, /* 0AD0 */
- { 0x000AE0 }, /* 0AE0 */
- { 0x000AE6, 0x000AEF }, /* 0AE6-0AEF */
- { 0x000B02, 0x000B03 }, /* 0B02-0B03 */
- { 0x000B05, 0x000B0C }, /* 0B05-0B0C */
- { 0x000B0F, 0x000B10 }, /* 0B0F-0B10 */
- { 0x000B13, 0x000B28 }, /* 0B13-0B28 */
- { 0x000B2A, 0x000B30 }, /* 0B2A-0B30 */
- { 0x000B32, 0x000B33 }, /* 0B32-0B33 */
- { 0x000B36, 0x000B39 }, /* 0B36-0B39 */
- { 0x000B3D, 0x000B3E }, /* 0B3D-0B3E */
- { 0x000B40 }, /* 0B40 */
- { 0x000B47, 0x000B48 }, /* 0B47-0B48 */
- { 0x000B4B, 0x000B4C }, /* 0B4B-0B4C */
- { 0x000B57 }, /* 0B57 */
- { 0x000B5C, 0x000B5D }, /* 0B5C-0B5D */
- { 0x000B5F, 0x000B61 }, /* 0B5F-0B61 */
- { 0x000B66, 0x000B70 }, /* 0B66-0B70 */
- { 0x000B83 }, /* 0B83 */
- { 0x000B85, 0x000B8A }, /* 0B85-0B8A */
- { 0x000B8E, 0x000B90 }, /* 0B8E-0B90 */
- { 0x000B92, 0x000B95 }, /* 0B92-0B95 */
- { 0x000B99, 0x000B9A }, /* 0B99-0B9A */
- { 0x000B9C }, /* 0B9C */
- { 0x000B9E, 0x000B9F }, /* 0B9E-0B9F */
- { 0x000BA3, 0x000BA4 }, /* 0BA3-0BA4 */
- { 0x000BA8, 0x000BAA }, /* 0BA8-0BAA */
- { 0x000BAE, 0x000BB5 }, /* 0BAE-0BB5 */
- { 0x000BB7, 0x000BB9 }, /* 0BB7-0BB9 */
- { 0x000BBE, 0x000BBF }, /* 0BBE-0BBF */
- { 0x000BC1, 0x000BC2 }, /* 0BC1-0BC2 */
- { 0x000BC6, 0x000BC8 }, /* 0BC6-0BC8 */
- { 0x000BCA, 0x000BCC }, /* 0BCA-0BCC */
- { 0x000BD7 }, /* 0BD7 */
- { 0x000BE7, 0x000BF2 }, /* 0BE7-0BF2 */
- { 0x000C01, 0x000C03 }, /* 0C01-0C03 */
- { 0x000C05, 0x000C0C }, /* 0C05-0C0C */
- { 0x000C0E, 0x000C10 }, /* 0C0E-0C10 */
- { 0x000C12, 0x000C28 }, /* 0C12-0C28 */
- { 0x000C2A, 0x000C33 }, /* 0C2A-0C33 */
- { 0x000C35, 0x000C39 }, /* 0C35-0C39 */
- { 0x000C41, 0x000C44 }, /* 0C41-0C44 */
- { 0x000C60, 0x000C61 }, /* 0C60-0C61 */
- { 0x000C66, 0x000C6F }, /* 0C66-0C6F */
- { 0x000C82, 0x000C83 }, /* 0C82-0C83 */
- { 0x000C85, 0x000C8C }, /* 0C85-0C8C */
- { 0x000C8E, 0x000C90 }, /* 0C8E-0C90 */
- { 0x000C92, 0x000CA8 }, /* 0C92-0CA8 */
- { 0x000CAA, 0x000CB3 }, /* 0CAA-0CB3 */
- { 0x000CB5, 0x000CB9 }, /* 0CB5-0CB9 */
- { 0x000CBE }, /* 0CBE */
- { 0x000CC0, 0x000CC4 }, /* 0CC0-0CC4 */
- { 0x000CC7, 0x000CC8 }, /* 0CC7-0CC8 */
- { 0x000CCA, 0x000CCB }, /* 0CCA-0CCB */
- { 0x000CD5, 0x000CD6 }, /* 0CD5-0CD6 */
- { 0x000CDE }, /* 0CDE */
- { 0x000CE0, 0x000CE1 }, /* 0CE0-0CE1 */
- { 0x000CE6, 0x000CEF }, /* 0CE6-0CEF */
- { 0x000D02, 0x000D03 }, /* 0D02-0D03 */
- { 0x000D05, 0x000D0C }, /* 0D05-0D0C */
- { 0x000D0E, 0x000D10 }, /* 0D0E-0D10 */
- { 0x000D12, 0x000D28 }, /* 0D12-0D28 */
- { 0x000D2A, 0x000D39 }, /* 0D2A-0D39 */
- { 0x000D3E, 0x000D40 }, /* 0D3E-0D40 */
- { 0x000D46, 0x000D48 }, /* 0D46-0D48 */
- { 0x000D4A, 0x000D4C }, /* 0D4A-0D4C */
- { 0x000D57 }, /* 0D57 */
- { 0x000D60, 0x000D61 }, /* 0D60-0D61 */
- { 0x000D66, 0x000D6F }, /* 0D66-0D6F */
- { 0x000D82, 0x000D83 }, /* 0D82-0D83 */
- { 0x000D85, 0x000D96 }, /* 0D85-0D96 */
- { 0x000D9A, 0x000DB1 }, /* 0D9A-0DB1 */
- { 0x000DB3, 0x000DBB }, /* 0DB3-0DBB */
- { 0x000DBD }, /* 0DBD */
- { 0x000DC0, 0x000DC6 }, /* 0DC0-0DC6 */
- { 0x000DCF, 0x000DD1 }, /* 0DCF-0DD1 */
- { 0x000DD8, 0x000DDF }, /* 0DD8-0DDF */
- { 0x000DF2, 0x000DF4 }, /* 0DF2-0DF4 */
- { 0x000E01, 0x000E30 }, /* 0E01-0E30 */
- { 0x000E32, 0x000E33 }, /* 0E32-0E33 */
- { 0x000E40, 0x000E46 }, /* 0E40-0E46 */
- { 0x000E4F, 0x000E5B }, /* 0E4F-0E5B */
- { 0x000E81, 0x000E82 }, /* 0E81-0E82 */
- { 0x000E84 }, /* 0E84 */
- { 0x000E87, 0x000E88 }, /* 0E87-0E88 */
- { 0x000E8A }, /* 0E8A */
- { 0x000E8D }, /* 0E8D */
- { 0x000E94, 0x000E97 }, /* 0E94-0E97 */
- { 0x000E99, 0x000E9F }, /* 0E99-0E9F */
- { 0x000EA1, 0x000EA3 }, /* 0EA1-0EA3 */
- { 0x000EA5 }, /* 0EA5 */
- { 0x000EA7 }, /* 0EA7 */
- { 0x000EAA, 0x000EAB }, /* 0EAA-0EAB */
- { 0x000EAD, 0x000EB0 }, /* 0EAD-0EB0 */
- { 0x000EB2, 0x000EB3 }, /* 0EB2-0EB3 */
- { 0x000EBD }, /* 0EBD */
- { 0x000EC0, 0x000EC4 }, /* 0EC0-0EC4 */
- { 0x000EC6 }, /* 0EC6 */
- { 0x000ED0, 0x000ED9 }, /* 0ED0-0ED9 */
- { 0x000EDC, 0x000EDD }, /* 0EDC-0EDD */
- { 0x000F00, 0x000F17 }, /* 0F00-0F17 */
- { 0x000F1A, 0x000F34 }, /* 0F1A-0F34 */
- { 0x000F36 }, /* 0F36 */
- { 0x000F38 }, /* 0F38 */
- { 0x000F3E, 0x000F47 }, /* 0F3E-0F47 */
- { 0x000F49, 0x000F6A }, /* 0F49-0F6A */
- { 0x000F7F }, /* 0F7F */
- { 0x000F85 }, /* 0F85 */
- { 0x000F88, 0x000F8B }, /* 0F88-0F8B */
- { 0x000FBE, 0x000FC5 }, /* 0FBE-0FC5 */
- { 0x000FC7, 0x000FCC }, /* 0FC7-0FCC */
- { 0x000FCF }, /* 0FCF */
- { 0x001000, 0x001021 }, /* 1000-1021 */
- { 0x001023, 0x001027 }, /* 1023-1027 */
- { 0x001029, 0x00102A }, /* 1029-102A */
- { 0x00102C }, /* 102C */
- { 0x001031 }, /* 1031 */
- { 0x001038 }, /* 1038 */
- { 0x001040, 0x001057 }, /* 1040-1057 */
- { 0x0010A0, 0x0010C5 }, /* 10A0-10C5 */
- { 0x0010D0, 0x0010F8 }, /* 10D0-10F8 */
- { 0x0010FB }, /* 10FB */
- { 0x001100, 0x001159 }, /* 1100-1159 */
- { 0x00115F, 0x0011A2 }, /* 115F-11A2 */
- { 0x0011A8, 0x0011F9 }, /* 11A8-11F9 */
- { 0x001200, 0x001206 }, /* 1200-1206 */
- { 0x001208, 0x001246 }, /* 1208-1246 */
- { 0x001248 }, /* 1248 */
- { 0x00124A, 0x00124D }, /* 124A-124D */
- { 0x001250, 0x001256 }, /* 1250-1256 */
- { 0x001258 }, /* 1258 */
- { 0x00125A, 0x00125D }, /* 125A-125D */
- { 0x001260, 0x001286 }, /* 1260-1286 */
- { 0x001288 }, /* 1288 */
- { 0x00128A, 0x00128D }, /* 128A-128D */
- { 0x001290, 0x0012AE }, /* 1290-12AE */
- { 0x0012B0 }, /* 12B0 */
- { 0x0012B2, 0x0012B5 }, /* 12B2-12B5 */
- { 0x0012B8, 0x0012BE }, /* 12B8-12BE */
- { 0x0012C0 }, /* 12C0 */
- { 0x0012C2, 0x0012C5 }, /* 12C2-12C5 */
- { 0x0012C8, 0x0012CE }, /* 12C8-12CE */
- { 0x0012D0, 0x0012D6 }, /* 12D0-12D6 */
- { 0x0012D8, 0x0012EE }, /* 12D8-12EE */
- { 0x0012F0, 0x00130E }, /* 12F0-130E */
- { 0x001310 }, /* 1310 */
- { 0x001312, 0x001315 }, /* 1312-1315 */
- { 0x001318, 0x00131E }, /* 1318-131E */
- { 0x001320, 0x001346 }, /* 1320-1346 */
- { 0x001348, 0x00135A }, /* 1348-135A */
- { 0x001361, 0x00137C }, /* 1361-137C */
- { 0x0013A0, 0x0013F4 }, /* 13A0-13F4 */
- { 0x001401, 0x001676 }, /* 1401-1676 */
- { 0x001681, 0x00169A }, /* 1681-169A */
- { 0x0016A0, 0x0016F0 }, /* 16A0-16F0 */
- { 0x001700, 0x00170C }, /* 1700-170C */
- { 0x00170E, 0x001711 }, /* 170E-1711 */
- { 0x001720, 0x001731 }, /* 1720-1731 */
- { 0x001735, 0x001736 }, /* 1735-1736 */
- { 0x001740, 0x001751 }, /* 1740-1751 */
- { 0x001760, 0x00176C }, /* 1760-176C */
- { 0x00176E, 0x001770 }, /* 176E-1770 */
- { 0x001780, 0x0017B6 }, /* 1780-17B6 */
- { 0x0017BE, 0x0017C5 }, /* 17BE-17C5 */
- { 0x0017C7, 0x0017C8 }, /* 17C7-17C8 */
- { 0x0017D4, 0x0017DA }, /* 17D4-17DA */
- { 0x0017DC }, /* 17DC */
- { 0x0017E0, 0x0017E9 }, /* 17E0-17E9 */
- { 0x001810, 0x001819 }, /* 1810-1819 */
- { 0x001820, 0x001877 }, /* 1820-1877 */
- { 0x001880, 0x0018A8 }, /* 1880-18A8 */
- { 0x001E00, 0x001E9B }, /* 1E00-1E9B */
- { 0x001EA0, 0x001EF9 }, /* 1EA0-1EF9 */
- { 0x001F00, 0x001F15 }, /* 1F00-1F15 */
- { 0x001F18, 0x001F1D }, /* 1F18-1F1D */
- { 0x001F20, 0x001F45 }, /* 1F20-1F45 */
- { 0x001F48, 0x001F4D }, /* 1F48-1F4D */
- { 0x001F50, 0x001F57 }, /* 1F50-1F57 */
- { 0x001F59 }, /* 1F59 */
- { 0x001F5B }, /* 1F5B */
- { 0x001F5D }, /* 1F5D */
- { 0x001F5F, 0x001F7D }, /* 1F5F-1F7D */
- { 0x001F80, 0x001FB4 }, /* 1F80-1FB4 */
- { 0x001FB6, 0x001FBC }, /* 1FB6-1FBC */
- { 0x001FBE }, /* 1FBE */
- { 0x001FC2, 0x001FC4 }, /* 1FC2-1FC4 */
- { 0x001FC6, 0x001FCC }, /* 1FC6-1FCC */
- { 0x001FD0, 0x001FD3 }, /* 1FD0-1FD3 */
- { 0x001FD6, 0x001FDB }, /* 1FD6-1FDB */
- { 0x001FE0, 0x001FEC }, /* 1FE0-1FEC */
- { 0x001FF2, 0x001FF4 }, /* 1FF2-1FF4 */
- { 0x001FF6, 0x001FFC }, /* 1FF6-1FFC */
- { 0x00200E }, /* 200E */
- { 0x002071 }, /* 2071 */
- { 0x00207F }, /* 207F */
- { 0x002102 }, /* 2102 */
- { 0x002107 }, /* 2107 */
- { 0x00210A, 0x002113 }, /* 210A-2113 */
- { 0x002115 }, /* 2115 */
- { 0x002119, 0x00211D }, /* 2119-211D */
- { 0x002124 }, /* 2124 */
- { 0x002126 }, /* 2126 */
- { 0x002128 }, /* 2128 */
- { 0x00212A, 0x00212D }, /* 212A-212D */
- { 0x00212F, 0x002131 }, /* 212F-2131 */
- { 0x002133, 0x002139 }, /* 2133-2139 */
- { 0x00213D, 0x00213F }, /* 213D-213F */
- { 0x002145, 0x002149 }, /* 2145-2149 */
- { 0x002160, 0x002183 }, /* 2160-2183 */
- { 0x002336, 0x00237A }, /* 2336-237A */
- { 0x002395 }, /* 2395 */
- { 0x00249C, 0x0024E9 }, /* 249C-24E9 */
- { 0x003005, 0x003007 }, /* 3005-3007 */
- { 0x003021, 0x003029 }, /* 3021-3029 */
- { 0x003031, 0x003035 }, /* 3031-3035 */
- { 0x003038, 0x00303C }, /* 3038-303C */
- { 0x003041, 0x003096 }, /* 3041-3096 */
- { 0x00309D, 0x00309F }, /* 309D-309F */
- { 0x0030A1, 0x0030FA }, /* 30A1-30FA */
- { 0x0030FC, 0x0030FF }, /* 30FC-30FF */
- { 0x003105, 0x00312C }, /* 3105-312C */
- { 0x003131, 0x00318E }, /* 3131-318E */
- { 0x003190, 0x0031B7 }, /* 3190-31B7 */
- { 0x0031F0, 0x00321C }, /* 31F0-321C */
- { 0x003220, 0x003243 }, /* 3220-3243 */
- { 0x003260, 0x00327B }, /* 3260-327B */
- { 0x00327F, 0x0032B0 }, /* 327F-32B0 */
- { 0x0032C0, 0x0032CB }, /* 32C0-32CB */
- { 0x0032D0, 0x0032FE }, /* 32D0-32FE */
- { 0x003300, 0x003376 }, /* 3300-3376 */
- { 0x00337B, 0x0033DD }, /* 337B-33DD */
- { 0x0033E0, 0x0033FE }, /* 33E0-33FE */
- { 0x003400, 0x004DB5 }, /* 3400-4DB5 */
- { 0x004E00, 0x009FA5 }, /* 4E00-9FA5 */
- { 0x00A000, 0x00A48C }, /* A000-A48C */
- { 0x00AC00, 0x00D7A3 }, /* AC00-D7A3 */
- { 0x00D800, 0x00FA2D }, /* D800-FA2D */
- { 0x00FA30, 0x00FA6A }, /* FA30-FA6A */
- { 0x00FB00, 0x00FB06 }, /* FB00-FB06 */
- { 0x00FB13, 0x00FB17 }, /* FB13-FB17 */
- { 0x00FF21, 0x00FF3A }, /* FF21-FF3A */
- { 0x00FF41, 0x00FF5A }, /* FF41-FF5A */
- { 0x00FF66, 0x00FFBE }, /* FF66-FFBE */
- { 0x00FFC2, 0x00FFC7 }, /* FFC2-FFC7 */
- { 0x00FFCA, 0x00FFCF }, /* FFCA-FFCF */
- { 0x00FFD2, 0x00FFD7 }, /* FFD2-FFD7 */
- { 0x00FFDA, 0x00FFDC }, /* FFDA-FFDC */
- { 0x010300, 0x01031E }, /* 10300-1031E */
- { 0x010320, 0x010323 }, /* 10320-10323 */
- { 0x010330, 0x01034A }, /* 10330-1034A */
- { 0x010400, 0x010425 }, /* 10400-10425 */
- { 0x010428, 0x01044D }, /* 10428-1044D */
- { 0x01D000, 0x01D0F5 }, /* 1D000-1D0F5 */
- { 0x01D100, 0x01D126 }, /* 1D100-1D126 */
- { 0x01D12A, 0x01D166 }, /* 1D12A-1D166 */
- { 0x01D16A, 0x01D172 }, /* 1D16A-1D172 */
- { 0x01D183, 0x01D184 }, /* 1D183-1D184 */
- { 0x01D18C, 0x01D1A9 }, /* 1D18C-1D1A9 */
- { 0x01D1AE, 0x01D1DD }, /* 1D1AE-1D1DD */
- { 0x01D400, 0x01D454 }, /* 1D400-1D454 */
- { 0x01D456, 0x01D49C }, /* 1D456-1D49C */
- { 0x01D49E, 0x01D49F }, /* 1D49E-1D49F */
- { 0x01D4A2 }, /* 1D4A2 */
- { 0x01D4A5, 0x01D4A6 }, /* 1D4A5-1D4A6 */
- { 0x01D4A9, 0x01D4AC }, /* 1D4A9-1D4AC */
- { 0x01D4AE, 0x01D4B9 }, /* 1D4AE-1D4B9 */
- { 0x01D4BB }, /* 1D4BB */
- { 0x01D4BD, 0x01D4C0 }, /* 1D4BD-1D4C0 */
- { 0x01D4C2, 0x01D4C3 }, /* 1D4C2-1D4C3 */
- { 0x01D4C5, 0x01D505 }, /* 1D4C5-1D505 */
- { 0x01D507, 0x01D50A }, /* 1D507-1D50A */
- { 0x01D50D, 0x01D514 }, /* 1D50D-1D514 */
- { 0x01D516, 0x01D51C }, /* 1D516-1D51C */
- { 0x01D51E, 0x01D539 }, /* 1D51E-1D539 */
- { 0x01D53B, 0x01D53E }, /* 1D53B-1D53E */
- { 0x01D540, 0x01D544 }, /* 1D540-1D544 */
- { 0x01D546 }, /* 1D546 */
- { 0x01D54A, 0x01D550 }, /* 1D54A-1D550 */
- { 0x01D552, 0x01D6A3 }, /* 1D552-1D6A3 */
- { 0x01D6A8, 0x01D7C9 }, /* 1D6A8-1D7C9 */
- { 0x020000, 0x02A6D6 }, /* 20000-2A6D6 */
- { 0x02F800, 0x02FA1D }, /* 2F800-2FA1D */
- { 0x0F0000, 0x0FFFFD }, /* F0000-FFFFD */
- { 0x100000, 0x10FFFD }, /* 100000-10FFFD */
- { 0 },
-};
-
diff --git a/3rdParty/LibIDN/src/stringprep.c b/3rdParty/LibIDN/src/stringprep.c
deleted file mode 100644
index 96fa316..0000000
--- a/3rdParty/LibIDN/src/stringprep.c
+++ /dev/null
@@ -1,675 +0,0 @@
-/* stringprep.c --- Core stringprep implementation.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "stringprep.h"
-
-static ssize_t
-stringprep_find_character_in_table (uint32_t ucs4,
- const Stringprep_table_element * table)
-{
- ssize_t i;
-
- /* This is where typical uses of Libidn spends very close to all CPU
- time and causes most cache misses. One could easily do a binary
- search instead. Before rewriting this, I want hard evidence this
- slowness is at all relevant in typical applications. (I don't
- dispute optimization may improve matters significantly, I'm
- mostly interested in having someone give real-world benchmark on
- the impact of libidn.) */
-
- for (i = 0; table[i].start || table[i].end; i++)
- if (ucs4 >= table[i].start &&
- ucs4 <= (table[i].end ? table[i].end : table[i].start))
- return i;
-
- return -1;
-}
-
-static ssize_t
-stringprep_find_string_in_table (uint32_t * ucs4,
- size_t ucs4len,
- size_t * tablepos,
- const Stringprep_table_element * table)
-{
- size_t j;
- ssize_t pos;
-
- for (j = 0; j < ucs4len; j++)
- if ((pos = stringprep_find_character_in_table (ucs4[j], table)) != -1)
- {
- if (tablepos)
- *tablepos = pos;
- return j;
- }
-
- return -1;
-}
-
-static int
-stringprep_apply_table_to_string (uint32_t * ucs4,
- size_t * ucs4len,
- size_t maxucs4len,
- const Stringprep_table_element * table)
-{
- ssize_t pos;
- size_t i, maplen;
-
- while ((pos = stringprep_find_string_in_table (ucs4, *ucs4len,
- &i, table)) != -1)
- {
- for (maplen = STRINGPREP_MAX_MAP_CHARS;
- maplen > 0 && table[i].map[maplen - 1] == 0; maplen--)
- ;
-
- if (*ucs4len - 1 + maplen >= maxucs4len)
- return STRINGPREP_TOO_SMALL_BUFFER;
-
- memmove (&ucs4[pos + maplen], &ucs4[pos + 1],
- sizeof (uint32_t) * (*ucs4len - pos - 1));
- memcpy (&ucs4[pos], table[i].map, sizeof (uint32_t) * maplen);
- *ucs4len = *ucs4len - 1 + maplen;
- }
-
- return STRINGPREP_OK;
-}
-
-#define INVERTED(x) ((x) & ((~0UL) >> 1))
-#define UNAPPLICAPLEFLAGS(flags, profileflags) \
- ((!INVERTED(profileflags) && !(profileflags & flags) && profileflags) || \
- ( INVERTED(profileflags) && (profileflags & flags)))
-
-/**
- * stringprep_4i - prepare internationalized string
- * @ucs4: input/output array with string to prepare.
- * @len: on input, length of input array with Unicode code points,
- * on exit, length of output array with Unicode code points.
- * @maxucs4len: maximum length of input/output array.
- * @flags: a #Stringprep_profile_flags value, or 0.
- * @profile: pointer to #Stringprep_profile to use.
- *
- * Prepare the input UCS-4 string according to the stringprep profile,
- * and write back the result to the input string.
- *
- * The input is not required to be zero terminated (@ucs4[@len] = 0).
- * The output will not be zero terminated unless @ucs4[@len] = 0.
- * Instead, see stringprep_4zi() if your input is zero terminated or
- * if you want the output to be.
- *
- * Since the stringprep operation can expand the string, @maxucs4len
- * indicate how large the buffer holding the string is. This function
- * will not read or write to code points outside that size.
- *
- * The @flags are one of #Stringprep_profile_flags values, or 0.
- *
- * The @profile contain the #Stringprep_profile instructions to
- * perform. Your application can define new profiles, possibly
- * re-using the generic stringprep tables that always will be part of
- * the library, or use one of the currently supported profiles.
- *
- * Return value: Returns %STRINGPREP_OK iff successful, or an
- * #Stringprep_rc error code.
- **/
-int
-stringprep_4i (uint32_t * ucs4, size_t * len, size_t maxucs4len,
- Stringprep_profile_flags flags,
- const Stringprep_profile * profile)
-{
- size_t i, j;
- ssize_t k;
- size_t ucs4len = *len;
- int rc;
-
- for (i = 0; profile[i].operation; i++)
- {
- switch (profile[i].operation)
- {
- case STRINGPREP_NFKC:
- {
- uint32_t *q = 0;
-
- if (UNAPPLICAPLEFLAGS (flags, profile[i].flags))
- break;
-
- if (flags & STRINGPREP_NO_NFKC && !profile[i].flags)
- /* Profile requires NFKC, but callee asked for no NFKC. */
- return STRINGPREP_FLAG_ERROR;
-
- q = stringprep_ucs4_nfkc_normalize (ucs4, ucs4len);
- if (!q)
- return STRINGPREP_NFKC_FAILED;
-
- for (ucs4len = 0; q[ucs4len]; ucs4len++)
- ;
-
- if (ucs4len >= maxucs4len)
- {
- free (q);
- return STRINGPREP_TOO_SMALL_BUFFER;
- }
-
- memcpy (ucs4, q, ucs4len * sizeof (ucs4[0]));
-
- free (q);
- }
- break;
-
- case STRINGPREP_PROHIBIT_TABLE:
- k = stringprep_find_string_in_table (ucs4, ucs4len,
- NULL, profile[i].table);
- if (k != -1)
- return STRINGPREP_CONTAINS_PROHIBITED;
- break;
-
- case STRINGPREP_UNASSIGNED_TABLE:
- if (UNAPPLICAPLEFLAGS (flags, profile[i].flags))
- break;
- if (flags & STRINGPREP_NO_UNASSIGNED)
- {
- k = stringprep_find_string_in_table
- (ucs4, ucs4len, NULL, profile[i].table);
- if (k != -1)
- return STRINGPREP_CONTAINS_UNASSIGNED;
- }
- break;
-
- case STRINGPREP_MAP_TABLE:
- if (UNAPPLICAPLEFLAGS (flags, profile[i].flags))
- break;
- rc = stringprep_apply_table_to_string
- (ucs4, &ucs4len, maxucs4len, profile[i].table);
- if (rc != STRINGPREP_OK)
- return rc;
- break;
-
- case STRINGPREP_BIDI_PROHIBIT_TABLE:
- case STRINGPREP_BIDI_RAL_TABLE:
- case STRINGPREP_BIDI_L_TABLE:
- break;
-
- case STRINGPREP_BIDI:
- {
- int done_prohibited = 0;
- int done_ral = 0;
- int done_l = 0;
- size_t contains_ral = SIZE_MAX;
- size_t contains_l = SIZE_MAX;
-
- for (j = 0; profile[j].operation; j++)
- if (profile[j].operation == STRINGPREP_BIDI_PROHIBIT_TABLE)
- {
- done_prohibited = 1;
- k = stringprep_find_string_in_table (ucs4, ucs4len,
- NULL,
- profile[j].table);
- if (k != -1)
- return STRINGPREP_BIDI_CONTAINS_PROHIBITED;
- }
- else if (profile[j].operation == STRINGPREP_BIDI_RAL_TABLE)
- {
- done_ral = 1;
- if (stringprep_find_string_in_table
- (ucs4, ucs4len, NULL, profile[j].table) != -1)
- contains_ral = j;
- }
- else if (profile[j].operation == STRINGPREP_BIDI_L_TABLE)
- {
- done_l = 1;
- if (stringprep_find_string_in_table
- (ucs4, ucs4len, NULL, profile[j].table) != -1)
- contains_l = j;
- }
-
- if (!done_prohibited || !done_ral || !done_l)
- return STRINGPREP_PROFILE_ERROR;
-
- if (contains_ral != SIZE_MAX && contains_l != SIZE_MAX)
- return STRINGPREP_BIDI_BOTH_L_AND_RAL;
-
- if (contains_ral != SIZE_MAX)
- {
- if (!(stringprep_find_character_in_table
- (ucs4[0], profile[contains_ral].table) != -1 &&
- stringprep_find_character_in_table
- (ucs4[ucs4len - 1], profile[contains_ral].table) != -1))
- return STRINGPREP_BIDI_LEADTRAIL_NOT_RAL;
- }
- }
- break;
-
- default:
- return STRINGPREP_PROFILE_ERROR;
- break;
- }
- }
-
- *len = ucs4len;
-
- return STRINGPREP_OK;
-}
-
-static int
-stringprep_4zi_1 (uint32_t * ucs4, size_t ucs4len, size_t maxucs4len,
- Stringprep_profile_flags flags,
- const Stringprep_profile * profile)
-{
- int rc;
-
- rc = stringprep_4i (ucs4, &ucs4len, maxucs4len, flags, profile);
- if (rc != STRINGPREP_OK)
- return rc;
-
- if (ucs4len >= maxucs4len)
- return STRINGPREP_TOO_SMALL_BUFFER;
-
- ucs4[ucs4len] = 0;
-
- return STRINGPREP_OK;
-}
-
-/**
- * stringprep_4zi - prepare internationalized string
- * @ucs4: input/output array with zero terminated string to prepare.
- * @maxucs4len: maximum length of input/output array.
- * @flags: a #Stringprep_profile_flags value, or 0.
- * @profile: pointer to #Stringprep_profile to use.
- *
- * Prepare the input zero terminated UCS-4 string according to the
- * stringprep profile, and write back the result to the input string.
- *
- * Since the stringprep operation can expand the string, @maxucs4len
- * indicate how large the buffer holding the string is. This function
- * will not read or write to code points outside that size.
- *
- * The @flags are one of #Stringprep_profile_flags values, or 0.
- *
- * The @profile contain the #Stringprep_profile instructions to
- * perform. Your application can define new profiles, possibly
- * re-using the generic stringprep tables that always will be part of
- * the library, or use one of the currently supported profiles.
- *
- * Return value: Returns %STRINGPREP_OK iff successful, or an
- * #Stringprep_rc error code.
- **/
-int
-stringprep_4zi (uint32_t * ucs4, size_t maxucs4len,
- Stringprep_profile_flags flags,
- const Stringprep_profile * profile)
-{
- size_t ucs4len;
-
- for (ucs4len = 0; ucs4len < maxucs4len && ucs4[ucs4len] != 0; ucs4len++)
- ;
-
- return stringprep_4zi_1 (ucs4, ucs4len, maxucs4len, flags, profile);
-}
-
-/**
- * stringprep - prepare internationalized string
- * @in: input/ouput array with string to prepare.
- * @maxlen: maximum length of input/output array.
- * @flags: a #Stringprep_profile_flags value, or 0.
- * @profile: pointer to #Stringprep_profile to use.
- *
- * Prepare the input zero terminated UTF-8 string according to the
- * stringprep profile, and write back the result to the input string.
- *
- * Note that you must convert strings entered in the systems locale
- * into UTF-8 before using this function, see
- * stringprep_locale_to_utf8().
- *
- * Since the stringprep operation can expand the string, @maxlen
- * indicate how large the buffer holding the string is. This function
- * will not read or write to characters outside that size.
- *
- * The @flags are one of #Stringprep_profile_flags values, or 0.
- *
- * The @profile contain the #Stringprep_profile instructions to
- * perform. Your application can define new profiles, possibly
- * re-using the generic stringprep tables that always will be part of
- * the library, or use one of the currently supported profiles.
- *
- * Return value: Returns %STRINGPREP_OK iff successful, or an error code.
- **/
-int
-stringprep (char *in,
- size_t maxlen,
- Stringprep_profile_flags flags,
- const Stringprep_profile * profile)
-{
- int rc;
- char *utf8 = NULL;
- uint32_t *ucs4 = NULL;
- size_t ucs4len, maxucs4len, adducs4len = 50;
-
- do
- {
- uint32_t *newp;
-
- if (ucs4)
- free (ucs4);
- ucs4 = stringprep_utf8_to_ucs4 (in, -1, &ucs4len);
- maxucs4len = ucs4len + adducs4len;
- newp = realloc (ucs4, maxucs4len * sizeof (uint32_t));
- if (!newp)
- {
- free (ucs4);
- return STRINGPREP_MALLOC_ERROR;
- }
- ucs4 = newp;
-
- rc = stringprep_4i (ucs4, &ucs4len, maxucs4len, flags, profile);
- adducs4len += 50;
- }
- while (rc == STRINGPREP_TOO_SMALL_BUFFER);
- if (rc != STRINGPREP_OK)
- {
- free (ucs4);
- return rc;
- }
-
- utf8 = stringprep_ucs4_to_utf8 (ucs4, ucs4len, 0, 0);
- free (ucs4);
- if (!utf8)
- return STRINGPREP_MALLOC_ERROR;
-
- if (strlen (utf8) >= maxlen)
- {
- free (utf8);
- return STRINGPREP_TOO_SMALL_BUFFER;
- }
-
- strcpy (in, utf8); /* flawfinder: ignore */
-
- free (utf8);
-
- return STRINGPREP_OK;
-}
-
-/**
- * stringprep_profile - prepare internationalized string
- * @in: input array with UTF-8 string to prepare.
- * @out: output variable with pointer to newly allocate string.
- * @profile: name of stringprep profile to use.
- * @flags: a #Stringprep_profile_flags value, or 0.
- *
- * Prepare the input zero terminated UTF-8 string according to the
- * stringprep profile, and return the result in a newly allocated
- * variable.
- *
- * Note that you must convert strings entered in the systems locale
- * into UTF-8 before using this function, see
- * stringprep_locale_to_utf8().
- *
- * The output @out variable must be deallocated by the caller.
- *
- * The @flags are one of #Stringprep_profile_flags values, or 0.
- *
- * The @profile specifies the name of the stringprep profile to use.
- * It must be one of the internally supported stringprep profiles.
- *
- * Return value: Returns %STRINGPREP_OK iff successful, or an error code.
- **/
-int
-stringprep_profile (const char *in,
- char **out,
- const char *profile, Stringprep_profile_flags flags)
-{
- const Stringprep_profiles *p;
- char *str = NULL;
- size_t len = strlen (in) + 1;
- int rc;
-
- for (p = &stringprep_profiles[0]; p->name; p++)
- if (strcmp (p->name, profile) == 0)
- break;
-
- if (!p || !p->name || !p->tables)
- return STRINGPREP_UNKNOWN_PROFILE;
-
- do
- {
- if (str)
- free (str);
- str = (char *) malloc (len);
- if (str == NULL)
- return STRINGPREP_MALLOC_ERROR;
-
- strcpy (str, in);
-
- rc = stringprep (str, len, flags, p->tables);
- len += 50;
- }
- while (rc == STRINGPREP_TOO_SMALL_BUFFER);
-
- if (rc == STRINGPREP_OK)
- *out = str;
- else
- free (str);
-
- return rc;
-}
-
-/*! \mainpage GNU Internationalized Domain Name Library
- *
- * \section intro Introduction
- *
- * GNU Libidn is an implementation of the Stringprep, Punycode and IDNA
- * specifications defined by the IETF Internationalized Domain Names
- * (IDN) working group, used for internationalized domain names. The
- * package is available under the GNU Lesser General Public License.
- *
- * The library contains a generic Stringprep implementation that does
- * Unicode 3.2 NFKC normalization, mapping and prohibitation of
- * characters, and bidirectional character handling. Profiles for
- * Nameprep, iSCSI, SASL and XMPP are included. Punycode and ASCII
- * Compatible Encoding (ACE) via IDNA are supported. A mechanism to
- * define Top-Level Domain (TLD) specific validation tables, and to
- * compare strings against those tables, is included. Default tables
- * for some TLDs are also included.
- *
- * The Stringprep API consists of two main functions, one for
- * converting data from the system's native representation into UTF-8,
- * and one function to perform the Stringprep processing. Adding a
- * new Stringprep profile for your application within the API is
- * straightforward. The Punycode API consists of one encoding
- * function and one decoding function. The IDNA API consists of the
- * ToASCII and ToUnicode functions, as well as an high-level interface
- * for converting entire domain names to and from the ACE encoded
- * form. The TLD API consists of one set of functions to extract the
- * TLD name from a domain string, one set of functions to locate the
- * proper TLD table to use based on the TLD name, and core functions
- * to validate a string against a TLD table, and some utility wrappers
- * to perform all the steps in one call.
- *
- * The library is used by, e.g., GNU SASL and Shishi to process user
- * names and passwords. Libidn can be built into GNU Libc to enable a
- * new system-wide getaddrinfo() flag for IDN processing.
- *
- * Libidn is developed for the GNU/Linux system, but runs on over 20 Unix
- * platforms (including Solaris, IRIX, AIX, and Tru64) and Windows.
- * Libidn is written in C and (parts of) the API is accessible from C,
- * C++, Emacs Lisp, Python and Java.
- *
- * The project web page:\n
- * http://www.gnu.org/software/libidn/
- *
- * The software archive:\n
- * ftp://alpha.gnu.org/pub/gnu/libidn/
- *
- * For more information see:\n
- * http://www.ietf.org/html.charters/idn-charter.html\n
- * http://www.ietf.org/rfc/rfc3454.txt (stringprep specification)\n
- * http://www.ietf.org/rfc/rfc3490.txt (idna specification)\n
- * http://www.ietf.org/rfc/rfc3491.txt (nameprep specification)\n
- * http://www.ietf.org/rfc/rfc3492.txt (punycode specification)\n
- * http://www.ietf.org/internet-drafts/draft-ietf-ips-iscsi-string-prep-04.txt\n
- * http://www.ietf.org/internet-drafts/draft-ietf-krb-wg-utf8-profile-01.txt\n
- * http://www.ietf.org/internet-drafts/draft-ietf-sasl-anon-00.txt\n
- * http://www.ietf.org/internet-drafts/draft-ietf-sasl-saslprep-00.txt\n
- * http://www.ietf.org/internet-drafts/draft-ietf-xmpp-nodeprep-01.txt\n
- * http://www.ietf.org/internet-drafts/draft-ietf-xmpp-resourceprep-01.txt\n
- *
- * Further information and paid contract development:\n
- * Simon Josefsson <simon@josefsson.org>
- *
- * \section examples Examples
- *
- * \include example.c
- * \include example3.c
- * \include example4.c
- * \include example5.c
- */
-
-/**
- * STRINGPREP_VERSION
- *
- * String defined via CPP denoting the header file version number.
- * Used together with stringprep_check_version() to verify header file
- * and run-time library consistency.
- */
-
-/**
- * STRINGPREP_MAX_MAP_CHARS
- *
- * Maximum number of code points that can replace a single code point,
- * during stringprep mapping.
- */
-
-/**
- * Stringprep_rc:
- * @STRINGPREP_OK: Successful operation. This value is guaranteed to
- * always be zero, the remaining ones are only guaranteed to hold
- * non-zero values, for logical comparison purposes.
- * @STRINGPREP_CONTAINS_UNASSIGNED: String contain unassigned Unicode
- * code points, which is forbidden by the profile.
- * @STRINGPREP_CONTAINS_PROHIBITED: String contain code points
- * prohibited by the profile.
- * @STRINGPREP_BIDI_BOTH_L_AND_RAL: String contain code points with
- * conflicting bidirection category.
- * @STRINGPREP_BIDI_LEADTRAIL_NOT_RAL: Leading and trailing character
- * in string not of proper bidirectional category.
- * @STRINGPREP_BIDI_CONTAINS_PROHIBITED: Contains prohibited code
- * points detected by bidirectional code.
- * @STRINGPREP_TOO_SMALL_BUFFER: Buffer handed to function was too
- * small. This usually indicate a problem in the calling
- * application.
- * @STRINGPREP_PROFILE_ERROR: The stringprep profile was inconsistent.
- * This usually indicate an internal error in the library.
- * @STRINGPREP_FLAG_ERROR: The supplied flag conflicted with profile.
- * This usually indicate a problem in the calling application.
- * @STRINGPREP_UNKNOWN_PROFILE: The supplied profile name was not
- * known to the library.
- * @STRINGPREP_NFKC_FAILED: The Unicode NFKC operation failed. This
- * usually indicate an internal error in the library.
- * @STRINGPREP_MALLOC_ERROR: The malloc() was out of memory. This is
- * usually a fatal error.
- *
- * Enumerated return codes of stringprep(), stringprep_profile()
- * functions (and macros using those functions). The value 0 is
- * guaranteed to always correspond to success.
- */
-
-/**
- * Stringprep_profile_flags:
- * @STRINGPREP_NO_NFKC: Disable the NFKC normalization, as well as
- * selecting the non-NFKC case folding tables. Usually the profile
- * specifies BIDI and NFKC settings, and applications should not
- * override it unless in special situations.
- * @STRINGPREP_NO_BIDI: Disable the BIDI step. Usually the profile
- * specifies BIDI and NFKC settings, and applications should not
- * override it unless in special situations.
- * @STRINGPREP_NO_UNASSIGNED: Make the library return with an error if
- * string contains unassigned characters according to profile.
- *
- * Stringprep profile flags.
- */
-
-/**
- * Stringprep_profile_steps:
- *
- * Various steps in the stringprep algorithm. You really want to
- * study the source code to understand this one. Only useful if you
- * want to add another profile.
- */
-
-/**
- * stringprep_nameprep:
- * @in: input/ouput array with string to prepare.
- * @maxlen: maximum length of input/output array.
- *
- * Prepare the input UTF-8 string according to the nameprep profile.
- * The AllowUnassigned flag is true, use
- * stringprep_nameprep_no_unassigned() if you want a false
- * AllowUnassigned. Returns 0 iff successful, or an error code.
- **/
-
-/**
- * stringprep_nameprep_no_unassigned:
- * @in: input/ouput array with string to prepare.
- * @maxlen: maximum length of input/output array.
- *
- * Prepare the input UTF-8 string according to the nameprep profile.
- * The AllowUnassigned flag is false, use stringprep_nameprep() for
- * true AllowUnassigned. Returns 0 iff successful, or an error code.
- **/
-
-/**
- * stringprep_iscsi:
- * @in: input/ouput array with string to prepare.
- * @maxlen: maximum length of input/output array.
- *
- * Prepare the input UTF-8 string according to the draft iSCSI
- * stringprep profile. Returns 0 iff successful, or an error code.
- **/
-
-/**
- * stringprep_plain:
- * @in: input/ouput array with string to prepare.
- * @maxlen: maximum length of input/output array.
- *
- * Prepare the input UTF-8 string according to the draft SASL
- * ANONYMOUS profile. Returns 0 iff successful, or an error code.
- **/
-
-/**
- * stringprep_xmpp_nodeprep:
- * @in: input/ouput array with string to prepare.
- * @maxlen: maximum length of input/output array.
- *
- * Prepare the input UTF-8 string according to the draft XMPP node
- * identifier profile. Returns 0 iff successful, or an error code.
- **/
-
-/**
- * stringprep_xmpp_resourceprep:
- * @in: input/ouput array with string to prepare.
- * @maxlen: maximum length of input/output array.
- *
- * Prepare the input UTF-8 string according to the draft XMPP resource
- * identifier profile. Returns 0 iff successful, or an error code.
- **/
diff --git a/3rdParty/LibIDN/src/stringprep.h b/3rdParty/LibIDN/src/stringprep.h
deleted file mode 100644
index fa822e8..0000000
--- a/3rdParty/LibIDN/src/stringprep.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/* stringprep.h --- Header file for stringprep functions.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#ifndef STRINGPREP_H
-# define STRINGPREP_H
-
-# include <stddef.h> /* size_t */
-# include <unistd.h> /* ssize_t */
-# include <idn-int.h> /* uint32_t */
-
-/* Libidn Windows DLL. Only needed when this file is used in Visual
- Studio. Export and import happens automatically in MinGW. */
-# ifndef IDNA_API
-# if defined(_MSC_VER) && !defined(IDNA_STATIC)
-# ifdef IDNA_EXPORTS
-# define IDNA_API __declspec(dllexport)
-# else
-# define IDNA_API __declspec(dllimport)
-# endif
-# else
-# define IDNA_API
-# endif
-# endif
-
-# ifdef __cplusplus
-extern "C"
-{
-# endif
-
-# define STRINGPREP_VERSION "1.11"
-
-/* Error codes. */
- typedef enum
- {
- STRINGPREP_OK = 0,
- /* Stringprep errors. */
- STRINGPREP_CONTAINS_UNASSIGNED = 1,
- STRINGPREP_CONTAINS_PROHIBITED = 2,
- STRINGPREP_BIDI_BOTH_L_AND_RAL = 3,
- STRINGPREP_BIDI_LEADTRAIL_NOT_RAL = 4,
- STRINGPREP_BIDI_CONTAINS_PROHIBITED = 5,
- /* Error in calling application. */
- STRINGPREP_TOO_SMALL_BUFFER = 100,
- STRINGPREP_PROFILE_ERROR = 101,
- STRINGPREP_FLAG_ERROR = 102,
- STRINGPREP_UNKNOWN_PROFILE = 103,
- /* Internal errors. */
- STRINGPREP_NFKC_FAILED = 200,
- STRINGPREP_MALLOC_ERROR = 201
- } Stringprep_rc;
-
-/* Flags used when calling stringprep(). */
- typedef enum
- {
- STRINGPREP_NO_NFKC = 1,
- STRINGPREP_NO_BIDI = 2,
- STRINGPREP_NO_UNASSIGNED = 4
- } Stringprep_profile_flags;
-
-/* Steps in a stringprep profile. */
- typedef enum
- {
- STRINGPREP_NFKC = 1,
- STRINGPREP_BIDI = 2,
- STRINGPREP_MAP_TABLE = 3,
- STRINGPREP_UNASSIGNED_TABLE = 4,
- STRINGPREP_PROHIBIT_TABLE = 5,
- STRINGPREP_BIDI_PROHIBIT_TABLE = 6,
- STRINGPREP_BIDI_RAL_TABLE = 7,
- STRINGPREP_BIDI_L_TABLE = 8
- } Stringprep_profile_steps;
-
-# define STRINGPREP_MAX_MAP_CHARS 4
-
- struct Stringprep_table_element
- {
- uint32_t start;
- uint32_t end; /* 0 if only one character */
- uint32_t map[STRINGPREP_MAX_MAP_CHARS]; /* NULL if end is not 0 */
- };
- typedef struct Stringprep_table_element Stringprep_table_element;
-
- struct Stringprep_table
- {
- Stringprep_profile_steps operation;
- Stringprep_profile_flags flags;
- const Stringprep_table_element *table;
- };
- typedef struct Stringprep_table Stringprep_profile;
-
- struct Stringprep_profiles
- {
- const char *name;
- const Stringprep_profile *tables;
- };
- typedef struct Stringprep_profiles Stringprep_profiles;
-
- extern IDNA_API const Stringprep_profiles stringprep_profiles[];
-
-/* Profiles */
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_A_1[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_B_1[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_B_2[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_B_3[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_1_1[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_1_2[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_2_1[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_2_2[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_3[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_4[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_5[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_6[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_7[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_8[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_9[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_D_1[];
- extern IDNA_API const Stringprep_table_element stringprep_rfc3454_D_2[];
-
- /* Nameprep */
-
- extern IDNA_API const Stringprep_profile stringprep_nameprep[];
-
-# define stringprep_nameprep(in, maxlen) \
- stringprep(in, maxlen, 0, stringprep_nameprep)
-
-# define stringprep_nameprep_no_unassigned(in, maxlen) \
- stringprep(in, maxlen, STRINGPREP_NO_UNASSIGNED, stringprep_nameprep)
-
- /* SASL */
-
- extern IDNA_API const Stringprep_profile stringprep_saslprep[];
- extern IDNA_API const Stringprep_profile stringprep_plain[];
- extern IDNA_API const Stringprep_profile stringprep_trace[];
-
-# define stringprep_plain(in, maxlen) \
- stringprep(in, maxlen, 0, stringprep_plain)
-
- /* Kerberos */
-
- extern IDNA_API const Stringprep_profile stringprep_kerberos5[];
-
-# define stringprep_kerberos5(in, maxlen) \
- stringprep(in, maxlen, 0, stringprep_kerberos5)
-
- /* XMPP */
-
- extern IDNA_API const Stringprep_profile stringprep_xmpp_nodeprep[];
- extern IDNA_API const Stringprep_profile stringprep_xmpp_resourceprep[];
- extern IDNA_API const Stringprep_table_element stringprep_xmpp_nodeprep_prohibit[];
-
-# define stringprep_xmpp_nodeprep(in, maxlen) \
- stringprep(in, maxlen, 0, stringprep_xmpp_nodeprep)
-# define stringprep_xmpp_resourceprep(in, maxlen) \
- stringprep(in, maxlen, 0, stringprep_xmpp_resourceprep)
-
- /* iSCSI */
-
- extern IDNA_API const Stringprep_profile stringprep_iscsi[];
-
-# define stringprep_iscsi(in, maxlen) \
- stringprep(in, maxlen, 0, stringprep_iscsi)
-
- /* API */
-
- extern IDNA_API int stringprep_4i (uint32_t * ucs4, size_t * len,
- size_t maxucs4len,
- Stringprep_profile_flags flags,
- const Stringprep_profile * profile);
- extern IDNA_API int stringprep_4zi (uint32_t * ucs4, size_t maxucs4len,
- Stringprep_profile_flags flags,
- const Stringprep_profile * profile);
- extern IDNA_API int stringprep (char *in, size_t maxlen,
- Stringprep_profile_flags flags,
- const Stringprep_profile * profile);
-
- extern IDNA_API int stringprep_profile (const char *in,
- char **out,
- const char *profile,
- Stringprep_profile_flags flags);
-
- extern IDNA_API const char *stringprep_strerror (Stringprep_rc rc);
-
- extern IDNA_API const char *stringprep_check_version (const char
- *req_version);
-
-/* Utility */
-
- extern IDNA_API int stringprep_unichar_to_utf8 (uint32_t c, char *outbuf);
- extern IDNA_API uint32_t stringprep_utf8_to_unichar (const char *p);
-
- extern IDNA_API uint32_t *stringprep_utf8_to_ucs4 (const char *str,
- ssize_t len,
- size_t * items_written);
- extern IDNA_API char *stringprep_ucs4_to_utf8 (const uint32_t * str,
- ssize_t len,
- size_t * items_read,
- size_t * items_written);
-
- extern IDNA_API char *stringprep_utf8_nfkc_normalize (const char *str,
- ssize_t len);
- extern IDNA_API uint32_t *stringprep_ucs4_nfkc_normalize (uint32_t * str,
- ssize_t len);
-
- extern IDNA_API const char *stringprep_locale_charset (void);
- extern IDNA_API char *stringprep_convert (const char *str,
- const char *to_codeset,
- const char *from_codeset);
- extern IDNA_API char *stringprep_locale_to_utf8 (const char *str);
- extern IDNA_API char *stringprep_utf8_to_locale (const char *str);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /* STRINGPREP_H */
diff --git a/3rdParty/LibIDN/src/toutf8.c b/3rdParty/LibIDN/src/toutf8.c
deleted file mode 100644
index 0d82717..0000000
--- a/3rdParty/LibIDN/src/toutf8.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* toutf8.c --- Convert strings from system locale into UTF-8.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson
- *
- * This file is part of GNU Libidn.
- *
- * GNU Libidn is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GNU Libidn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GNU Libidn; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-/* Get prototypes. */
-#include "stringprep.h"
-
-/* Get fprintf. */
-#include <stdio.h>
-
-/* Get getenv. */
-#include <stdlib.h>
-
-/* Get strlen. */
-#include <string.h>
-
-/* Get iconv_string. */
-#include "striconv.h"
-
-#ifdef _LIBC
-# define HAVE_ICONV 1
-# define HAVE_LOCALE_H 1
-# define HAVE_LANGINFO_CODESET 1
-#endif
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-#if HAVE_LANGINFO_CODESET
-# include <langinfo.h>
-#endif
-
-#ifdef _LIBC
-# define stringprep_locale_charset() nl_langinfo (CODESET)
-#else
-/**
- * stringprep_locale_charset - return charset used in current locale
- *
- * Find out current locale charset. The function respect the CHARSET
- * environment variable, but typically uses nl_langinfo(CODESET) when
- * it is supported. It fall back on "ASCII" if CHARSET isn't set and
- * nl_langinfo isn't supported or return anything.
- *
- * Note that this function return the application's locale's preferred
- * charset (or thread's locale's preffered charset, if your system
- * support thread-specific locales). It does not return what the
- * system may be using. Thus, if you receive data from external
- * sources you cannot in general use this function to guess what
- * charset it is encoded in. Use stringprep_convert from the external
- * representation into the charset returned by this function, to have
- * data in the locale encoding.
- *
- * Return value: Return the character set used by the current locale.
- * It will never return NULL, but use "ASCII" as a fallback.
- **/
-const char *
-stringprep_locale_charset (void)
-{
- const char *charset = getenv ("CHARSET"); /* flawfinder: ignore */
-
- if (charset && *charset)
- return charset;
-
-# ifdef HAVE_LANGINFO_CODESET
- charset = nl_langinfo (CODESET);
-
- if (charset && *charset)
- return charset;
-# endif
-
- return "ASCII";
-}
-#endif
-
-/**
- * stringprep_convert - encode string using new character set
- * @str: input zero-terminated string.
- * @to_codeset: name of destination character set.
- * @from_codeset: name of origin character set, as used by @str.
- *
- * Convert the string from one character set to another using the
- * system's iconv() function.
- *
- * Return value: Returns newly allocated zero-terminated string which
- * is @str transcoded into to_codeset.
- **/
-char *
-stringprep_convert (const char *str,
- const char *to_codeset, const char *from_codeset)
-{
-#if HAVE_ICONV
- return str_iconv (str, from_codeset, to_codeset);
-#else
- char *p;
- fprintf (stderr, "libidn: warning: libiconv not installed, cannot "
- "convert data to UTF-8\n");
- p = malloc (strlen (str) + 1);
- if (!p)
- return NULL;
- return strcpy (p, str);
-#endif
-}
-
-/**
- * stringprep_locale_to_utf8 - convert locale encoded string to UTF-8
- * @str: input zero terminated string.
- *
- * Convert string encoded in the locale's character set into UTF-8 by
- * using stringprep_convert().
- *
- * Return value: Returns newly allocated zero-terminated string which
- * is @str transcoded into UTF-8.
- **/
-char *
-stringprep_locale_to_utf8 (const char *str)
-{
- return stringprep_convert (str, "UTF-8", stringprep_locale_charset ());
-}
-
-/**
- * stringprep_utf8_to_locale - encode UTF-8 string to locale encoding
- * @str: input zero terminated string.
- *
- * Convert string encoded in UTF-8 into the locale's character set by
- * using stringprep_convert().
- *
- * Return value: Returns newly allocated zero-terminated string which
- * is @str transcoded into the locale's character set.
- **/
-char *
-stringprep_utf8_to_locale (const char *str)
-{
- return stringprep_convert (str, stringprep_locale_charset (), "UTF-8");
-}
diff --git a/3rdParty/LibIDN/stubs/striconv.h b/3rdParty/LibIDN/stubs/striconv.h
deleted file mode 100644
index e69de29..0000000
--- a/3rdParty/LibIDN/stubs/striconv.h
+++ /dev/null
diff --git a/3rdParty/LibIDN/stubs/win32/inttypes.h b/3rdParty/LibIDN/stubs/win32/inttypes.h
deleted file mode 100644
index e69de29..0000000
--- a/3rdParty/LibIDN/stubs/win32/inttypes.h
+++ /dev/null
diff --git a/3rdParty/LibIDN/stubs/win32/stdint.h b/3rdParty/LibIDN/stubs/win32/stdint.h
deleted file mode 100644
index 6a57ff9..0000000
--- a/3rdParty/LibIDN/stubs/win32/stdint.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 2008 Free Software Foundation, Inc.
- Written by Adam Strzelecki <ono@java.pl>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation; either version 2.1,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#ifndef _AC_STDINT_H
-#define _AC_STDINT_H 1
-#ifndef _GENERATED_STDINT_H
-#define _GENERATED_STDINT_H
-
-#define uint8_t unsigned char
-#define uint16_t unsigned short
-#define uint32_t unsigned int
-#define int8_t signed char
-#define int16_t signed short
-#define int32_t signed int
-
-#define gint16 int16_t
-
-#ifdef _WIN64
-typedef __int64 ssize_t;
-#else
-typedef _W64 int ssize_t;
-#endif
-
-#endif
-#endif
diff --git a/3rdParty/LibIDN/stubs/win32/unistd.h b/3rdParty/LibIDN/stubs/win32/unistd.h
deleted file mode 100644
index 0d2bb16..0000000
--- a/3rdParty/LibIDN/stubs/win32/unistd.h
+++ /dev/null
@@ -1 +0,0 @@
-/* Dummy file to satisfy source file dependencies on Windows platform */
diff --git a/3rdParty/SCons b/3rdParty/SCons
new file mode 160000
+Subproject 3056da6ce23ced559497a07bd4444fb3a17b4db
diff --git a/3rdParty/SCons/scons-LICENSE b/3rdParty/SCons/scons-LICENSE
deleted file mode 100644
index 4ac2352..0000000
--- a/3rdParty/SCons/scons-LICENSE
+++ /dev/null
@@ -1,25 +0,0 @@
- Copyright and license for SCons - a software construction tool
-
- This copyright and license do not apply to any other software
- with which this software may have been included.
-
-Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/3rdParty/SCons/scons-README b/3rdParty/SCons/scons-README
deleted file mode 100644
index 89bc634..0000000
--- a/3rdParty/SCons/scons-README
+++ /dev/null
@@ -1,204 +0,0 @@
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-
- SCons - a software construction tool
-
-This is the scons-README file for a version of SCons packaged for local
-execution--that is, execution out of a specific local directory, without
-having to install SCons as a system-wide utility.
-
-You are likely reading this file in one of the following two situations:
-
- 1) You have unpacked an scons-local-{version} package and are
- examining the contents.
-
- In this case, you are presumably interested in using this
- package to include a local copy of SCons with some other
- software that you package, so that you can use SCons to build
- your software without forcing all of your users to have it fully
- installed. Instructions for this can be found below.
-
- If you are not looking to use SCons in this way, then please
- use either the scons-{version} package to install SCons on your
- system, or the scons-src-{version} package if you want the full
- source to SCons, including its packaging code and underlying
- tests and testing infrastructure.
-
- 2) This file was included in some other software package so that
- the package could be built using SCons.
-
- In this case, follow the instructions provided with the
- rest of the software package for how to use SCons to build
- and/or install the software. The file containing build and
- installation instructions will typically be named README or
- INSTALL.
-
-LATEST VERSION
-==============
-
-Before going further, you can check for the latest version of the
-scons-local package, or any SCons package, at the SCons download page:
-
- http://www.scons.org/download.html
-
-
-EXECUTION REQUIREMENTS
-======================
-
-Running SCons requires Python version 1.5.2 or later. There should be
-no other dependencies or requirements to run SCons.
-
-The default SCons configuration assumes use of the Microsoft Visual C++
-compiler suite on WIN32 systems, and assumes a C compiler named 'cc',
-a C++ compiler named 'c++', and a Fortran compiler named 'g77' (such
-as found in the GNU C compiler suite) on any other type of system.
-You may, of course, override these default values by appropriate
-configuration of Environment construction variables.
-
-
-INSTALLATION
-============
-
-Installation of this package should be as simple as unpacking the
-archive (either .tar.gz or .zip) in any directory (top-level or a
-subdirectory) within the software package with which you want to ship
-SCons.
-
-Once you have installed this package, you should write an SConstruct
-file at the top level of your source tree to build your software as you
-see fit.
-
-Then modify the build/install instructions for your package to instruct
-your users to execute SCons as follows (if you installed this package in
-your top-level directory):
-
- $ python scons.py
-
-Or (if, for example, you installed this package in a subdirectory named
-"scons"):
-
- $ python scons/scons.py
-
-That should be all you have to do. (If it isn't that simple, please let
-us know!)
-
-
-CONTENTS OF THIS PACKAGE
-========================
-
-This scons-local package consists of the following:
-
-scons-LICENSE
- A copy of the copyright and terms under which SCons is
- distributed (the Open Source Initiative-approved MIT license).
-
- A disclaimer has been added to the beginning to make clear that
- this license applies only to SCons, and not to any separate
- software you've written with which you're planning to package
- SCons.
-
-scons-README
- What you're looking at right now.
-
-scons-local-{version}/
- The SCons build engine. This is structured as a Python
- library.
-
-scons.py
- The SCons script itself. The script sets up the Python
- sys.path variable to use the build engine found in the
- scons-local-{version}/ directory in preference to any other
- SCons build engine installed on your system.
-
-
-DOCUMENTATION
-=============
-
-Because this package is intended to be included with other software by
-experienced users, we have not included any SCons documentation in this
-package (other than this scons-README file you're reading right now).
-
-If, however, you need documentation about SCons, then consult any of the
-following from the corresponding scons-{version} or scons-src-{version}
-package:
-
- The RELEASE.txt file (src/RELEASE.txt file in the
- scons-src-{version} package), which contains notes about this
- specific release, including known problems.
-
- The CHANGES.txt file (src/CHANGES.txt file in the
- scons-src-{version} package), which contains a list of changes
- since the previous release.
-
- The scons.1 man page (doc/man/scons.1 in the scons-src-{version}
- package), which contains a section of small examples for getting
- started using SCons.
-
-Additional documentation for SCons is available at:
-
- http://www.scons.org/doc.html
-
-
-LICENSING
-=========
-
-SCons is distributed under the MIT license, a full copy of which is
-available in the scons-LICENSE file in this package. The MIT license is
-an approved Open Source license, which means:
-
- This software is OSI Certified Open Source Software. OSI
- Certified is a certification mark of the Open Source Initiative.
-
-More information about OSI certifications and Open Source software is
-available at:
-
- http://www.opensource.org/
-
-
-REPORTING BUGS
-==============
-
-You can report bugs either by following the "Tracker - Bugs" link
-on the SCons project page:
-
- http://sourceforge.net/projects/scons/
-
-or by sending mail to the SCons developers mailing list:
-
- scons-devel@lists.sourceforge.net
-
-
-MAILING LISTS
-=============
-
-A mailing list for users of SCons is available. You may send questions
-or comments to the list at:
-
- scons-users@lists.sourceforge.net
-
-You may subscribe to the scons-users mailing list at:
-
- http://lists.sourceforge.net/lists/listinfo/scons-users
-
-
-FOR MORE INFORMATION
-====================
-
-Check the SCons web site at:
-
- http://www.scons.org/
-
-
-AUTHOR INFO
-===========
-
-Steven Knight
-knight at baldmt dot com
-http://www.baldmt.com/~knight/
-
-With plenty of help from the SCons Development team:
- Chad Austin
- Charles Crain
- Steve Leblanc
- Anthony Roach
- Terrel Shumway
-
diff --git a/3rdParty/SCons/scons-local/SCons/Action.py b/3rdParty/SCons/scons-local/SCons/Action.py
deleted file mode 100644
index 9535194..0000000
--- a/3rdParty/SCons/scons-local/SCons/Action.py
+++ /dev/null
@@ -1,1240 +0,0 @@
-"""SCons.Action
-
-This encapsulates information about executing any sort of action that
-can build one or more target Nodes (typically files) from one or more
-source Nodes (also typically files) given a specific Environment.
-
-The base class here is ActionBase. The base class supplies just a few
-OO utility methods and some generic methods for displaying information
-about an Action in response to the various commands that control printing.
-
-A second-level base class is _ActionAction. This extends ActionBase
-by providing the methods that can be used to show and perform an
-action. True Action objects will subclass _ActionAction; Action
-factory class objects will subclass ActionBase.
-
-The heavy lifting is handled by subclasses for the different types of
-actions we might execute:
-
- CommandAction
- CommandGeneratorAction
- FunctionAction
- ListAction
-
-The subclasses supply the following public interface methods used by
-other modules:
-
- __call__()
- THE public interface, "calling" an Action object executes the
- command or Python function. This also takes care of printing
- a pre-substitution command for debugging purposes.
-
- get_contents()
- Fetches the "contents" of an Action for signature calculation
- plus the varlist. This is what gets MD5 checksummed to decide
- if a target needs to be rebuilt because its action changed.
-
- genstring()
- Returns a string representation of the Action *without*
- command substitution, but allows a CommandGeneratorAction to
- generate the right action based on the specified target,
- source and env. This is used by the Signature subsystem
- (through the Executor) to obtain an (imprecise) representation
- of the Action operation for informative purposes.
-
-
-Subclasses also supply the following methods for internal use within
-this module:
-
- __str__()
- Returns a string approximation of the Action; no variable
- substitution is performed.
-
- execute()
- The internal method that really, truly, actually handles the
- execution of a command or Python function. This is used so
- that the __call__() methods can take care of displaying any
- pre-substitution representations, and *then* execute an action
- without worrying about the specific Actions involved.
-
- get_presig()
- Fetches the "contents" of a subclass for signature calculation.
- The varlist is added to this to produce the Action's contents.
-
- strfunction()
- Returns a substituted string representation of the Action.
- This is used by the _ActionAction.show() command to display the
- command/function that will be executed to generate the target(s).
-
-There is a related independent ActionCaller class that looks like a
-regular Action, and which serves as a wrapper for arbitrary functions
-that we want to let the user specify the arguments to now, but actually
-execute later (when an out-of-date check determines that it's needed to
-be executed, for example). Objects of this class are returned by an
-ActionFactory class that provides a __call__() method as a convenient
-way for wrapping up the functions.
-
-"""
-
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-__revision__ = "src/engine/SCons/Action.py 4043 2009/02/23 09:06:45 scons"
-
-import cPickle
-import dis
-import os
-import re
-import string
-import sys
-import subprocess
-
-from SCons.Debug import logInstanceCreation
-import SCons.Errors
-import SCons.Executor
-import SCons.Util
-import SCons.Subst
-
-# we use these a lot, so try to optimize them
-is_String = SCons.Util.is_String
-is_List = SCons.Util.is_List
-
-class _null:
- pass
-
-print_actions = 1
-execute_actions = 1
-print_actions_presub = 0
-
-def rfile(n):
- try:
- return n.rfile()
- except AttributeError:
- return n
-
-def default_exitstatfunc(s):
- return s
-
-try:
- SET_LINENO = dis.SET_LINENO
- HAVE_ARGUMENT = dis.HAVE_ARGUMENT
-except AttributeError:
- remove_set_lineno_codes = lambda x: x
-else:
- def remove_set_lineno_codes(code):
- result = []
- n = len(code)
- i = 0
- while i < n:
- c = code[i]
- op = ord(c)
- if op >= HAVE_ARGUMENT:
- if op != SET_LINENO:
- result.append(code[i:i+3])
- i = i+3
- else:
- result.append(c)
- i = i+1
- return string.join(result, '')
-
-strip_quotes = re.compile('^[\'"](.*)[\'"]$')
-
-
-def _callable_contents(obj):
- """Return the signature contents of a callable Python object.
- """
- try:
- # Test if obj is a method.
- return _function_contents(obj.im_func)
-
- except AttributeError:
- try:
- # Test if obj is a callable object.
- return _function_contents(obj.__call__.im_func)
-
- except AttributeError:
- try:
- # Test if obj is a code object.
- return _code_contents(obj)
-
- except AttributeError:
- # Test if obj is a function object.
- return _function_contents(obj)
-
-
-def _object_contents(obj):
- """Return the signature contents of any Python object.
-
- We have to handle the case where object contains a code object
- since it can be pickled directly.
- """
- try:
- # Test if obj is a method.
- return _function_contents(obj.im_func)
-
- except AttributeError:
- try:
- # Test if obj is a callable object.
- return _function_contents(obj.__call__.im_func)
-
- except AttributeError:
- try:
- # Test if obj is a code object.
- return _code_contents(obj)
-
- except AttributeError:
- try:
- # Test if obj is a function object.
- return _function_contents(obj)
-
- except AttributeError:
- # Should be a pickable Python object.
- try:
- return cPickle.dumps(obj)
- except (cPickle.PicklingError, TypeError):
- # This is weird, but it seems that nested classes
- # are unpickable. The Python docs say it should
- # always be a PicklingError, but some Python
- # versions seem to return TypeError. Just do
- # the best we can.
- return str(obj)
-
-
-def _code_contents(code):
- """Return the signature contents of a code object.
-
- By providing direct access to the code object of the
- function, Python makes this extremely easy. Hooray!
-
- Unfortunately, older versions of Python include line
- number indications in the compiled byte code. Boo!
- So we remove the line number byte codes to prevent
- recompilations from moving a Python function.
- """
-
- contents = []
-
- # The code contents depends on the number of local variables
- # but not their actual names.
- contents.append("%s,%s" % (code.co_argcount, len(code.co_varnames)))
- try:
- contents.append(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars)))
- except AttributeError:
- # Older versions of Python do not support closures.
- contents.append(",0,0")
-
- # The code contents depends on any constants accessed by the
- # function. Note that we have to call _object_contents on each
- # constants because the code object of nested functions can
- # show-up among the constants.
- #
- # Note that we also always ignore the first entry of co_consts
- # which contains the function doc string. We assume that the
- # function does not access its doc string.
- contents.append(',(' + string.join(map(_object_contents,code.co_consts[1:]),',') + ')')
-
- # The code contents depends on the variable names used to
- # accessed global variable, as changing the variable name changes
- # the variable actually accessed and therefore changes the
- # function result.
- contents.append(',(' + string.join(map(_object_contents,code.co_names),',') + ')')
-
-
- # The code contents depends on its actual code!!!
- contents.append(',(' + str(remove_set_lineno_codes(code.co_code)) + ')')
-
- return string.join(contents, '')
-
-
-def _function_contents(func):
- """Return the signature contents of a function."""
-
- contents = [_code_contents(func.func_code)]
-
- # The function contents depends on the value of defaults arguments
- if func.func_defaults:
- contents.append(',(' + string.join(map(_object_contents,func.func_defaults),',') + ')')
- else:
- contents.append(',()')
-
- # The function contents depends on the closure captured cell values.
- try:
- closure = func.func_closure or []
- except AttributeError:
- # Older versions of Python do not support closures.
- closure = []
-
- #xxx = [_object_contents(x.cell_contents) for x in closure]
- try:
- xxx = map(lambda x: _object_contents(x.cell_contents), closure)
- except AttributeError:
- xxx = []
- contents.append(',(' + string.join(xxx, ',') + ')')
-
- return string.join(contents, '')
-
-
-def _actionAppend(act1, act2):
- # This function knows how to slap two actions together.
- # Mainly, it handles ListActions by concatenating into
- # a single ListAction.
- a1 = Action(act1)
- a2 = Action(act2)
- if a1 is None or a2 is None:
- raise TypeError, "Cannot append %s to %s" % (type(act1), type(act2))
- if isinstance(a1, ListAction):
- if isinstance(a2, ListAction):
- return ListAction(a1.list + a2.list)
- else:
- return ListAction(a1.list + [ a2 ])
- else:
- if isinstance(a2, ListAction):
- return ListAction([ a1 ] + a2.list)
- else:
- return ListAction([ a1, a2 ])
-
-def _do_create_keywords(args, kw):
- """This converts any arguments after the action argument into
- their equivalent keywords and adds them to the kw argument.
- """
- v = kw.get('varlist', ())
- # prevent varlist="FOO" from being interpreted as ['F', 'O', 'O']
- if is_String(v): v = (v,)
- kw['varlist'] = tuple(v)
- if args:
- # turn positional args into equivalent keywords
- cmdstrfunc = args[0]
- if cmdstrfunc is None or is_String(cmdstrfunc):
- kw['cmdstr'] = cmdstrfunc
- elif callable(cmdstrfunc):
- kw['strfunction'] = cmdstrfunc
- else:
- raise SCons.Errors.UserError(
- 'Invalid command display variable type. '
- 'You must either pass a string or a callback which '
- 'accepts (target, source, env) as parameters.')
- if len(args) > 1:
- kw['varlist'] = args[1:] + kw['varlist']
- if kw.get('strfunction', _null) is not _null \
- and kw.get('cmdstr', _null) is not _null:
- raise SCons.Errors.UserError(
- 'Cannot have both strfunction and cmdstr args to Action()')
-
-def _do_create_action(act, kw):
- """This is the actual "implementation" for the
- Action factory method, below. This handles the
- fact that passing lists to Action() itself has
- different semantics than passing lists as elements
- of lists.
-
- The former will create a ListAction, the latter
- will create a CommandAction by converting the inner
- list elements to strings."""
-
- if isinstance(act, ActionBase):
- return act
-
- if is_List(act):
- #TODO(1.5) return CommandAction(act, **kw)
- return apply(CommandAction, (act,), kw)
-
- if callable(act):
- try:
- gen = kw['generator']
- del kw['generator']
- except KeyError:
- gen = 0
- if gen:
- action_type = CommandGeneratorAction
- else:
- action_type = FunctionAction
- return action_type(act, kw)
-
- if is_String(act):
- var=SCons.Util.get_environment_var(act)
- if var:
- # This looks like a string that is purely an Environment
- # variable reference, like "$FOO" or "${FOO}". We do
- # something special here...we lazily evaluate the contents
- # of that Environment variable, so a user could put something
- # like a function or a CommandGenerator in that variable
- # instead of a string.
- return LazyAction(var, kw)
- commands = string.split(str(act), '\n')
- if len(commands) == 1:
- #TODO(1.5) return CommandAction(commands[0], **kw)
- return apply(CommandAction, (commands[0],), kw)
- # The list of string commands may include a LazyAction, so we
- # reprocess them via _do_create_list_action.
- return _do_create_list_action(commands, kw)
- return None
-
-def _do_create_list_action(act, kw):
- """A factory for list actions. Convert the input list into Actions
- and then wrap them in a ListAction."""
- acts = []
- for a in act:
- aa = _do_create_action(a, kw)
- if aa is not None: acts.append(aa)
- if not acts:
- return ListAction([])
- elif len(acts) == 1:
- return acts[0]
- else:
- return ListAction(acts)
-
-def Action(act, *args, **kw):
- """A factory for action objects."""
- # Really simple: the _do_create_* routines do the heavy lifting.
- _do_create_keywords(args, kw)
- if is_List(act):
- return _do_create_list_action(act, kw)
- return _do_create_action(act, kw)
-
-class ActionBase:
- """Base class for all types of action objects that can be held by
- other objects (Builders, Executors, etc.) This provides the
- common methods for manipulating and combining those actions."""
-
- def __cmp__(self, other):
- return cmp(self.__dict__, other)
-
- def no_batch_key(self, env, target, source):
- return None
-
- batch_key = no_batch_key
-
- def genstring(self, target, source, env):
- return str(self)
-
- def get_contents(self, target, source, env):
- result = [ self.get_presig(target, source, env) ]
- # This should never happen, as the Action() factory should wrap
- # the varlist, but just in case an action is created directly,
- # we duplicate this check here.
- vl = self.varlist
- if is_String(vl): vl = (vl,)
- for v in vl:
- result.append(env.subst('${'+v+'}'))
- return string.join(result, '')
-
- def __add__(self, other):
- return _actionAppend(self, other)
-
- def __radd__(self, other):
- return _actionAppend(other, self)
-
- def presub_lines(self, env):
- # CommandGeneratorAction needs a real environment
- # in order to return the proper string here, since
- # it may call LazyAction, which looks up a key
- # in that env. So we temporarily remember the env here,
- # and CommandGeneratorAction will use this env
- # when it calls its _generate method.
- self.presub_env = env
- lines = string.split(str(self), '\n')
- self.presub_env = None # don't need this any more
- return lines
-
- def get_targets(self, env, executor):
- """
- Returns the type of targets ($TARGETS, $CHANGED_TARGETS) used
- by this action.
- """
- return self.targets
-
-class _ActionAction(ActionBase):
- """Base class for actions that create output objects."""
- def __init__(self, cmdstr=_null, strfunction=_null, varlist=(),
- presub=_null, chdir=None, exitstatfunc=None,
- batch_key=None, targets='$TARGETS',
- **kw):
- self.cmdstr = cmdstr
- if strfunction is not _null:
- if strfunction is None:
- self.cmdstr = None
- else:
- self.strfunction = strfunction
- self.varlist = varlist
- self.presub = presub
- self.chdir = chdir
- if not exitstatfunc:
- exitstatfunc = default_exitstatfunc
- self.exitstatfunc = exitstatfunc
-
- self.targets = targets
-
- if batch_key:
- if not callable(batch_key):
- # They have set batch_key, but not to their own
- # callable. The default behavior here will batch
- # *all* targets+sources using this action, separated
- # for each construction environment.
- def default_batch_key(self, env, target, source):
- return (id(self), id(env))
- batch_key = default_batch_key
- SCons.Util.AddMethod(self, batch_key, 'batch_key')
-
- def print_cmd_line(self, s, target, source, env):
- sys.stdout.write(s + "\n")
-
- def __call__(self, target, source, env,
- exitstatfunc=_null,
- presub=_null,
- show=_null,
- execute=_null,
- chdir=_null,
- executor=None):
- if not is_List(target):
- target = [target]
- if not is_List(source):
- source = [source]
-
- if presub is _null:
- presub = self.presub
- if presub is _null:
- presub = print_actions_presub
- if exitstatfunc is _null: exitstatfunc = self.exitstatfunc
- if show is _null: show = print_actions
- if execute is _null: execute = execute_actions
- if chdir is _null: chdir = self.chdir
- save_cwd = None
- if chdir:
- save_cwd = os.getcwd()
- try:
- chdir = str(chdir.abspath)
- except AttributeError:
- if not is_String(chdir):
- if executor:
- chdir = str(executor.batches[0].targets[0].dir)
- else:
- chdir = str(target[0].dir)
- if presub:
- if executor:
- target = executor.get_all_targets()
- source = executor.get_all_sources()
- t = string.join(map(str, target), ' and ')
- l = string.join(self.presub_lines(env), '\n ')
- out = "Building %s with action:\n %s\n" % (t, l)
- sys.stdout.write(out)
- cmd = None
- if show and self.strfunction:
- if executor:
- target = executor.get_all_targets()
- source = executor.get_all_sources()
- try:
- cmd = self.strfunction(target, source, env, executor)
- except TypeError:
- cmd = self.strfunction(target, source, env)
- if cmd:
- if chdir:
- cmd = ('os.chdir(%s)\n' % repr(chdir)) + cmd
- try:
- get = env.get
- except AttributeError:
- print_func = self.print_cmd_line
- else:
- print_func = get('PRINT_CMD_LINE_FUNC')
- if not print_func:
- print_func = self.print_cmd_line
- print_func(cmd, target, source, env)
- stat = 0
- if execute:
- if chdir:
- os.chdir(chdir)
- try:
- stat = self.execute(target, source, env, executor=executor)
- if isinstance(stat, SCons.Errors.BuildError):
- s = exitstatfunc(stat.status)
- if s:
- stat.status = s
- else:
- stat = s
- else:
- stat = exitstatfunc(stat)
- finally:
- if save_cwd:
- os.chdir(save_cwd)
- if cmd and save_cwd:
- print_func('os.chdir(%s)' % repr(save_cwd), target, source, env)
-
- return stat
-
-
-def _string_from_cmd_list(cmd_list):
- """Takes a list of command line arguments and returns a pretty
- representation for printing."""
- cl = []
- for arg in map(str, cmd_list):
- if ' ' in arg or '\t' in arg:
- arg = '"' + arg + '"'
- cl.append(arg)
- return string.join(cl)
-
-# A fiddlin' little function that has an 'import SCons.Environment' which
-# can't be moved to the top level without creating an import loop. Since
-# this import creates a local variable named 'SCons', it blocks access to
-# the global variable, so we move it here to prevent complaints about local
-# variables being used uninitialized.
-default_ENV = None
-def get_default_ENV(env):
- global default_ENV
- try:
- return env['ENV']
- except KeyError:
- if not default_ENV:
- import SCons.Environment
- # This is a hideously expensive way to get a default shell
- # environment. What it really should do is run the platform
- # setup to get the default ENV. Fortunately, it's incredibly
- # rare for an Environment not to have a shell environment, so
- # we're not going to worry about it overmuch.
- default_ENV = SCons.Environment.Environment()['ENV']
- return default_ENV
-
-# This function is still in draft mode. We're going to need something like
-# it in the long run as more and more places use subprocess, but I'm sure
-# it'll have to be tweaked to get the full desired functionality.
-# one special arg (so far?), 'error', to tell what to do with exceptions.
-def _subproc(env, cmd, error = 'ignore', **kw):
- """Do common setup for a subprocess.Popen() call"""
- # allow std{in,out,err} to be "'devnull'"
- io = kw.get('stdin')
- if is_String(io) and io == 'devnull':
- kw['stdin'] = open(os.devnull)
- io = kw.get('stdout')
- if is_String(io) and io == 'devnull':
- kw['stdout'] = open(os.devnull, 'w')
- io = kw.get('stderr')
- if is_String(io) and io == 'devnull':
- kw['stderr'] = open(os.devnull, 'w')
-
- # Figure out what shell environment to use
- ENV = kw.get('env', None)
- if ENV is None: ENV = get_default_ENV(env)
-
- # Ensure that the ENV values are all strings:
- new_env = {}
- for key, value in ENV.items():
- if is_List(value):
- # If the value is a list, then we assume it is a path list,
- # because that's a pretty common list-like value to stick
- # in an environment variable:
- value = SCons.Util.flatten_sequence(value)
- new_env[key] = string.join(map(str, value), os.pathsep)
- else:
- # It's either a string or something else. If it's a string,
- # we still want to call str() because it might be a *Unicode*
- # string, which makes subprocess.Popen() gag. If it isn't a
- # string or a list, then we just coerce it to a string, which
- # is the proper way to handle Dir and File instances and will
- # produce something reasonable for just about everything else:
- new_env[key] = str(value)
- kw['env'] = new_env
-
- try:
- #FUTURE return subprocess.Popen(cmd, **kw)
- return apply(subprocess.Popen, (cmd,), kw)
- except EnvironmentError, e:
- if error == 'raise': raise
- # return a dummy Popen instance that only returns error
- class dummyPopen:
- def __init__(self, e): self.exception = e
- def communicate(self): return ('','')
- def wait(self): return -self.exception.errno
- stdin = None
- class f:
- def read(self): return ''
- def readline(self): return ''
- stdout = stderr = f()
- return dummyPopen(e)
-
-class CommandAction(_ActionAction):
- """Class for command-execution actions."""
- def __init__(self, cmd, **kw):
- # Cmd can actually be a list or a single item; if it's a
- # single item it should be the command string to execute; if a
- # list then it should be the words of the command string to
- # execute. Only a single command should be executed by this
- # object; lists of commands should be handled by embedding
- # these objects in a ListAction object (which the Action()
- # factory above does). cmd will be passed to
- # Environment.subst_list() for substituting environment
- # variables.
- if __debug__: logInstanceCreation(self, 'Action.CommandAction')
-
- #TODO(1.5) _ActionAction.__init__(self, **kw)
- apply(_ActionAction.__init__, (self,), kw)
- if is_List(cmd):
- if filter(is_List, cmd):
- raise TypeError, "CommandAction should be given only " \
- "a single command"
- self.cmd_list = cmd
-
- def __str__(self):
- if is_List(self.cmd_list):
- return string.join(map(str, self.cmd_list), ' ')
- return str(self.cmd_list)
-
- def process(self, target, source, env, executor=None):
- if executor:
- result = env.subst_list(self.cmd_list, 0, executor=executor)
- else:
- result = env.subst_list(self.cmd_list, 0, target, source)
- silent = None
- ignore = None
- while 1:
- try: c = result[0][0][0]
- except IndexError: c = None
- if c == '@': silent = 1
- elif c == '-': ignore = 1
- else: break
- result[0][0] = result[0][0][1:]
- try:
- if not result[0][0]:
- result[0] = result[0][1:]
- except IndexError:
- pass
- return result, ignore, silent
-
- def strfunction(self, target, source, env, executor=None):
- if self.cmdstr is None:
- return None
- if self.cmdstr is not _null:
- from SCons.Subst import SUBST_RAW
- if executor:
- c = env.subst(self.cmdstr, SUBST_RAW, executor=executor)
- else:
- c = env.subst(self.cmdstr, SUBST_RAW, target, source)
- if c:
- return c
- cmd_list, ignore, silent = self.process(target, source, env, executor)
- if silent:
- return ''
- return _string_from_cmd_list(cmd_list[0])
-
- def execute(self, target, source, env, executor=None):
- """Execute a command action.
-
- This will handle lists of commands as well as individual commands,
- because construction variable substitution may turn a single
- "command" into a list. This means that this class can actually
- handle lists of commands, even though that's not how we use it
- externally.
- """
- escape_list = SCons.Subst.escape_list
- flatten_sequence = SCons.Util.flatten_sequence
-
- try:
- shell = env['SHELL']
- except KeyError:
- raise SCons.Errors.UserError('Missing SHELL construction variable.')
-
- try:
- spawn = env['SPAWN']
- except KeyError:
- raise SCons.Errors.UserError('Missing SPAWN construction variable.')
- else:
- if is_String(spawn):
- spawn = env.subst(spawn, raw=1, conv=lambda x: x)
-
- escape = env.get('ESCAPE', lambda x: x)
-
- ENV = get_default_ENV(env)
-
- # Ensure that the ENV values are all strings:
- for key, value in ENV.items():
- if not is_String(value):
- if is_List(value):
- # If the value is a list, then we assume it is a
- # path list, because that's a pretty common list-like
- # value to stick in an environment variable:
- value = flatten_sequence(value)
- ENV[key] = string.join(map(str, value), os.pathsep)
- else:
- # If it isn't a string or a list, then we just coerce
- # it to a string, which is the proper way to handle
- # Dir and File instances and will produce something
- # reasonable for just about everything else:
- ENV[key] = str(value)
-
- if executor:
- target = executor.get_all_targets()
- source = executor.get_all_sources()
- cmd_list, ignore, silent = self.process(target, map(rfile, source), env, executor)
-
- # Use len() to filter out any "command" that's zero-length.
- for cmd_line in filter(len, cmd_list):
- # Escape the command line for the interpreter we are using.
- cmd_line = escape_list(cmd_line, escape)
- result = spawn(shell, escape, cmd_line[0], cmd_line, ENV)
- if not ignore and result:
- msg = "Error %s" % result
- return SCons.Errors.BuildError(errstr=msg,
- status=result,
- action=self,
- command=cmd_line)
- return 0
-
- def get_presig(self, target, source, env, executor=None):
- """Return the signature contents of this action's command line.
-
- This strips $(-$) and everything in between the string,
- since those parts don't affect signatures.
- """
- from SCons.Subst import SUBST_SIG
- cmd = self.cmd_list
- if is_List(cmd):
- cmd = string.join(map(str, cmd))
- else:
- cmd = str(cmd)
- if executor:
- return env.subst_target_source(cmd, SUBST_SIG, executor=executor)
- else:
- return env.subst_target_source(cmd, SUBST_SIG, target, source)
-
- def get_implicit_deps(self, target, source, env, executor=None):
- icd = env.get('IMPLICIT_COMMAND_DEPENDENCIES', True)
- if is_String(icd) and icd[:1] == '$':
- icd = env.subst(icd)
- if not icd or icd in ('0', 'None'):
- return []
- from SCons.Subst import SUBST_SIG
- if executor:
- cmd_list = env.subst_list(self.cmd_list, SUBST_SIG, executor=executor)
- else:
- cmd_list = env.subst_list(self.cmd_list, SUBST_SIG, target, source)
- res = []
- for cmd_line in cmd_list:
- if cmd_line:
- d = str(cmd_line[0])
- m = strip_quotes.match(d)
- if m:
- d = m.group(1)
- d = env.WhereIs(d)
- if d:
- res.append(env.fs.File(d))
- return res
-
-class CommandGeneratorAction(ActionBase):
- """Class for command-generator actions."""
- def __init__(self, generator, kw):
- if __debug__: logInstanceCreation(self, 'Action.CommandGeneratorAction')
- self.generator = generator
- self.gen_kw = kw
- self.varlist = kw.get('varlist', ())
- self.targets = kw.get('targets', '$TARGETS')
-
- def _generate(self, target, source, env, for_signature, executor=None):
- # ensure that target is a list, to make it easier to write
- # generator functions:
- if not is_List(target):
- target = [target]
-
- if executor:
- target = executor.get_all_targets()
- source = executor.get_all_sources()
- ret = self.generator(target=target,
- source=source,
- env=env,
- for_signature=for_signature)
- #TODO(1.5) gen_cmd = Action(ret, **self.gen_kw)
- gen_cmd = apply(Action, (ret,), self.gen_kw)
- if not gen_cmd:
- raise SCons.Errors.UserError("Object returned from command generator: %s cannot be used to create an Action." % repr(ret))
- return gen_cmd
-
- def __str__(self):
- try:
- env = self.presub_env
- except AttributeError:
- env = None
- if env is None:
- env = SCons.Defaults.DefaultEnvironment()
- act = self._generate([], [], env, 1)
- return str(act)
-
- def batch_key(self, env, target, source):
- return self._generate(target, source, env, 1).batch_key(env, target, source)
-
- def genstring(self, target, source, env, executor=None):
- return self._generate(target, source, env, 1, executor).genstring(target, source, env)
-
- def __call__(self, target, source, env, exitstatfunc=_null, presub=_null,
- show=_null, execute=_null, chdir=_null, executor=None):
- act = self._generate(target, source, env, 0, executor)
- if act is None:
- raise UserError("While building `%s': Cannot deduce file extension from source files: %s" % (repr(map(str, target)), repr(map(str, source))))
- return act(target, source, env, exitstatfunc, presub,
- show, execute, chdir, executor)
-
- def get_presig(self, target, source, env, executor=None):
- """Return the signature contents of this action's command line.
-
- This strips $(-$) and everything in between the string,
- since those parts don't affect signatures.
- """
- return self._generate(target, source, env, 1, executor).get_presig(target, source, env)
-
- def get_implicit_deps(self, target, source, env, executor=None):
- return self._generate(target, source, env, 1, executor).get_implicit_deps(target, source, env)
-
- def get_targets(self, env, executor):
- return self._generate(None, None, env, 1, executor).get_targets(env, executor)
-
-
-
-# A LazyAction is a kind of hybrid generator and command action for
-# strings of the form "$VAR". These strings normally expand to other
-# strings (think "$CCCOM" to "$CC -c -o $TARGET $SOURCE"), but we also
-# want to be able to replace them with functions in the construction
-# environment. Consequently, we want lazy evaluation and creation of
-# an Action in the case of the function, but that's overkill in the more
-# normal case of expansion to other strings.
-#
-# So we do this with a subclass that's both a generator *and*
-# a command action. The overridden methods all do a quick check
-# of the construction variable, and if it's a string we just call
-# the corresponding CommandAction method to do the heavy lifting.
-# If not, then we call the same-named CommandGeneratorAction method.
-# The CommandGeneratorAction methods work by using the overridden
-# _generate() method, that is, our own way of handling "generation" of
-# an action based on what's in the construction variable.
-
-class LazyAction(CommandGeneratorAction, CommandAction):
-
- def __init__(self, var, kw):
- if __debug__: logInstanceCreation(self, 'Action.LazyAction')
- #FUTURE CommandAction.__init__(self, '${'+var+'}', **kw)
- apply(CommandAction.__init__, (self, '${'+var+'}'), kw)
- self.var = SCons.Util.to_String(var)
- self.gen_kw = kw
-
- def get_parent_class(self, env):
- c = env.get(self.var)
- if is_String(c) and not '\n' in c:
- return CommandAction
- return CommandGeneratorAction
-
- def _generate_cache(self, env):
- if env:
- c = env.get(self.var, '')
- else:
- c = ''
- #TODO(1.5) gen_cmd = Action(c, **self.gen_kw)
- gen_cmd = apply(Action, (c,), self.gen_kw)
- if not gen_cmd:
- raise SCons.Errors.UserError("$%s value %s cannot be used to create an Action." % (self.var, repr(c)))
- return gen_cmd
-
- def _generate(self, target, source, env, for_signature, executor=None):
- return self._generate_cache(env)
-
- def __call__(self, target, source, env, *args, **kw):
- args = (self, target, source, env) + args
- c = self.get_parent_class(env)
- #TODO(1.5) return c.__call__(*args, **kw)
- return apply(c.__call__, args, kw)
-
- def get_presig(self, target, source, env):
- c = self.get_parent_class(env)
- return c.get_presig(self, target, source, env)
-
-
-
-class FunctionAction(_ActionAction):
- """Class for Python function actions."""
-
- def __init__(self, execfunction, kw):
- if __debug__: logInstanceCreation(self, 'Action.FunctionAction')
-
- self.execfunction = execfunction
- try:
- self.funccontents = _callable_contents(execfunction)
- except AttributeError:
- try:
- # See if execfunction will do the heavy lifting for us.
- self.gc = execfunction.get_contents
- except AttributeError:
- # This is weird, just do the best we can.
- self.funccontents = _object_contents(execfunction)
-
- #TODO(1.5) _ActionAction.__init__(self, **kw)
- apply(_ActionAction.__init__, (self,), kw)
-
- def function_name(self):
- try:
- return self.execfunction.__name__
- except AttributeError:
- try:
- return self.execfunction.__class__.__name__
- except AttributeError:
- return "unknown_python_function"
-
- def strfunction(self, target, source, env, executor=None):
- if self.cmdstr is None:
- return None
- if self.cmdstr is not _null:
- from SCons.Subst import SUBST_RAW
- if executor:
- c = env.subst(self.cmdstr, SUBST_RAW, executor=executor)
- else:
- c = env.subst(self.cmdstr, SUBST_RAW, target, source)
- if c:
- return c
- def array(a):
- def quote(s):
- try:
- str_for_display = s.str_for_display
- except AttributeError:
- s = repr(s)
- else:
- s = str_for_display()
- return s
- return '[' + string.join(map(quote, a), ", ") + ']'
- try:
- strfunc = self.execfunction.strfunction
- except AttributeError:
- pass
- else:
- if strfunc is None:
- return None
- if callable(strfunc):
- return strfunc(target, source, env)
- name = self.function_name()
- tstr = array(target)
- sstr = array(source)
- return "%s(%s, %s)" % (name, tstr, sstr)
-
- def __str__(self):
- name = self.function_name()
- if name == 'ActionCaller':
- return str(self.execfunction)
- return "%s(target, source, env)" % name
-
- def execute(self, target, source, env, executor=None):
- exc_info = (None,None,None)
- try:
- if executor:
- target = executor.get_all_targets()
- source = executor.get_all_sources()
- rsources = map(rfile, source)
- try:
- result = self.execfunction(target=target, source=rsources, env=env)
- except KeyboardInterrupt, e:
- raise
- except SystemExit, e:
- raise
- except Exception, e:
- result = e
- exc_info = sys.exc_info()
-
- if result:
- result = SCons.Errors.convert_to_BuildError(result, exc_info)
- result.node=target
- result.action=self
- try:
- result.command=self.strfunction(target, source, env, executor)
- except TypeError:
- result.command=self.strfunction(target, source, env)
-
- # FIXME: This maintains backward compatibility with respect to
- # which type of exceptions were returned by raising an
- # exception and which ones were returned by value. It would
- # probably be best to always return them by value here, but
- # some codes do not check the return value of Actions and I do
- # not have the time to modify them at this point.
- if (exc_info[1] and
- not isinstance(exc_info[1],EnvironmentError)):
- raise result
-
- return result
- finally:
- # Break the cycle between the traceback object and this
- # function stack frame. See the sys.exc_info() doc info for
- # more information about this issue.
- del exc_info
-
-
- def get_presig(self, target, source, env):
- """Return the signature contents of this callable action."""
- try:
- return self.gc(target, source, env)
- except AttributeError:
- return self.funccontents
-
- def get_implicit_deps(self, target, source, env):
- return []
-
-class ListAction(ActionBase):
- """Class for lists of other actions."""
- def __init__(self, list):
- if __debug__: logInstanceCreation(self, 'Action.ListAction')
- def list_of_actions(x):
- if isinstance(x, ActionBase):
- return x
- return Action(x)
- self.list = map(list_of_actions, list)
- # our children will have had any varlist
- # applied; we don't need to do it again
- self.varlist = ()
- self.targets = '$TARGETS'
-
- def genstring(self, target, source, env):
- return string.join(map(lambda a, t=target, s=source, e=env:
- a.genstring(t, s, e),
- self.list),
- '\n')
-
- def __str__(self):
- return string.join(map(str, self.list), '\n')
-
- def presub_lines(self, env):
- return SCons.Util.flatten_sequence(
- map(lambda a, env=env: a.presub_lines(env), self.list))
-
- def get_presig(self, target, source, env):
- """Return the signature contents of this action list.
-
- Simple concatenation of the signatures of the elements.
- """
- return string.join(map(lambda x, t=target, s=source, e=env:
- x.get_contents(t, s, e),
- self.list),
- "")
-
- def __call__(self, target, source, env, exitstatfunc=_null, presub=_null,
- show=_null, execute=_null, chdir=_null, executor=None):
- if executor:
- target = executor.get_all_targets()
- source = executor.get_all_sources()
- for act in self.list:
- stat = act(target, source, env, exitstatfunc, presub,
- show, execute, chdir, executor)
- if stat:
- return stat
- return 0
-
- def get_implicit_deps(self, target, source, env):
- result = []
- for act in self.list:
- result.extend(act.get_implicit_deps(target, source, env))
- return result
-
-class ActionCaller:
- """A class for delaying calling an Action function with specific
- (positional and keyword) arguments until the Action is actually
- executed.
-
- This class looks to the rest of the world like a normal Action object,
- but what it's really doing is hanging on to the arguments until we
- have a target, source and env to use for the expansion.
- """
- def __init__(self, parent, args, kw):
- self.parent = parent
- self.args = args
- self.kw = kw
-
- def get_contents(self, target, source, env):
- actfunc = self.parent.actfunc
- try:
- # "self.actfunc" is a function.
- contents = str(actfunc.func_code.co_code)
- except AttributeError:
- # "self.actfunc" is a callable object.
- try:
- contents = str(actfunc.__call__.im_func.func_code.co_code)
- except AttributeError:
- # No __call__() method, so it might be a builtin
- # or something like that. Do the best we can.
- contents = str(actfunc)
- contents = remove_set_lineno_codes(contents)
- return contents
-
- def subst(self, s, target, source, env):
- # If s is a list, recursively apply subst()
- # to every element in the list
- if is_List(s):
- result = []
- for elem in s:
- result.append(self.subst(elem, target, source, env))
- return self.parent.convert(result)
-
- # Special-case hack: Let a custom function wrapped in an
- # ActionCaller get at the environment through which the action
- # was called by using this hard-coded value as a special return.
- if s == '$__env__':
- return env
- elif is_String(s):
- return env.subst(s, 1, target, source)
- return self.parent.convert(s)
-
- def subst_args(self, target, source, env):
- return map(lambda x, self=self, t=target, s=source, e=env:
- self.subst(x, t, s, e),
- self.args)
-
- def subst_kw(self, target, source, env):
- kw = {}
- for key in self.kw.keys():
- kw[key] = self.subst(self.kw[key], target, source, env)
- return kw
-
- def __call__(self, target, source, env, executor=None):
- args = self.subst_args(target, source, env)
- kw = self.subst_kw(target, source, env)
- #TODO(1.5) return self.parent.actfunc(*args, **kw)
- return apply(self.parent.actfunc, args, kw)
-
- def strfunction(self, target, source, env):
- args = self.subst_args(target, source, env)
- kw = self.subst_kw(target, source, env)
- #TODO(1.5) return self.parent.strfunc(*args, **kw)
- return apply(self.parent.strfunc, args, kw)
-
- def __str__(self):
- #TODO(1.5) return self.parent.strfunc(*self.args, **self.kw)
- return apply(self.parent.strfunc, self.args, self.kw)
-
-class ActionFactory:
- """A factory class that will wrap up an arbitrary function
- as an SCons-executable Action object.
-
- The real heavy lifting here is done by the ActionCaller class.
- We just collect the (positional and keyword) arguments that we're
- called with and give them to the ActionCaller object we create,
- so it can hang onto them until it needs them.
- """
- def __init__(self, actfunc, strfunc, convert=lambda x: x):
- self.actfunc = actfunc
- self.strfunc = strfunc
- self.convert = convert
-
- def __call__(self, *args, **kw):
- ac = ActionCaller(self, args, kw)
- action = Action(ac, strfunction=ac.strfunction)
- return action
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Builder.py b/3rdParty/SCons/scons-local/SCons/Builder.py
deleted file mode 100644
index 18026c3..0000000
--- a/3rdParty/SCons/scons-local/SCons/Builder.py
+++ /dev/null
@@ -1,868 +0,0 @@
-"""SCons.Builder
-
-Builder object subsystem.
-
-A Builder object is a callable that encapsulates information about how
-to execute actions to create a target Node (file) from source Nodes
-(files), and how to create those dependencies for tracking.
-
-The main entry point here is the Builder() factory method. This provides
-a procedural interface that creates the right underlying Builder object
-based on the keyword arguments supplied and the types of the arguments.
-
-The goal is for this external interface to be simple enough that the
-vast majority of users can create new Builders as necessary to support
-building new types of files in their configurations, without having to
-dive any deeper into this subsystem.
-
-The base class here is BuilderBase. This is a concrete base class which
-does, in fact, represent the Builder objects that we (or users) create.
-
-There is also a proxy that looks like a Builder:
-
- CompositeBuilder
-
- This proxies for a Builder with an action that is actually a
- dictionary that knows how to map file suffixes to a specific
- action. This is so that we can invoke different actions
- (compilers, compile options) for different flavors of source
- files.
-
-Builders and their proxies have the following public interface methods
-used by other modules:
-
- __call__()
- THE public interface. Calling a Builder object (with the
- use of internal helper methods) sets up the target and source
- dependencies, appropriate mapping to a specific action, and the
- environment manipulation necessary for overridden construction
- variable. This also takes care of warning about possible mistakes
- in keyword arguments.
-
- add_emitter()
- Adds an emitter for a specific file suffix, used by some Tool
- modules to specify that (for example) a yacc invocation on a .y
- can create a .h *and* a .c file.
-
- add_action()
- Adds an action for a specific file suffix, heavily used by
- Tool modules to add their specific action(s) for turning
- a source file into an object file to the global static
- and shared object file Builders.
-
-There are the following methods for internal use within this module:
-
- _execute()
- The internal method that handles the heavily lifting when a
- Builder is called. This is used so that the __call__() methods
- can set up warning about possible mistakes in keyword-argument
- overrides, and *then* execute all of the steps necessary so that
- the warnings only occur once.
-
- get_name()
- Returns the Builder's name within a specific Environment,
- primarily used to try to return helpful information in error
- messages.
-
- adjust_suffix()
- get_prefix()
- get_suffix()
- get_src_suffix()
- set_src_suffix()
- Miscellaneous stuff for handling the prefix and suffix
- manipulation we use in turning source file names into target
- file names.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Builder.py 4043 2009/02/23 09:06:45 scons"
-
-import UserDict
-import UserList
-
-import SCons.Action
-from SCons.Debug import logInstanceCreation
-from SCons.Errors import InternalError, UserError
-import SCons.Executor
-import SCons.Memoize
-import SCons.Node
-import SCons.Node.FS
-import SCons.Util
-import SCons.Warnings
-
-class _Null:
- pass
-
-_null = _Null
-
-def match_splitext(path, suffixes = []):
- if suffixes:
- matchsuf = filter(lambda S,path=path: path[-len(S):] == S,
- suffixes)
- if matchsuf:
- suf = max(map(None, map(len, matchsuf), matchsuf))[1]
- return [path[:-len(suf)], path[-len(suf):]]
- return SCons.Util.splitext(path)
-
-class DictCmdGenerator(SCons.Util.Selector):
- """This is a callable class that can be used as a
- command generator function. It holds on to a dictionary
- mapping file suffixes to Actions. It uses that dictionary
- to return the proper action based on the file suffix of
- the source file."""
-
- def __init__(self, dict=None, source_ext_match=1):
- SCons.Util.Selector.__init__(self, dict)
- self.source_ext_match = source_ext_match
-
- def src_suffixes(self):
- return self.keys()
-
- def add_action(self, suffix, action):
- """Add a suffix-action pair to the mapping.
- """
- self[suffix] = action
-
- def __call__(self, target, source, env, for_signature):
- if not source:
- return []
-
- if self.source_ext_match:
- suffixes = self.src_suffixes()
- ext = None
- for src in map(str, source):
- my_ext = match_splitext(src, suffixes)[1]
- if ext and my_ext != ext:
- raise UserError("While building `%s' from `%s': Cannot build multiple sources with different extensions: %s, %s" % (repr(map(str, target)), src, ext, my_ext))
- ext = my_ext
- else:
- ext = match_splitext(str(source[0]), self.src_suffixes())[1]
-
- if not ext:
- #return ext
- raise UserError("While building `%s': Cannot deduce file extension from source files: %s" % (repr(map(str, target)), repr(map(str, source))))
-
- try:
- ret = SCons.Util.Selector.__call__(self, env, source, ext)
- except KeyError, e:
- raise UserError("Ambiguous suffixes after environment substitution: %s == %s == %s" % (e[0], e[1], e[2]))
- if ret is None:
- raise UserError("While building `%s' from `%s': Don't know how to build from a source file with suffix `%s'. Expected a suffix in this list: %s." % \
- (repr(map(str, target)), repr(map(str, source)), ext, repr(self.keys())))
- return ret
-
-class CallableSelector(SCons.Util.Selector):
- """A callable dictionary that will, in turn, call the value it
- finds if it can."""
- def __call__(self, env, source):
- value = SCons.Util.Selector.__call__(self, env, source)
- if callable(value):
- value = value(env, source)
- return value
-
-class DictEmitter(SCons.Util.Selector):
- """A callable dictionary that maps file suffixes to emitters.
- When called, it finds the right emitter in its dictionary for the
- suffix of the first source file, and calls that emitter to get the
- right lists of targets and sources to return. If there's no emitter
- for the suffix in its dictionary, the original target and source are
- returned.
- """
- def __call__(self, target, source, env):
- emitter = SCons.Util.Selector.__call__(self, env, source)
- if emitter:
- target, source = emitter(target, source, env)
- return (target, source)
-
-class ListEmitter(UserList.UserList):
- """A callable list of emitters that calls each in sequence,
- returning the result.
- """
- def __call__(self, target, source, env):
- for e in self.data:
- target, source = e(target, source, env)
- return (target, source)
-
-# These are a common errors when calling a Builder;
-# they are similar to the 'target' and 'source' keyword args to builders,
-# so we issue warnings when we see them. The warnings can, of course,
-# be disabled.
-misleading_keywords = {
- 'targets' : 'target',
- 'sources' : 'source',
-}
-
-class OverrideWarner(UserDict.UserDict):
- """A class for warning about keyword arguments that we use as
- overrides in a Builder call.
-
- This class exists to handle the fact that a single Builder call
- can actually invoke multiple builders. This class only emits the
- warnings once, no matter how many Builders are invoked.
- """
- def __init__(self, dict):
- UserDict.UserDict.__init__(self, dict)
- if __debug__: logInstanceCreation(self, 'Builder.OverrideWarner')
- self.already_warned = None
- def warn(self):
- if self.already_warned:
- return
- for k in self.keys():
- if misleading_keywords.has_key(k):
- alt = misleading_keywords[k]
- msg = "Did you mean to use `%s' instead of `%s'?" % (alt, k)
- SCons.Warnings.warn(SCons.Warnings.MisleadingKeywordsWarning, msg)
- self.already_warned = 1
-
-def Builder(**kw):
- """A factory for builder objects."""
- composite = None
- if kw.has_key('generator'):
- if kw.has_key('action'):
- raise UserError, "You must not specify both an action and a generator."
- kw['action'] = SCons.Action.CommandGeneratorAction(kw['generator'], {})
- del kw['generator']
- elif kw.has_key('action'):
- source_ext_match = kw.get('source_ext_match', 1)
- if kw.has_key('source_ext_match'):
- del kw['source_ext_match']
- if SCons.Util.is_Dict(kw['action']):
- composite = DictCmdGenerator(kw['action'], source_ext_match)
- kw['action'] = SCons.Action.CommandGeneratorAction(composite, {})
- kw['src_suffix'] = composite.src_suffixes()
- else:
- kw['action'] = SCons.Action.Action(kw['action'])
-
- if kw.has_key('emitter'):
- emitter = kw['emitter']
- if SCons.Util.is_String(emitter):
- # This allows users to pass in an Environment
- # variable reference (like "$FOO") as an emitter.
- # We will look in that Environment variable for
- # a callable to use as the actual emitter.
- var = SCons.Util.get_environment_var(emitter)
- if not var:
- raise UserError, "Supplied emitter '%s' does not appear to refer to an Environment variable" % emitter
- kw['emitter'] = EmitterProxy(var)
- elif SCons.Util.is_Dict(emitter):
- kw['emitter'] = DictEmitter(emitter)
- elif SCons.Util.is_List(emitter):
- kw['emitter'] = ListEmitter(emitter)
-
- result = apply(BuilderBase, (), kw)
-
- if not composite is None:
- result = CompositeBuilder(result, composite)
-
- return result
-
-def _node_errors(builder, env, tlist, slist):
- """Validate that the lists of target and source nodes are
- legal for this builder and environment. Raise errors or
- issue warnings as appropriate.
- """
-
- # First, figure out if there are any errors in the way the targets
- # were specified.
- for t in tlist:
- if t.side_effect:
- raise UserError, "Multiple ways to build the same target were specified for: %s" % t
- if t.has_explicit_builder():
- if not t.env is None and not t.env is env:
- action = t.builder.action
- t_contents = action.get_contents(tlist, slist, t.env)
- contents = action.get_contents(tlist, slist, env)
-
- if t_contents == contents:
- msg = "Two different environments were specified for target %s,\n\tbut they appear to have the same action: %s" % (t, action.genstring(tlist, slist, t.env))
- SCons.Warnings.warn(SCons.Warnings.DuplicateEnvironmentWarning, msg)
- else:
- msg = "Two environments with different actions were specified for the same target: %s" % t
- raise UserError, msg
- if builder.multi:
- if t.builder != builder:
- msg = "Two different builders (%s and %s) were specified for the same target: %s" % (t.builder.get_name(env), builder.get_name(env), t)
- raise UserError, msg
- # TODO(batch): list constructed each time!
- if t.get_executor().get_all_targets() != tlist:
- msg = "Two different target lists have a target in common: %s (from %s and from %s)" % (t, map(str, t.get_executor().get_all_targets()), map(str, tlist))
- raise UserError, msg
- elif t.sources != slist:
- msg = "Multiple ways to build the same target were specified for: %s (from %s and from %s)" % (t, map(str, t.sources), map(str, slist))
- raise UserError, msg
-
- if builder.single_source:
- if len(slist) > 1:
- raise UserError, "More than one source given for single-source builder: targets=%s sources=%s" % (map(str,tlist), map(str,slist))
-
-class EmitterProxy:
- """This is a callable class that can act as a
- Builder emitter. It holds on to a string that
- is a key into an Environment dictionary, and will
- look there at actual build time to see if it holds
- a callable. If so, we will call that as the actual
- emitter."""
- def __init__(self, var):
- self.var = SCons.Util.to_String(var)
-
- def __call__(self, target, source, env):
- emitter = self.var
-
- # Recursively substitute the variable.
- # We can't use env.subst() because it deals only
- # in strings. Maybe we should change that?
- while SCons.Util.is_String(emitter) and env.has_key(emitter):
- emitter = env[emitter]
- if callable(emitter):
- target, source = emitter(target, source, env)
- elif SCons.Util.is_List(emitter):
- for e in emitter:
- target, source = e(target, source, env)
-
- return (target, source)
-
-
- def __cmp__(self, other):
- return cmp(self.var, other.var)
-
-class BuilderBase:
- """Base class for Builders, objects that create output
- nodes (files) from input nodes (files).
- """
-
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- memoizer_counters = []
-
- def __init__(self, action = None,
- prefix = '',
- suffix = '',
- src_suffix = '',
- target_factory = None,
- source_factory = None,
- target_scanner = None,
- source_scanner = None,
- emitter = None,
- multi = 0,
- env = None,
- single_source = 0,
- name = None,
- chdir = _null,
- is_explicit = 1,
- src_builder = None,
- ensure_suffix = False,
- **overrides):
- if __debug__: logInstanceCreation(self, 'Builder.BuilderBase')
- self._memo = {}
- self.action = action
- self.multi = multi
- if SCons.Util.is_Dict(prefix):
- prefix = CallableSelector(prefix)
- self.prefix = prefix
- if SCons.Util.is_Dict(suffix):
- suffix = CallableSelector(suffix)
- self.env = env
- self.single_source = single_source
- if overrides.has_key('overrides'):
- SCons.Warnings.warn(SCons.Warnings.DeprecatedWarning,
- "The \"overrides\" keyword to Builder() creation has been deprecated;\n" +\
- "\tspecify the items as keyword arguments to the Builder() call instead.")
- overrides.update(overrides['overrides'])
- del overrides['overrides']
- if overrides.has_key('scanner'):
- SCons.Warnings.warn(SCons.Warnings.DeprecatedWarning,
- "The \"scanner\" keyword to Builder() creation has been deprecated;\n"
- "\tuse: source_scanner or target_scanner as appropriate.")
- del overrides['scanner']
- self.overrides = overrides
-
- self.set_suffix(suffix)
- self.set_src_suffix(src_suffix)
- self.ensure_suffix = ensure_suffix
-
- self.target_factory = target_factory
- self.source_factory = source_factory
- self.target_scanner = target_scanner
- self.source_scanner = source_scanner
-
- self.emitter = emitter
-
- # Optional Builder name should only be used for Builders
- # that don't get attached to construction environments.
- if name:
- self.name = name
- self.executor_kw = {}
- if not chdir is _null:
- self.executor_kw['chdir'] = chdir
- self.is_explicit = is_explicit
-
- if src_builder is None:
- src_builder = []
- elif not SCons.Util.is_List(src_builder):
- src_builder = [ src_builder ]
- self.src_builder = src_builder
-
- def __nonzero__(self):
- raise InternalError, "Do not test for the Node.builder attribute directly; use Node.has_builder() instead"
-
- def get_name(self, env):
- """Attempts to get the name of the Builder.
-
- Look at the BUILDERS variable of env, expecting it to be a
- dictionary containing this Builder, and return the key of the
- dictionary. If there's no key, then return a directly-configured
- name (if there is one) or the name of the class (by default)."""
-
- try:
- index = env['BUILDERS'].values().index(self)
- return env['BUILDERS'].keys()[index]
- except (AttributeError, KeyError, TypeError, ValueError):
- try:
- return self.name
- except AttributeError:
- return str(self.__class__)
-
- def __cmp__(self, other):
- return cmp(self.__dict__, other.__dict__)
-
- def splitext(self, path, env=None):
- if not env:
- env = self.env
- if env:
- suffixes = self.src_suffixes(env)
- else:
- suffixes = []
- return match_splitext(path, suffixes)
-
- def _adjustixes(self, files, pre, suf, ensure_suffix=False):
- if not files:
- return []
- result = []
- if not SCons.Util.is_List(files):
- files = [files]
-
- for f in files:
- if SCons.Util.is_String(f):
- f = SCons.Util.adjustixes(f, pre, suf, ensure_suffix)
- result.append(f)
- return result
-
- def _create_nodes(self, env, target = None, source = None):
- """Create and return lists of target and source nodes.
- """
- src_suf = self.get_src_suffix(env)
-
- target_factory = env.get_factory(self.target_factory)
- source_factory = env.get_factory(self.source_factory)
-
- source = self._adjustixes(source, None, src_suf)
- slist = env.arg2nodes(source, source_factory)
-
- pre = self.get_prefix(env, slist)
- suf = self.get_suffix(env, slist)
-
- if target is None:
- try:
- t_from_s = slist[0].target_from_source
- except AttributeError:
- raise UserError("Do not know how to create a target from source `%s'" % slist[0])
- except IndexError:
- tlist = []
- else:
- splitext = lambda S,self=self,env=env: self.splitext(S,env)
- tlist = [ t_from_s(pre, suf, splitext) ]
- else:
- target = self._adjustixes(target, pre, suf, self.ensure_suffix)
- tlist = env.arg2nodes(target, target_factory, target=target, source=source)
-
- if self.emitter:
- # The emitter is going to do str(node), but because we're
- # being called *from* a builder invocation, the new targets
- # don't yet have a builder set on them and will look like
- # source files. Fool the emitter's str() calls by setting
- # up a temporary builder on the new targets.
- new_targets = []
- for t in tlist:
- if not t.is_derived():
- t.builder_set(self)
- new_targets.append(t)
-
- orig_tlist = tlist[:]
- orig_slist = slist[:]
-
- target, source = self.emitter(target=tlist, source=slist, env=env)
-
- # Now delete the temporary builders that we attached to any
- # new targets, so that _node_errors() doesn't do weird stuff
- # to them because it thinks they already have builders.
- for t in new_targets:
- if t.builder is self:
- # Only delete the temporary builder if the emitter
- # didn't change it on us.
- t.builder_set(None)
-
- # Have to call arg2nodes yet again, since it is legal for
- # emitters to spit out strings as well as Node instances.
- tlist = env.arg2nodes(target, target_factory,
- target=orig_tlist, source=orig_slist)
- slist = env.arg2nodes(source, source_factory,
- target=orig_tlist, source=orig_slist)
-
- return tlist, slist
-
- def _execute(self, env, target, source, overwarn={}, executor_kw={}):
- # We now assume that target and source are lists or None.
- if self.src_builder:
- source = self.src_builder_sources(env, source, overwarn)
-
- if self.single_source and len(source) > 1 and target is None:
- result = []
- if target is None: target = [None]*len(source)
- for tgt, src in zip(target, source):
- if not tgt is None: tgt = [tgt]
- if not src is None: src = [src]
- result.extend(self._execute(env, tgt, src, overwarn))
- return SCons.Node.NodeList(result)
-
- overwarn.warn()
-
- tlist, slist = self._create_nodes(env, target, source)
-
- # Check for errors with the specified target/source lists.
- _node_errors(self, env, tlist, slist)
-
- # The targets are fine, so find or make the appropriate Executor to
- # build this particular list of targets from this particular list of
- # sources.
-
- executor = None
- key = None
-
- if self.multi:
- try:
- executor = tlist[0].get_executor(create = 0)
- except (AttributeError, IndexError):
- pass
- else:
- executor.add_sources(slist)
-
- if executor is None:
- if not self.action:
- fmt = "Builder %s must have an action to build %s."
- raise UserError, fmt % (self.get_name(env or self.env),
- map(str,tlist))
- key = self.action.batch_key(env or self.env, tlist, slist)
- if key:
- try:
- executor = SCons.Executor.GetBatchExecutor(key)
- except KeyError:
- pass
- else:
- executor.add_batch(tlist, slist)
-
- if executor is None:
- executor = SCons.Executor.Executor(self.action, env, [],
- tlist, slist, executor_kw)
- if key:
- SCons.Executor.AddBatchExecutor(key, executor)
-
- # Now set up the relevant information in the target Nodes themselves.
- for t in tlist:
- t.cwd = env.fs.getcwd()
- t.builder_set(self)
- t.env_set(env)
- t.add_source(slist)
- t.set_executor(executor)
- t.set_explicit(self.is_explicit)
-
- return SCons.Node.NodeList(tlist)
-
- def __call__(self, env, target=None, source=None, chdir=_null, **kw):
- # We now assume that target and source are lists or None.
- # The caller (typically Environment.BuilderWrapper) is
- # responsible for converting any scalar values to lists.
- if chdir is _null:
- ekw = self.executor_kw
- else:
- ekw = self.executor_kw.copy()
- ekw['chdir'] = chdir
- if kw:
- if kw.has_key('srcdir'):
- def prependDirIfRelative(f, srcdir=kw['srcdir']):
- import os.path
- if SCons.Util.is_String(f) and not os.path.isabs(f):
- f = os.path.join(srcdir, f)
- return f
- if not SCons.Util.is_List(source):
- source = [source]
- source = map(prependDirIfRelative, source)
- del kw['srcdir']
- if self.overrides:
- env_kw = self.overrides.copy()
- env_kw.update(kw)
- else:
- env_kw = kw
- else:
- env_kw = self.overrides
- env = env.Override(env_kw)
- return self._execute(env, target, source, OverrideWarner(kw), ekw)
-
- def adjust_suffix(self, suff):
- if suff and not suff[0] in [ '.', '_', '$' ]:
- return '.' + suff
- return suff
-
- def get_prefix(self, env, sources=[]):
- prefix = self.prefix
- if callable(prefix):
- prefix = prefix(env, sources)
- return env.subst(prefix)
-
- def set_suffix(self, suffix):
- if not callable(suffix):
- suffix = self.adjust_suffix(suffix)
- self.suffix = suffix
-
- def get_suffix(self, env, sources=[]):
- suffix = self.suffix
- if callable(suffix):
- suffix = suffix(env, sources)
- return env.subst(suffix)
-
- def set_src_suffix(self, src_suffix):
- if not src_suffix:
- src_suffix = []
- elif not SCons.Util.is_List(src_suffix):
- src_suffix = [ src_suffix ]
- adjust = lambda suf, s=self: \
- callable(suf) and suf or s.adjust_suffix(suf)
- self.src_suffix = map(adjust, src_suffix)
-
- def get_src_suffix(self, env):
- """Get the first src_suffix in the list of src_suffixes."""
- ret = self.src_suffixes(env)
- if not ret:
- return ''
- return ret[0]
-
- def add_emitter(self, suffix, emitter):
- """Add a suffix-emitter mapping to this Builder.
-
- This assumes that emitter has been initialized with an
- appropriate dictionary type, and will throw a TypeError if
- not, so the caller is responsible for knowing that this is an
- appropriate method to call for the Builder in question.
- """
- self.emitter[suffix] = emitter
-
- def add_src_builder(self, builder):
- """
- Add a new Builder to the list of src_builders.
-
- This requires wiping out cached values so that the computed
- lists of source suffixes get re-calculated.
- """
- self._memo = {}
- self.src_builder.append(builder)
-
- def _get_sdict(self, env):
- """
- Returns a dictionary mapping all of the source suffixes of all
- src_builders of this Builder to the underlying Builder that
- should be called first.
-
- This dictionary is used for each target specified, so we save a
- lot of extra computation by memoizing it for each construction
- environment.
-
- Note that this is re-computed each time, not cached, because there
- might be changes to one of our source Builders (or one of their
- source Builders, and so on, and so on...) that we can't "see."
-
- The underlying methods we call cache their computed values,
- though, so we hope repeatedly aggregating them into a dictionary
- like this won't be too big a hit. We may need to look for a
- better way to do this if performance data show this has turned
- into a significant bottleneck.
- """
- sdict = {}
- for bld in self.get_src_builders(env):
- for suf in bld.src_suffixes(env):
- sdict[suf] = bld
- return sdict
-
- def src_builder_sources(self, env, source, overwarn={}):
- sdict = self._get_sdict(env)
-
- src_suffixes = self.src_suffixes(env)
-
- lengths = list(set(map(len, src_suffixes)))
-
- def match_src_suffix(name, src_suffixes=src_suffixes, lengths=lengths):
- node_suffixes = map(lambda l, n=name: n[-l:], lengths)
- for suf in src_suffixes:
- if suf in node_suffixes:
- return suf
- return None
-
- result = []
- for s in SCons.Util.flatten(source):
- if SCons.Util.is_String(s):
- match_suffix = match_src_suffix(env.subst(s))
- if not match_suffix and not '.' in s:
- src_suf = self.get_src_suffix(env)
- s = self._adjustixes(s, None, src_suf)[0]
- else:
- match_suffix = match_src_suffix(s.name)
- if match_suffix:
- try:
- bld = sdict[match_suffix]
- except KeyError:
- result.append(s)
- else:
- tlist = bld._execute(env, None, [s], overwarn)
- # If the subsidiary Builder returned more than one
- # target, then filter out any sources that this
- # Builder isn't capable of building.
- if len(tlist) > 1:
- mss = lambda t, m=match_src_suffix: m(t.name)
- tlist = filter(mss, tlist)
- result.extend(tlist)
- else:
- result.append(s)
-
- source_factory = env.get_factory(self.source_factory)
-
- return env.arg2nodes(result, source_factory)
-
- def _get_src_builders_key(self, env):
- return id(env)
-
- memoizer_counters.append(SCons.Memoize.CountDict('get_src_builders', _get_src_builders_key))
-
- def get_src_builders(self, env):
- """
- Returns the list of source Builders for this Builder.
-
- This exists mainly to look up Builders referenced as
- strings in the 'BUILDER' variable of the construction
- environment and cache the result.
- """
- memo_key = id(env)
- try:
- memo_dict = self._memo['get_src_builders']
- except KeyError:
- memo_dict = {}
- self._memo['get_src_builders'] = memo_dict
- else:
- try:
- return memo_dict[memo_key]
- except KeyError:
- pass
-
- builders = []
- for bld in self.src_builder:
- if SCons.Util.is_String(bld):
- try:
- bld = env['BUILDERS'][bld]
- except KeyError:
- continue
- builders.append(bld)
-
- memo_dict[memo_key] = builders
- return builders
-
- def _subst_src_suffixes_key(self, env):
- return id(env)
-
- memoizer_counters.append(SCons.Memoize.CountDict('subst_src_suffixes', _subst_src_suffixes_key))
-
- def subst_src_suffixes(self, env):
- """
- The suffix list may contain construction variable expansions,
- so we have to evaluate the individual strings. To avoid doing
- this over and over, we memoize the results for each construction
- environment.
- """
- memo_key = id(env)
- try:
- memo_dict = self._memo['subst_src_suffixes']
- except KeyError:
- memo_dict = {}
- self._memo['subst_src_suffixes'] = memo_dict
- else:
- try:
- return memo_dict[memo_key]
- except KeyError:
- pass
- suffixes = map(lambda x, s=self, e=env: e.subst(x), self.src_suffix)
- memo_dict[memo_key] = suffixes
- return suffixes
-
- def src_suffixes(self, env):
- """
- Returns the list of source suffixes for all src_builders of this
- Builder.
-
- This is essentially a recursive descent of the src_builder "tree."
- (This value isn't cached because there may be changes in a
- src_builder many levels deep that we can't see.)
- """
- sdict = {}
- suffixes = self.subst_src_suffixes(env)
- for s in suffixes:
- sdict[s] = 1
- for builder in self.get_src_builders(env):
- for s in builder.src_suffixes(env):
- if not sdict.has_key(s):
- sdict[s] = 1
- suffixes.append(s)
- return suffixes
-
-class CompositeBuilder(SCons.Util.Proxy):
- """A Builder Proxy whose main purpose is to always have
- a DictCmdGenerator as its action, and to provide access
- to the DictCmdGenerator's add_action() method.
- """
-
- def __init__(self, builder, cmdgen):
- if __debug__: logInstanceCreation(self, 'Builder.CompositeBuilder')
- SCons.Util.Proxy.__init__(self, builder)
-
- # cmdgen should always be an instance of DictCmdGenerator.
- self.cmdgen = cmdgen
- self.builder = builder
-
- def add_action(self, suffix, action):
- self.cmdgen.add_action(suffix, action)
- self.set_src_suffix(self.cmdgen.src_suffixes())
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/CacheDir.py b/3rdParty/SCons/scons-local/SCons/CacheDir.py
deleted file mode 100644
index eda431a..0000000
--- a/3rdParty/SCons/scons-local/SCons/CacheDir.py
+++ /dev/null
@@ -1,217 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/CacheDir.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """
-CacheDir support
-"""
-
-import os.path
-import stat
-import string
-import sys
-
-import SCons.Action
-
-cache_enabled = True
-cache_debug = False
-cache_force = False
-cache_show = False
-
-def CacheRetrieveFunc(target, source, env):
- t = target[0]
- fs = t.fs
- cd = env.get_CacheDir()
- cachedir, cachefile = cd.cachepath(t)
- if not fs.exists(cachefile):
- cd.CacheDebug('CacheRetrieve(%s): %s not in cache\n', t, cachefile)
- return 1
- cd.CacheDebug('CacheRetrieve(%s): retrieving from %s\n', t, cachefile)
- if SCons.Action.execute_actions:
- if fs.islink(cachefile):
- fs.symlink(fs.readlink(cachefile), t.path)
- else:
- env.copy_from_cache(cachefile, t.path)
- st = fs.stat(cachefile)
- fs.chmod(t.path, stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE)
- return 0
-
-def CacheRetrieveString(target, source, env):
- t = target[0]
- fs = t.fs
- cd = env.get_CacheDir()
- cachedir, cachefile = cd.cachepath(t)
- if t.fs.exists(cachefile):
- return "Retrieved `%s' from cache" % t.path
- return None
-
-CacheRetrieve = SCons.Action.Action(CacheRetrieveFunc, CacheRetrieveString)
-
-CacheRetrieveSilent = SCons.Action.Action(CacheRetrieveFunc, None)
-
-def CachePushFunc(target, source, env):
- t = target[0]
- if t.nocache:
- return
- fs = t.fs
- cd = env.get_CacheDir()
- cachedir, cachefile = cd.cachepath(t)
- if fs.exists(cachefile):
- # Don't bother copying it if it's already there. Note that
- # usually this "shouldn't happen" because if the file already
- # existed in cache, we'd have retrieved the file from there,
- # not built it. This can happen, though, in a race, if some
- # other person running the same build pushes their copy to
- # the cache after we decide we need to build it but before our
- # build completes.
- cd.CacheDebug('CachePush(%s): %s already exists in cache\n', t, cachefile)
- return
-
- cd.CacheDebug('CachePush(%s): pushing to %s\n', t, cachefile)
-
- tempfile = cachefile+'.tmp'+str(os.getpid())
- errfmt = "Unable to copy %s to cache. Cache file is %s"
-
- if not fs.isdir(cachedir):
- try:
- fs.makedirs(cachedir)
- except EnvironmentError:
- # We may have received an exception because another process
- # has beaten us creating the directory.
- if not fs.isdir(cachedir):
- msg = errfmt % (str(target), cachefile)
- raise SCons.Errors.EnvironmentError, msg
-
- try:
- if fs.islink(t.path):
- fs.symlink(fs.readlink(t.path), tempfile)
- else:
- fs.copy2(t.path, tempfile)
- fs.rename(tempfile, cachefile)
- st = fs.stat(t.path)
- fs.chmod(cachefile, stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE)
- except EnvironmentError:
- # It's possible someone else tried writing the file at the
- # same time we did, or else that there was some problem like
- # the CacheDir being on a separate file system that's full.
- # In any case, inability to push a file to cache doesn't affect
- # the correctness of the build, so just print a warning.
- msg = errfmt % (str(target), cachefile)
- SCons.Warnings.warn(SCons.Warnings.CacheWriteErrorWarning, msg)
-
-CachePush = SCons.Action.Action(CachePushFunc, None)
-
-class CacheDir:
-
- def __init__(self, path):
- try:
- import hashlib
- except ImportError:
- msg = "No hashlib or MD5 module available, CacheDir() not supported"
- SCons.Warnings.warn(SCons.Warnings.NoMD5ModuleWarning, msg)
- self.path = None
- else:
- self.path = path
- self.current_cache_debug = None
- self.debugFP = None
-
- def CacheDebug(self, fmt, target, cachefile):
- if cache_debug != self.current_cache_debug:
- if cache_debug == '-':
- self.debugFP = sys.stdout
- elif cache_debug:
- self.debugFP = open(cache_debug, 'w')
- else:
- self.debugFP = None
- self.current_cache_debug = cache_debug
- if self.debugFP:
- self.debugFP.write(fmt % (target, os.path.split(cachefile)[1]))
-
- def is_enabled(self):
- return (cache_enabled and not self.path is None)
-
- def cachepath(self, node):
- """
- """
- if not self.is_enabled():
- return None, None
-
- sig = node.get_cachedir_bsig()
- subdir = string.upper(sig[0])
- dir = os.path.join(self.path, subdir)
- return dir, os.path.join(dir, sig)
-
- def retrieve(self, node):
- """
- This method is called from multiple threads in a parallel build,
- so only do thread safe stuff here. Do thread unsafe stuff in
- built().
-
- Note that there's a special trick here with the execute flag
- (one that's not normally done for other actions). Basically
- if the user requested a no_exec (-n) build, then
- SCons.Action.execute_actions is set to 0 and when any action
- is called, it does its showing but then just returns zero
- instead of actually calling the action execution operation.
- The problem for caching is that if the file does NOT exist in
- cache then the CacheRetrieveString won't return anything to
- show for the task, but the Action.__call__ won't call
- CacheRetrieveFunc; instead it just returns zero, which makes
- the code below think that the file *was* successfully
- retrieved from the cache, therefore it doesn't do any
- subsequent building. However, the CacheRetrieveString didn't
- print anything because it didn't actually exist in the cache,
- and no more build actions will be performed, so the user just
- sees nothing. The fix is to tell Action.__call__ to always
- execute the CacheRetrieveFunc and then have the latter
- explicitly check SCons.Action.execute_actions itself.
- """
- if not self.is_enabled():
- return False
-
- env = node.get_build_env()
- if cache_show:
- if CacheRetrieveSilent(node, [], env, execute=1) == 0:
- node.build(presub=0, execute=0)
- return True
- else:
- if CacheRetrieve(node, [], env, execute=1) == 0:
- return True
-
- return False
-
- def push(self, node):
- if not self.is_enabled():
- return
- return CachePush(node, [], node.get_build_env())
-
- def push_if_forced(self, node):
- if cache_force:
- return self.push(node)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Conftest.py b/3rdParty/SCons/scons-local/SCons/Conftest.py
deleted file mode 100644
index 6327353..0000000
--- a/3rdParty/SCons/scons-local/SCons/Conftest.py
+++ /dev/null
@@ -1,784 +0,0 @@
-"""SCons.Conftest
-
-Autoconf-like configuration support; low level implementation of tests.
-"""
-
-#
-# Copyright (c) 2003 Stichting NLnet Labs
-# Copyright (c) 2001, 2002, 2003 Steven Knight
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-#
-# The purpose of this module is to define how a check is to be performed.
-# Use one of the Check...() functions below.
-#
-
-#
-# A context class is used that defines functions for carrying out the tests,
-# logging and messages. The following methods and members must be present:
-#
-# context.Display(msg) Function called to print messages that are normally
-# displayed for the user. Newlines are explicitly used.
-# The text should also be written to the logfile!
-#
-# context.Log(msg) Function called to write to a log file.
-#
-# context.BuildProg(text, ext)
-# Function called to build a program, using "ext" for the
-# file extention. Must return an empty string for
-# success, an error message for failure.
-# For reliable test results building should be done just
-# like an actual program would be build, using the same
-# command and arguments (including configure results so
-# far).
-#
-# context.CompileProg(text, ext)
-# Function called to compile a program, using "ext" for
-# the file extention. Must return an empty string for
-# success, an error message for failure.
-# For reliable test results compiling should be done just
-# like an actual source file would be compiled, using the
-# same command and arguments (including configure results
-# so far).
-#
-# context.AppendLIBS(lib_name_list)
-# Append "lib_name_list" to the value of LIBS.
-# "lib_namelist" is a list of strings.
-# Return the value of LIBS before changing it (any type
-# can be used, it is passed to SetLIBS() later.
-#
-# context.SetLIBS(value)
-# Set LIBS to "value". The type of "value" is what
-# AppendLIBS() returned.
-# Return the value of LIBS before changing it (any type
-# can be used, it is passed to SetLIBS() later.
-#
-# context.headerfilename
-# Name of file to append configure results to, usually
-# "confdefs.h".
-# The file must not exist or be empty when starting.
-# Empty or None to skip this (some tests will not work!).
-#
-# context.config_h (may be missing). If present, must be a string, which
-# will be filled with the contents of a config_h file.
-#
-# context.vardict Dictionary holding variables used for the tests and
-# stores results from the tests, used for the build
-# commands.
-# Normally contains "CC", "LIBS", "CPPFLAGS", etc.
-#
-# context.havedict Dictionary holding results from the tests that are to
-# be used inside a program.
-# Names often start with "HAVE_". These are zero
-# (feature not present) or one (feature present). Other
-# variables may have any value, e.g., "PERLVERSION" can
-# be a number and "SYSTEMNAME" a string.
-#
-
-import re
-import string
-from types import IntType
-
-#
-# PUBLIC VARIABLES
-#
-
-LogInputFiles = 1 # Set that to log the input files in case of a failed test
-LogErrorMessages = 1 # Set that to log Conftest-generated error messages
-
-#
-# PUBLIC FUNCTIONS
-#
-
-# Generic remarks:
-# - When a language is specified which is not supported the test fails. The
-# message is a bit different, because not all the arguments for the normal
-# message are available yet (chicken-egg problem).
-
-
-def CheckBuilder(context, text = None, language = None):
- """
- Configure check to see if the compiler works.
- Note that this uses the current value of compiler and linker flags, make
- sure $CFLAGS, $CPPFLAGS and $LIBS are set correctly.
- "language" should be "C" or "C++" and is used to select the compiler.
- Default is "C".
- "text" may be used to specify the code to be build.
- Returns an empty string for success, an error message for failure.
- """
- lang, suffix, msg = _lang2suffix(language)
- if msg:
- context.Display("%s\n" % msg)
- return msg
-
- if not text:
- text = """
-int main() {
- return 0;
-}
-"""
-
- context.Display("Checking if building a %s file works... " % lang)
- ret = context.BuildProg(text, suffix)
- _YesNoResult(context, ret, None, text)
- return ret
-
-def CheckCC(context):
- """
- Configure check for a working C compiler.
-
- This checks whether the C compiler, as defined in the $CC construction
- variable, can compile a C source file. It uses the current $CCCOM value
- too, so that it can test against non working flags.
-
- """
- context.Display("Checking whether the C compiler works")
- text = """
-int main()
-{
- return 0;
-}
-"""
- ret = _check_empty_program(context, 'CC', text, 'C')
- _YesNoResult(context, ret, None, text)
- return ret
-
-def CheckSHCC(context):
- """
- Configure check for a working shared C compiler.
-
- This checks whether the C compiler, as defined in the $SHCC construction
- variable, can compile a C source file. It uses the current $SHCCCOM value
- too, so that it can test against non working flags.
-
- """
- context.Display("Checking whether the (shared) C compiler works")
- text = """
-int foo()
-{
- return 0;
-}
-"""
- ret = _check_empty_program(context, 'SHCC', text, 'C', use_shared = True)
- _YesNoResult(context, ret, None, text)
- return ret
-
-def CheckCXX(context):
- """
- Configure check for a working CXX compiler.
-
- This checks whether the CXX compiler, as defined in the $CXX construction
- variable, can compile a CXX source file. It uses the current $CXXCOM value
- too, so that it can test against non working flags.
-
- """
- context.Display("Checking whether the C++ compiler works")
- text = """
-int main()
-{
- return 0;
-}
-"""
- ret = _check_empty_program(context, 'CXX', text, 'C++')
- _YesNoResult(context, ret, None, text)
- return ret
-
-def CheckSHCXX(context):
- """
- Configure check for a working shared CXX compiler.
-
- This checks whether the CXX compiler, as defined in the $SHCXX construction
- variable, can compile a CXX source file. It uses the current $SHCXXCOM value
- too, so that it can test against non working flags.
-
- """
- context.Display("Checking whether the (shared) C++ compiler works")
- text = """
-int main()
-{
- return 0;
-}
-"""
- ret = _check_empty_program(context, 'SHCXX', text, 'C++', use_shared = True)
- _YesNoResult(context, ret, None, text)
- return ret
-
-def _check_empty_program(context, comp, text, language, use_shared = False):
- """Return 0 on success, 1 otherwise."""
- if not context.env.has_key(comp) or not context.env[comp]:
- # The compiler construction variable is not set or empty
- return 1
-
- lang, suffix, msg = _lang2suffix(language)
- if msg:
- return 1
-
- if use_shared:
- return context.CompileSharedObject(text, suffix)
- else:
- return context.CompileProg(text, suffix)
-
-
-def CheckFunc(context, function_name, header = None, language = None):
- """
- Configure check for a function "function_name".
- "language" should be "C" or "C++" and is used to select the compiler.
- Default is "C".
- Optional "header" can be defined to define a function prototype, include a
- header file or anything else that comes before main().
- Sets HAVE_function_name in context.havedict according to the result.
- Note that this uses the current value of compiler and linker flags, make
- sure $CFLAGS, $CPPFLAGS and $LIBS are set correctly.
- Returns an empty string for success, an error message for failure.
- """
-
- # Remarks from autoconf:
- # - Don't include <ctype.h> because on OSF/1 3.0 it includes <sys/types.h>
- # which includes <sys/select.h> which contains a prototype for select.
- # Similarly for bzero.
- # - assert.h is included to define __stub macros and hopefully few
- # prototypes, which can conflict with char $1(); below.
- # - Override any gcc2 internal prototype to avoid an error.
- # - We use char for the function declaration because int might match the
- # return type of a gcc2 builtin and then its argument prototype would
- # still apply.
- # - The GNU C library defines this for functions which it implements to
- # always fail with ENOSYS. Some functions are actually named something
- # starting with __ and the normal name is an alias.
-
- if context.headerfilename:
- includetext = '#include "%s"' % context.headerfilename
- else:
- includetext = ''
- if not header:
- header = """
-#ifdef __cplusplus
-extern "C"
-#endif
-char %s();""" % function_name
-
- lang, suffix, msg = _lang2suffix(language)
- if msg:
- context.Display("Cannot check for %s(): %s\n" % (function_name, msg))
- return msg
-
- text = """
-%(include)s
-#include <assert.h>
-%(hdr)s
-
-int main() {
-#if defined (__stub_%(name)s) || defined (__stub___%(name)s)
- fail fail fail
-#else
- %(name)s();
-#endif
-
- return 0;
-}
-""" % { 'name': function_name,
- 'include': includetext,
- 'hdr': header }
-
- context.Display("Checking for %s function %s()... " % (lang, function_name))
- ret = context.BuildProg(text, suffix)
- _YesNoResult(context, ret, "HAVE_" + function_name, text,
- "Define to 1 if the system has the function `%s'." %\
- function_name)
- return ret
-
-
-def CheckHeader(context, header_name, header = None, language = None,
- include_quotes = None):
- """
- Configure check for a C or C++ header file "header_name".
- Optional "header" can be defined to do something before including the
- header file (unusual, supported for consistency).
- "language" should be "C" or "C++" and is used to select the compiler.
- Default is "C".
- Sets HAVE_header_name in context.havedict according to the result.
- Note that this uses the current value of compiler and linker flags, make
- sure $CFLAGS and $CPPFLAGS are set correctly.
- Returns an empty string for success, an error message for failure.
- """
- # Why compile the program instead of just running the preprocessor?
- # It is possible that the header file exists, but actually using it may
- # fail (e.g., because it depends on other header files). Thus this test is
- # more strict. It may require using the "header" argument.
- #
- # Use <> by default, because the check is normally used for system header
- # files. SCons passes '""' to overrule this.
-
- # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H.
- if context.headerfilename:
- includetext = '#include "%s"\n' % context.headerfilename
- else:
- includetext = ''
- if not header:
- header = ""
-
- lang, suffix, msg = _lang2suffix(language)
- if msg:
- context.Display("Cannot check for header file %s: %s\n"
- % (header_name, msg))
- return msg
-
- if not include_quotes:
- include_quotes = "<>"
-
- text = "%s%s\n#include %s%s%s\n\n" % (includetext, header,
- include_quotes[0], header_name, include_quotes[1])
-
- context.Display("Checking for %s header file %s... " % (lang, header_name))
- ret = context.CompileProg(text, suffix)
- _YesNoResult(context, ret, "HAVE_" + header_name, text,
- "Define to 1 if you have the <%s> header file." % header_name)
- return ret
-
-
-def CheckType(context, type_name, fallback = None,
- header = None, language = None):
- """
- Configure check for a C or C++ type "type_name".
- Optional "header" can be defined to include a header file.
- "language" should be "C" or "C++" and is used to select the compiler.
- Default is "C".
- Sets HAVE_type_name in context.havedict according to the result.
- Note that this uses the current value of compiler and linker flags, make
- sure $CFLAGS, $CPPFLAGS and $LIBS are set correctly.
- Returns an empty string for success, an error message for failure.
- """
-
- # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H.
- if context.headerfilename:
- includetext = '#include "%s"' % context.headerfilename
- else:
- includetext = ''
- if not header:
- header = ""
-
- lang, suffix, msg = _lang2suffix(language)
- if msg:
- context.Display("Cannot check for %s type: %s\n" % (type_name, msg))
- return msg
-
- # Remarks from autoconf about this test:
- # - Grepping for the type in include files is not reliable (grep isn't
- # portable anyway).
- # - Using "TYPE my_var;" doesn't work for const qualified types in C++.
- # Adding an initializer is not valid for some C++ classes.
- # - Using the type as parameter to a function either fails for K&$ C or for
- # C++.
- # - Using "TYPE *my_var;" is valid in C for some types that are not
- # declared (struct something).
- # - Using "sizeof(TYPE)" is valid when TYPE is actually a variable.
- # - Using the previous two together works reliably.
- text = """
-%(include)s
-%(header)s
-
-int main() {
- if ((%(name)s *) 0)
- return 0;
- if (sizeof (%(name)s))
- return 0;
-}
-""" % { 'include': includetext,
- 'header': header,
- 'name': type_name }
-
- context.Display("Checking for %s type %s... " % (lang, type_name))
- ret = context.BuildProg(text, suffix)
- _YesNoResult(context, ret, "HAVE_" + type_name, text,
- "Define to 1 if the system has the type `%s'." % type_name)
- if ret and fallback and context.headerfilename:
- f = open(context.headerfilename, "a")
- f.write("typedef %s %s;\n" % (fallback, type_name))
- f.close()
-
- return ret
-
-def CheckTypeSize(context, type_name, header = None, language = None, expect = None):
- """This check can be used to get the size of a given type, or to check whether
- the type is of expected size.
-
- Arguments:
- - type : str
- the type to check
- - includes : sequence
- list of headers to include in the test code before testing the type
- - language : str
- 'C' or 'C++'
- - expect : int
- if given, will test wether the type has the given number of bytes.
- If not given, will automatically find the size.
-
- Returns:
- status : int
- 0 if the check failed, or the found size of the type if the check succeeded."""
-
- # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H.
- if context.headerfilename:
- includetext = '#include "%s"' % context.headerfilename
- else:
- includetext = ''
-
- if not header:
- header = ""
-
- lang, suffix, msg = _lang2suffix(language)
- if msg:
- context.Display("Cannot check for %s type: %s\n" % (type_name, msg))
- return msg
-
- src = includetext + header
- if not expect is None:
- # Only check if the given size is the right one
- context.Display('Checking %s is %d bytes... ' % (type_name, expect))
-
- # test code taken from autoconf: this is a pretty clever hack to find that
- # a type is of a given size using only compilation. This speeds things up
- # quite a bit compared to straightforward code using TryRun
- src = src + r"""
-typedef %s scons_check_type;
-
-int main()
-{
- static int test_array[1 - 2 * !(((long int) (sizeof(scons_check_type))) == %d)];
- test_array[0] = 0;
-
- return 0;
-}
-"""
-
- st = context.CompileProg(src % (type_name, expect), suffix)
- if not st:
- context.Display("yes\n")
- _Have(context, "SIZEOF_%s" % type_name, expect,
- "The size of `%s', as computed by sizeof." % type_name)
- return expect
- else:
- context.Display("no\n")
- _LogFailed(context, src, st)
- return 0
- else:
- # Only check if the given size is the right one
- context.Message('Checking size of %s ... ' % type_name)
-
- # We have to be careful with the program we wish to test here since
- # compilation will be attempted using the current environment's flags.
- # So make sure that the program will compile without any warning. For
- # example using: 'int main(int argc, char** argv)' will fail with the
- # '-Wall -Werror' flags since the variables argc and argv would not be
- # used in the program...
- #
- src = src + """
-#include <stdlib.h>
-#include <stdio.h>
-int main() {
- printf("%d", (int)sizeof(""" + type_name + """));
- return 0;
-}
- """
- st, out = context.RunProg(src, suffix)
- try:
- size = int(out)
- except ValueError:
- # If cannot convert output of test prog to an integer (the size),
- # something went wront, so just fail
- st = 1
- size = 0
-
- if not st:
- context.Display("yes\n")
- _Have(context, "SIZEOF_%s" % type_name, size,
- "The size of `%s', as computed by sizeof." % type_name)
- return size
- else:
- context.Display("no\n")
- _LogFailed(context, src, st)
- return 0
-
- return 0
-
-def CheckDeclaration(context, symbol, includes = None, language = None):
- """Checks whether symbol is declared.
-
- Use the same test as autoconf, that is test whether the symbol is defined
- as a macro or can be used as an r-value.
-
- Arguments:
- symbol : str
- the symbol to check
- includes : str
- Optional "header" can be defined to include a header file.
- language : str
- only C and C++ supported.
-
- Returns:
- status : bool
- True if the check failed, False if succeeded."""
-
- # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H.
- if context.headerfilename:
- includetext = '#include "%s"' % context.headerfilename
- else:
- includetext = ''
-
- if not includes:
- includes = ""
-
- lang, suffix, msg = _lang2suffix(language)
- if msg:
- context.Display("Cannot check for declaration %s: %s\n" % (type_name, msg))
- return msg
-
- src = includetext + includes
- context.Display('Checking whether %s is declared... ' % symbol)
-
- src = src + r"""
-int main()
-{
-#ifndef %s
- (void) %s;
-#endif
- ;
- return 0;
-}
-""" % (symbol, symbol)
-
- st = context.CompileProg(src, suffix)
- _YesNoResult(context, st, "HAVE_DECL_" + symbol, src,
- "Set to 1 if %s is defined." % symbol)
- return st
-
-def CheckLib(context, libs, func_name = None, header = None,
- extra_libs = None, call = None, language = None, autoadd = 1):
- """
- Configure check for a C or C++ libraries "libs". Searches through
- the list of libraries, until one is found where the test succeeds.
- Tests if "func_name" or "call" exists in the library. Note: if it exists
- in another library the test succeeds anyway!
- Optional "header" can be defined to include a header file. If not given a
- default prototype for "func_name" is added.
- Optional "extra_libs" is a list of library names to be added after
- "lib_name" in the build command. To be used for libraries that "lib_name"
- depends on.
- Optional "call" replaces the call to "func_name" in the test code. It must
- consist of complete C statements, including a trailing ";".
- Both "func_name" and "call" arguments are optional, and in that case, just
- linking against the libs is tested.
- "language" should be "C" or "C++" and is used to select the compiler.
- Default is "C".
- Note that this uses the current value of compiler and linker flags, make
- sure $CFLAGS, $CPPFLAGS and $LIBS are set correctly.
- Returns an empty string for success, an error message for failure.
- """
- # Include "confdefs.h" first, so that the header can use HAVE_HEADER_H.
- if context.headerfilename:
- includetext = '#include "%s"' % context.headerfilename
- else:
- includetext = ''
- if not header:
- header = ""
-
- text = """
-%s
-%s""" % (includetext, header)
-
- # Add a function declaration if needed.
- if func_name and func_name != "main":
- if not header:
- text = text + """
-#ifdef __cplusplus
-extern "C"
-#endif
-char %s();
-""" % func_name
-
- # The actual test code.
- if not call:
- call = "%s();" % func_name
-
- # if no function to test, leave main() blank
- text = text + """
-int
-main() {
- %s
-return 0;
-}
-""" % (call or "")
-
- if call:
- i = string.find(call, "\n")
- if i > 0:
- calltext = call[:i] + ".."
- elif call[-1] == ';':
- calltext = call[:-1]
- else:
- calltext = call
-
- for lib_name in libs:
-
- lang, suffix, msg = _lang2suffix(language)
- if msg:
- context.Display("Cannot check for library %s: %s\n" % (lib_name, msg))
- return msg
-
- # if a function was specified to run in main(), say it
- if call:
- context.Display("Checking for %s in %s library %s... "
- % (calltext, lang, lib_name))
- # otherwise, just say the name of library and language
- else:
- context.Display("Checking for %s library %s... "
- % (lang, lib_name))
-
- if lib_name:
- l = [ lib_name ]
- if extra_libs:
- l.extend(extra_libs)
- oldLIBS = context.AppendLIBS(l)
- sym = "HAVE_LIB" + lib_name
- else:
- oldLIBS = -1
- sym = None
-
- ret = context.BuildProg(text, suffix)
-
- _YesNoResult(context, ret, sym, text,
- "Define to 1 if you have the `%s' library." % lib_name)
- if oldLIBS != -1 and (ret or not autoadd):
- context.SetLIBS(oldLIBS)
-
- if not ret:
- return ret
-
- return ret
-
-#
-# END OF PUBLIC FUNCTIONS
-#
-
-def _YesNoResult(context, ret, key, text, comment = None):
- """
- Handle the result of a test with a "yes" or "no" result.
- "ret" is the return value: empty if OK, error message when not.
- "key" is the name of the symbol to be defined (HAVE_foo).
- "text" is the source code of the program used for testing.
- "comment" is the C comment to add above the line defining the symbol (the
- comment is automatically put inside a /* */). If None, no comment is added.
- """
- if key:
- _Have(context, key, not ret, comment)
- if ret:
- context.Display("no\n")
- _LogFailed(context, text, ret)
- else:
- context.Display("yes\n")
-
-
-def _Have(context, key, have, comment = None):
- """
- Store result of a test in context.havedict and context.headerfilename.
- "key" is a "HAVE_abc" name. It is turned into all CAPITALS and non-
- alphanumerics are replaced by an underscore.
- The value of "have" can be:
- 1 - Feature is defined, add "#define key".
- 0 - Feature is not defined, add "/* #undef key */".
- Adding "undef" is what autoconf does. Not useful for the
- compiler, but it shows that the test was done.
- number - Feature is defined to this number "#define key have".
- Doesn't work for 0 or 1, use a string then.
- string - Feature is defined to this string "#define key have".
- Give "have" as is should appear in the header file, include quotes
- when desired and escape special characters!
- """
- key_up = string.upper(key)
- key_up = re.sub('[^A-Z0-9_]', '_', key_up)
- context.havedict[key_up] = have
- if have == 1:
- line = "#define %s 1\n" % key_up
- elif have == 0:
- line = "/* #undef %s */\n" % key_up
- elif type(have) == IntType:
- line = "#define %s %d\n" % (key_up, have)
- else:
- line = "#define %s %s\n" % (key_up, str(have))
-
- if comment is not None:
- lines = "\n/* %s */\n" % comment + line
- else:
- lines = "\n" + line
-
- if context.headerfilename:
- f = open(context.headerfilename, "a")
- f.write(lines)
- f.close()
- elif hasattr(context,'config_h'):
- context.config_h = context.config_h + lines
-
-
-def _LogFailed(context, text, msg):
- """
- Write to the log about a failed program.
- Add line numbers, so that error messages can be understood.
- """
- if LogInputFiles:
- context.Log("Failed program was:\n")
- lines = string.split(text, '\n')
- if len(lines) and lines[-1] == '':
- lines = lines[:-1] # remove trailing empty line
- n = 1
- for line in lines:
- context.Log("%d: %s\n" % (n, line))
- n = n + 1
- if LogErrorMessages:
- context.Log("Error message: %s\n" % msg)
-
-
-def _lang2suffix(lang):
- """
- Convert a language name to a suffix.
- When "lang" is empty or None C is assumed.
- Returns a tuple (lang, suffix, None) when it works.
- For an unrecognized language returns (None, None, msg).
- Where:
- lang = the unified language name
- suffix = the suffix, including the leading dot
- msg = an error message
- """
- if not lang or lang in ["C", "c"]:
- return ("C", ".c", None)
- if lang in ["c++", "C++", "cpp", "CXX", "cxx"]:
- return ("C++", ".cpp", None)
-
- return None, None, "Unsupported language: %s" % lang
-
-
-# vim: set sw=4 et sts=4 tw=79 fo+=l:
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Debug.py b/3rdParty/SCons/scons-local/SCons/Debug.py
deleted file mode 100644
index cc7041d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Debug.py
+++ /dev/null
@@ -1,222 +0,0 @@
-"""SCons.Debug
-
-Code for debugging SCons internal things. Not everything here is
-guaranteed to work all the way back to Python 1.5.2, and shouldn't be
-needed by most users.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Debug.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import string
-import sys
-
-# Recipe 14.10 from the Python Cookbook.
-try:
- import weakref
-except ImportError:
- def logInstanceCreation(instance, name=None):
- pass
-else:
- def logInstanceCreation(instance, name=None):
- if name is None:
- name = instance.__class__.__name__
- if not tracked_classes.has_key(name):
- tracked_classes[name] = []
- tracked_classes[name].append(weakref.ref(instance))
-
-
-
-tracked_classes = {}
-
-def string_to_classes(s):
- if s == '*':
- c = tracked_classes.keys()
- c.sort()
- return c
- else:
- return string.split(s)
-
-def fetchLoggedInstances(classes="*"):
- classnames = string_to_classes(classes)
- return map(lambda cn: (cn, len(tracked_classes[cn])), classnames)
-
-def countLoggedInstances(classes, file=sys.stdout):
- for classname in string_to_classes(classes):
- file.write("%s: %d\n" % (classname, len(tracked_classes[classname])))
-
-def listLoggedInstances(classes, file=sys.stdout):
- for classname in string_to_classes(classes):
- file.write('\n%s:\n' % classname)
- for ref in tracked_classes[classname]:
- obj = ref()
- if obj is not None:
- file.write(' %s\n' % repr(obj))
-
-def dumpLoggedInstances(classes, file=sys.stdout):
- for classname in string_to_classes(classes):
- file.write('\n%s:\n' % classname)
- for ref in tracked_classes[classname]:
- obj = ref()
- if obj is not None:
- file.write(' %s:\n' % obj)
- for key, value in obj.__dict__.items():
- file.write(' %20s : %s\n' % (key, value))
-
-
-
-if sys.platform[:5] == "linux":
- # Linux doesn't actually support memory usage stats from getrusage().
- def memory():
- mstr = open('/proc/self/stat').read()
- mstr = string.split(mstr)[22]
- return int(mstr)
-else:
- try:
- import resource
- except ImportError:
- try:
- import win32process
- import win32api
- except ImportError:
- def memory():
- return 0
- else:
- def memory():
- process_handle = win32api.GetCurrentProcess()
- memory_info = win32process.GetProcessMemoryInfo( process_handle )
- return memory_info['PeakWorkingSetSize']
- else:
- def memory():
- res = resource.getrusage(resource.RUSAGE_SELF)
- return res[4]
-
-# returns caller's stack
-def caller_stack(*backlist):
- import traceback
- if not backlist:
- backlist = [0]
- result = []
- for back in backlist:
- tb = traceback.extract_stack(limit=3+back)
- key = tb[0][:3]
- result.append('%s:%d(%s)' % func_shorten(key))
- return result
-
-caller_bases = {}
-caller_dicts = {}
-
-# trace a caller's stack
-def caller_trace(back=0):
- import traceback
- tb = traceback.extract_stack(limit=3+back)
- tb.reverse()
- callee = tb[1][:3]
- caller_bases[callee] = caller_bases.get(callee, 0) + 1
- for caller in tb[2:]:
- caller = callee + caller[:3]
- try:
- entry = caller_dicts[callee]
- except KeyError:
- caller_dicts[callee] = entry = {}
- entry[caller] = entry.get(caller, 0) + 1
- callee = caller
-
-# print a single caller and its callers, if any
-def _dump_one_caller(key, file, level=0):
- l = []
- for c,v in caller_dicts[key].items():
- l.append((-v,c))
- l.sort()
- leader = ' '*level
- for v,c in l:
- file.write("%s %6d %s:%d(%s)\n" % ((leader,-v) + func_shorten(c[-3:])))
- if caller_dicts.has_key(c):
- _dump_one_caller(c, file, level+1)
-
-# print each call tree
-def dump_caller_counts(file=sys.stdout):
- keys = caller_bases.keys()
- keys.sort()
- for k in keys:
- file.write("Callers of %s:%d(%s), %d calls:\n"
- % (func_shorten(k) + (caller_bases[k],)))
- _dump_one_caller(k, file)
-
-shorten_list = [
- ( '/scons/SCons/', 1),
- ( '/src/engine/SCons/', 1),
- ( '/usr/lib/python', 0),
-]
-
-if os.sep != '/':
- def platformize(t):
- return (string.replace(t[0], '/', os.sep), t[1])
- shorten_list = map(platformize, shorten_list)
- del platformize
-
-def func_shorten(func_tuple):
- f = func_tuple[0]
- for t in shorten_list:
- i = string.find(f, t[0])
- if i >= 0:
- if t[1]:
- i = i + len(t[0])
- return (f[i:],)+func_tuple[1:]
- return func_tuple
-
-
-TraceFP = {}
-if sys.platform == 'win32':
- TraceDefault = 'con'
-else:
- TraceDefault = '/dev/tty'
-
-def Trace(msg, file=None, mode='w'):
- """Write a trace message to a file. Whenever a file is specified,
- it becomes the default for the next call to Trace()."""
- global TraceDefault
- if file is None:
- file = TraceDefault
- else:
- TraceDefault = file
- try:
- fp = TraceFP[file]
- except KeyError:
- try:
- fp = TraceFP[file] = open(file, mode)
- except TypeError:
- # Assume we were passed an open file pointer.
- fp = file
- fp.write(msg)
- fp.flush()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Defaults.py b/3rdParty/SCons/scons-local/SCons/Defaults.py
deleted file mode 100644
index d52bf59..0000000
--- a/3rdParty/SCons/scons-local/SCons/Defaults.py
+++ /dev/null
@@ -1,478 +0,0 @@
-"""SCons.Defaults
-
-Builders and other things for the local site. Here's where we'll
-duplicate the functionality of autoconf until we move it into the
-installation procedure or use something like qmconf.
-
-The code that reads the registry to find MSVC components was borrowed
-from distutils.msvccompiler.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Defaults.py 4043 2009/02/23 09:06:45 scons"
-
-
-
-import os
-import os.path
-import errno
-import shutil
-import stat
-import string
-import time
-import types
-import sys
-
-import SCons.Action
-import SCons.Builder
-import SCons.CacheDir
-import SCons.Environment
-import SCons.PathList
-import SCons.Subst
-import SCons.Tool
-
-# A placeholder for a default Environment (for fetching source files
-# from source code management systems and the like). This must be
-# initialized later, after the top-level directory is set by the calling
-# interface.
-_default_env = None
-
-# Lazily instantiate the default environment so the overhead of creating
-# it doesn't apply when it's not needed.
-def _fetch_DefaultEnvironment(*args, **kw):
- """
- Returns the already-created default construction environment.
- """
- global _default_env
- return _default_env
-
-def DefaultEnvironment(*args, **kw):
- """
- Initial public entry point for creating the default construction
- Environment.
-
- After creating the environment, we overwrite our name
- (DefaultEnvironment) with the _fetch_DefaultEnvironment() function,
- which more efficiently returns the initialized default construction
- environment without checking for its existence.
-
- (This function still exists with its _default_check because someone
- else (*cough* Script/__init__.py *cough*) may keep a reference
- to this function. So we can't use the fully functional idiom of
- having the name originally be a something that *only* creates the
- construction environment and then overwrites the name.)
- """
- global _default_env
- if not _default_env:
- import SCons.Util
- _default_env = apply(SCons.Environment.Environment, args, kw)
- if SCons.Util.md5:
- _default_env.Decider('MD5')
- else:
- _default_env.Decider('timestamp-match')
- global DefaultEnvironment
- DefaultEnvironment = _fetch_DefaultEnvironment
- _default_env._CacheDir_path = None
- return _default_env
-
-# Emitters for setting the shared attribute on object files,
-# and an action for checking that all of the source files
-# going into a shared library are, in fact, shared.
-def StaticObjectEmitter(target, source, env):
- for tgt in target:
- tgt.attributes.shared = None
- return (target, source)
-
-def SharedObjectEmitter(target, source, env):
- for tgt in target:
- tgt.attributes.shared = 1
- return (target, source)
-
-def SharedFlagChecker(source, target, env):
- same = env.subst('$STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME')
- if same == '0' or same == '' or same == 'False':
- for src in source:
- try:
- shared = src.attributes.shared
- except AttributeError:
- shared = None
- if not shared:
- raise SCons.Errors.UserError, "Source file: %s is static and is not compatible with shared target: %s" % (src, target[0])
-
-SharedCheck = SCons.Action.Action(SharedFlagChecker, None)
-
-# Some people were using these variable name before we made
-# SourceFileScanner part of the public interface. Don't break their
-# SConscript files until we've given them some fair warning and a
-# transition period.
-CScan = SCons.Tool.CScanner
-DScan = SCons.Tool.DScanner
-LaTeXScan = SCons.Tool.LaTeXScanner
-ObjSourceScan = SCons.Tool.SourceFileScanner
-ProgScan = SCons.Tool.ProgramScanner
-
-# These aren't really tool scanners, so they don't quite belong with
-# the rest of those in Tool/__init__.py, but I'm not sure where else
-# they should go. Leave them here for now.
-import SCons.Scanner.Dir
-DirScanner = SCons.Scanner.Dir.DirScanner()
-DirEntryScanner = SCons.Scanner.Dir.DirEntryScanner()
-
-# Actions for common languages.
-CAction = SCons.Action.Action("$CCCOM", "$CCCOMSTR")
-ShCAction = SCons.Action.Action("$SHCCCOM", "$SHCCCOMSTR")
-CXXAction = SCons.Action.Action("$CXXCOM", "$CXXCOMSTR")
-ShCXXAction = SCons.Action.Action("$SHCXXCOM", "$SHCXXCOMSTR")
-
-ASAction = SCons.Action.Action("$ASCOM", "$ASCOMSTR")
-ASPPAction = SCons.Action.Action("$ASPPCOM", "$ASPPCOMSTR")
-
-LinkAction = SCons.Action.Action("$LINKCOM", "$LINKCOMSTR")
-ShLinkAction = SCons.Action.Action("$SHLINKCOM", "$SHLINKCOMSTR")
-
-LdModuleLinkAction = SCons.Action.Action("$LDMODULECOM", "$LDMODULECOMSTR")
-
-# Common tasks that we allow users to perform in platform-independent
-# ways by creating ActionFactory instances.
-ActionFactory = SCons.Action.ActionFactory
-
-def get_paths_str(dest):
- # If dest is a list, we need to manually call str() on each element
- if SCons.Util.is_List(dest):
- elem_strs = []
- for element in dest:
- elem_strs.append('"' + str(element) + '"')
- return '[' + string.join(elem_strs, ', ') + ']'
- else:
- return '"' + str(dest) + '"'
-
-def chmod_func(dest, mode):
- SCons.Node.FS.invalidate_node_memos(dest)
- if not SCons.Util.is_List(dest):
- dest = [dest]
- for element in dest:
- os.chmod(str(element), mode)
-
-def chmod_strfunc(dest, mode):
- return 'Chmod(%s, 0%o)' % (get_paths_str(dest), mode)
-
-Chmod = ActionFactory(chmod_func, chmod_strfunc)
-
-def copy_func(dest, src):
- SCons.Node.FS.invalidate_node_memos(dest)
- if SCons.Util.is_List(src) and os.path.isdir(dest):
- for file in src:
- shutil.copy2(file, dest)
- return 0
- elif os.path.isfile(src):
- return shutil.copy2(src, dest)
- else:
- return shutil.copytree(src, dest, 1)
-
-Copy = ActionFactory(copy_func,
- lambda dest, src: 'Copy("%s", "%s")' % (dest, src),
- convert=str)
-
-def delete_func(dest, must_exist=0):
- SCons.Node.FS.invalidate_node_memos(dest)
- if not SCons.Util.is_List(dest):
- dest = [dest]
- for entry in dest:
- entry = str(entry)
- if not must_exist and not os.path.exists(entry):
- continue
- if not os.path.exists(entry) or os.path.isfile(entry):
- os.unlink(entry)
- continue
- else:
- shutil.rmtree(entry, 1)
- continue
-
-def delete_strfunc(dest, must_exist=0):
- return 'Delete(%s)' % get_paths_str(dest)
-
-Delete = ActionFactory(delete_func, delete_strfunc)
-
-def mkdir_func(dest):
- SCons.Node.FS.invalidate_node_memos(dest)
- if not SCons.Util.is_List(dest):
- dest = [dest]
- for entry in dest:
- try:
- os.makedirs(str(entry))
- except os.error, e:
- p = str(entry)
- if (e[0] == errno.EEXIST or (sys.platform=='win32' and e[0]==183)) \
- and os.path.isdir(str(entry)):
- pass # not an error if already exists
- else:
- raise
-
-Mkdir = ActionFactory(mkdir_func,
- lambda dir: 'Mkdir(%s)' % get_paths_str(dir))
-
-def move_func(dest, src):
- SCons.Node.FS.invalidate_node_memos(dest)
- SCons.Node.FS.invalidate_node_memos(src)
- os.rename(src, dest)
-
-Move = ActionFactory(move_func,
- lambda dest, src: 'Move("%s", "%s")' % (dest, src),
- convert=str)
-
-def touch_func(dest):
- SCons.Node.FS.invalidate_node_memos(dest)
- if not SCons.Util.is_List(dest):
- dest = [dest]
- for file in dest:
- file = str(file)
- mtime = int(time.time())
- if os.path.exists(file):
- atime = os.path.getatime(file)
- else:
- open(file, 'w')
- atime = mtime
- os.utime(file, (atime, mtime))
-
-Touch = ActionFactory(touch_func,
- lambda file: 'Touch(%s)' % get_paths_str(file))
-
-# Internal utility functions
-
-def _concat(prefix, list, suffix, env, f=lambda x: x, target=None, source=None):
- """
- Creates a new list from 'list' by first interpolating each element
- in the list using the 'env' dictionary and then calling f on the
- list, and finally calling _concat_ixes to concatenate 'prefix' and
- 'suffix' onto each element of the list.
- """
- if not list:
- return list
-
- l = f(SCons.PathList.PathList(list).subst_path(env, target, source))
- if not l is None:
- list = l
-
- return _concat_ixes(prefix, list, suffix, env)
-
-def _concat_ixes(prefix, list, suffix, env):
- """
- Creates a new list from 'list' by concatenating the 'prefix' and
- 'suffix' arguments onto each element of the list. A trailing space
- on 'prefix' or leading space on 'suffix' will cause them to be put
- into separate list elements rather than being concatenated.
- """
-
- result = []
-
- # ensure that prefix and suffix are strings
- prefix = str(env.subst(prefix, SCons.Subst.SUBST_RAW))
- suffix = str(env.subst(suffix, SCons.Subst.SUBST_RAW))
-
- for x in list:
- if isinstance(x, SCons.Node.FS.File):
- result.append(x)
- continue
- x = str(x)
- if x:
-
- if prefix:
- if prefix[-1] == ' ':
- result.append(prefix[:-1])
- elif x[:len(prefix)] != prefix:
- x = prefix + x
-
- result.append(x)
-
- if suffix:
- if suffix[0] == ' ':
- result.append(suffix[1:])
- elif x[-len(suffix):] != suffix:
- result[-1] = result[-1]+suffix
-
- return result
-
-def _stripixes(prefix, list, suffix, stripprefixes, stripsuffixes, env, c=None):
- """
- This is a wrapper around _concat()/_concat_ixes() that checks for the
- existence of prefixes or suffixes on list elements and strips them
- where it finds them. This is used by tools (like the GNU linker)
- that need to turn something like 'libfoo.a' into '-lfoo'.
- """
-
- if not list:
- return list
-
- if not callable(c):
- env_c = env['_concat']
- if env_c != _concat and callable(env_c):
- # There's a custom _concat() method in the construction
- # environment, and we've allowed people to set that in
- # the past (see test/custom-concat.py), so preserve the
- # backwards compatibility.
- c = env_c
- else:
- c = _concat_ixes
-
- stripprefixes = map(env.subst, SCons.Util.flatten(stripprefixes))
- stripsuffixes = map(env.subst, SCons.Util.flatten(stripsuffixes))
-
- stripped = []
- for l in SCons.PathList.PathList(list).subst_path(env, None, None):
- if isinstance(l, SCons.Node.FS.File):
- stripped.append(l)
- continue
-
- if not SCons.Util.is_String(l):
- l = str(l)
-
- for stripprefix in stripprefixes:
- lsp = len(stripprefix)
- if l[:lsp] == stripprefix:
- l = l[lsp:]
- # Do not strip more than one prefix
- break
-
- for stripsuffix in stripsuffixes:
- lss = len(stripsuffix)
- if l[-lss:] == stripsuffix:
- l = l[:-lss]
- # Do not strip more than one suffix
- break
-
- stripped.append(l)
-
- return c(prefix, stripped, suffix, env)
-
-def _defines(prefix, defs, suffix, env, c=_concat_ixes):
- """A wrapper around _concat_ixes that turns a list or string
- into a list of C preprocessor command-line definitions.
- """
- if SCons.Util.is_List(defs):
- l = []
- for d in defs:
- if SCons.Util.is_List(d) or type(d) is types.TupleType:
- l.append(str(d[0]) + '=' + str(d[1]))
- else:
- l.append(str(d))
- elif SCons.Util.is_Dict(defs):
- # The items in a dictionary are stored in random order, but
- # if the order of the command-line options changes from
- # invocation to invocation, then the signature of the command
- # line will change and we'll get random unnecessary rebuilds.
- # Consequently, we have to sort the keys to ensure a
- # consistent order...
- l = []
- keys = defs.keys()
- keys.sort()
- for k in keys:
- v = defs[k]
- if v is None:
- l.append(str(k))
- else:
- l.append(str(k) + '=' + str(v))
- else:
- l = [str(defs)]
- return c(prefix, env.subst_path(l), suffix, env)
-
-class NullCmdGenerator:
- """This is a callable class that can be used in place of other
- command generators if you don't want them to do anything.
-
- The __call__ method for this class simply returns the thing
- you instantiated it with.
-
- Example usage:
- env["DO_NOTHING"] = NullCmdGenerator
- env["LINKCOM"] = "${DO_NOTHING('$LINK $SOURCES $TARGET')}"
- """
-
- def __init__(self, cmd):
- self.cmd = cmd
-
- def __call__(self, target, source, env, for_signature=None):
- return self.cmd
-
-class Variable_Method_Caller:
- """A class for finding a construction variable on the stack and
- calling one of its methods.
-
- We use this to support "construction variables" in our string
- eval()s that actually stand in for methods--specifically, use
- of "RDirs" in call to _concat that should actually execute the
- "TARGET.RDirs" method. (We used to support this by creating a little
- "build dictionary" that mapped RDirs to the method, but this got in
- the way of Memoizing construction environments, because we had to
- create new environment objects to hold the variables.)
- """
- def __init__(self, variable, method):
- self.variable = variable
- self.method = method
- def __call__(self, *args, **kw):
- try: 1/0
- except ZeroDivisionError:
- # Don't start iterating with the current stack-frame to
- # prevent creating reference cycles (f_back is safe).
- frame = sys.exc_info()[2].tb_frame.f_back
- variable = self.variable
- while frame:
- if frame.f_locals.has_key(variable):
- v = frame.f_locals[variable]
- if v:
- method = getattr(v, self.method)
- return apply(method, args, kw)
- frame = frame.f_back
- return None
-
-ConstructionEnvironment = {
- 'BUILDERS' : {},
- 'SCANNERS' : [],
- 'CONFIGUREDIR' : '#/.sconf_temp',
- 'CONFIGURELOG' : '#/config.log',
- 'CPPSUFFIXES' : SCons.Tool.CSuffixes,
- 'DSUFFIXES' : SCons.Tool.DSuffixes,
- 'ENV' : {},
- 'IDLSUFFIXES' : SCons.Tool.IDLSuffixes,
- 'LATEXSUFFIXES' : SCons.Tool.LaTeXSuffixes,
- '_concat' : _concat,
- '_defines' : _defines,
- '_stripixes' : _stripixes,
- '_LIBFLAGS' : '${_concat(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, __env__)}',
- '_LIBDIRFLAGS' : '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
- '_CPPINCFLAGS' : '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
- '_CPPDEFFLAGS' : '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}',
- 'TEMPFILE' : NullCmdGenerator,
- 'Dir' : Variable_Method_Caller('TARGET', 'Dir'),
- 'Dirs' : Variable_Method_Caller('TARGET', 'Dirs'),
- 'File' : Variable_Method_Caller('TARGET', 'File'),
- 'RDirs' : Variable_Method_Caller('TARGET', 'RDirs'),
-}
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Environment.py b/3rdParty/SCons/scons-local/SCons/Environment.py
deleted file mode 100644
index 9c04d73..0000000
--- a/3rdParty/SCons/scons-local/SCons/Environment.py
+++ /dev/null
@@ -1,2320 +0,0 @@
-"""SCons.Environment
-
-Base class for construction Environments. These are
-the primary objects used to communicate dependency and
-construction information to the build engine.
-
-Keyword arguments supplied when the construction Environment
-is created are construction variables used to initialize the
-Environment
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Environment.py 4043 2009/02/23 09:06:45 scons"
-
-
-import copy
-import os
-import sys
-import re
-import shlex
-import string
-from UserDict import UserDict
-
-import SCons.Action
-import SCons.Builder
-from SCons.Debug import logInstanceCreation
-import SCons.Defaults
-import SCons.Errors
-import SCons.Memoize
-import SCons.Node
-import SCons.Node.Alias
-import SCons.Node.FS
-import SCons.Node.Python
-import SCons.Platform
-import SCons.SConsign
-import SCons.Subst
-import SCons.Tool
-import SCons.Util
-import SCons.Warnings
-
-class _Null:
- pass
-
-_null = _Null
-
-_warn_copy_deprecated = True
-_warn_source_signatures_deprecated = True
-_warn_target_signatures_deprecated = True
-
-CleanTargets = {}
-CalculatorArgs = {}
-
-semi_deepcopy = SCons.Util.semi_deepcopy
-
-# Pull UserError into the global name space for the benefit of
-# Environment().SourceSignatures(), which has some import statements
-# which seem to mess up its ability to reference SCons directly.
-UserError = SCons.Errors.UserError
-
-def alias_builder(env, target, source):
- pass
-
-AliasBuilder = SCons.Builder.Builder(action = alias_builder,
- target_factory = SCons.Node.Alias.default_ans.Alias,
- source_factory = SCons.Node.FS.Entry,
- multi = 1,
- is_explicit = None,
- name='AliasBuilder')
-
-def apply_tools(env, tools, toolpath):
- # Store the toolpath in the Environment.
- if toolpath is not None:
- env['toolpath'] = toolpath
-
- if not tools:
- return
- # Filter out null tools from the list.
- for tool in filter(None, tools):
- if SCons.Util.is_List(tool) or type(tool)==type(()):
- toolname = tool[0]
- toolargs = tool[1] # should be a dict of kw args
- tool = apply(env.Tool, [toolname], toolargs)
- else:
- env.Tool(tool)
-
-# These names are (or will be) controlled by SCons; users should never
-# set or override them. This warning can optionally be turned off,
-# but scons will still ignore the illegal variable names even if it's off.
-reserved_construction_var_names = [
- 'CHANGED_SOURCES',
- 'CHANGED_TARGETS',
- 'SOURCE',
- 'SOURCES',
- 'TARGET',
- 'TARGETS',
- 'UNCHANGED_SOURCES',
- 'UNCHANGED_TARGETS',
-]
-
-future_reserved_construction_var_names = []
-
-def copy_non_reserved_keywords(dict):
- result = semi_deepcopy(dict)
- for k in result.keys():
- if k in reserved_construction_var_names:
- msg = "Ignoring attempt to set reserved variable `$%s'"
- SCons.Warnings.warn(SCons.Warnings.ReservedVariableWarning, msg % k)
- del result[k]
- return result
-
-def _set_reserved(env, key, value):
- msg = "Ignoring attempt to set reserved variable `$%s'"
- SCons.Warnings.warn(SCons.Warnings.ReservedVariableWarning, msg % key)
-
-def _set_future_reserved(env, key, value):
- env._dict[key] = value
- msg = "`$%s' will be reserved in a future release and setting it will become ignored"
- SCons.Warnings.warn(SCons.Warnings.FutureReservedVariableWarning, msg % key)
-
-def _set_BUILDERS(env, key, value):
- try:
- bd = env._dict[key]
- for k in bd.keys():
- del bd[k]
- except KeyError:
- bd = BuilderDict(kwbd, env)
- env._dict[key] = bd
- bd.update(value)
-
-def _del_SCANNERS(env, key):
- del env._dict[key]
- env.scanner_map_delete()
-
-def _set_SCANNERS(env, key, value):
- env._dict[key] = value
- env.scanner_map_delete()
-
-def _delete_duplicates(l, keep_last):
- """Delete duplicates from a sequence, keeping the first or last."""
- seen={}
- result=[]
- if keep_last: # reverse in & out, then keep first
- l.reverse()
- for i in l:
- try:
- if not seen.has_key(i):
- result.append(i)
- seen[i]=1
- except TypeError:
- # probably unhashable. Just keep it.
- result.append(i)
- if keep_last:
- result.reverse()
- return result
-
-
-
-# The following is partly based on code in a comment added by Peter
-# Shannon at the following page (there called the "transplant" class):
-#
-# ASPN : Python Cookbook : Dynamically added methods to a class
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81732
-#
-# We had independently been using the idiom as BuilderWrapper, but
-# factoring out the common parts into this base class, and making
-# BuilderWrapper a subclass that overrides __call__() to enforce specific
-# Builder calling conventions, simplified some of our higher-layer code.
-
-class MethodWrapper:
- """
- A generic Wrapper class that associates a method (which can
- actually be any callable) with an object. As part of creating this
- MethodWrapper object an attribute with the specified (by default,
- the name of the supplied method) is added to the underlying object.
- When that new "method" is called, our __call__() method adds the
- object as the first argument, simulating the Python behavior of
- supplying "self" on method calls.
-
- We hang on to the name by which the method was added to the underlying
- base class so that we can provide a method to "clone" ourselves onto
- a new underlying object being copied (without which we wouldn't need
- to save that info).
- """
- def __init__(self, object, method, name=None):
- if name is None:
- name = method.__name__
- self.object = object
- self.method = method
- self.name = name
- setattr(self.object, name, self)
-
- def __call__(self, *args, **kwargs):
- nargs = (self.object,) + args
- return apply(self.method, nargs, kwargs)
-
- def clone(self, new_object):
- """
- Returns an object that re-binds the underlying "method" to
- the specified new object.
- """
- return self.__class__(new_object, self.method, self.name)
-
-class BuilderWrapper(MethodWrapper):
- """
- A MethodWrapper subclass that that associates an environment with
- a Builder.
-
- This mainly exists to wrap the __call__() function so that all calls
- to Builders can have their argument lists massaged in the same way
- (treat a lone argument as the source, treat two arguments as target
- then source, make sure both target and source are lists) without
- having to have cut-and-paste code to do it.
-
- As a bit of obsessive backwards compatibility, we also intercept
- attempts to get or set the "env" or "builder" attributes, which were
- the names we used before we put the common functionality into the
- MethodWrapper base class. We'll keep this around for a while in case
- people shipped Tool modules that reached into the wrapper (like the
- Tool/qt.py module does, or did). There shouldn't be a lot attribute
- fetching or setting on these, so a little extra work shouldn't hurt.
- """
- def __call__(self, target=None, source=_null, *args, **kw):
- if source is _null:
- source = target
- target = None
- if not target is None and not SCons.Util.is_List(target):
- target = [target]
- if not source is None and not SCons.Util.is_List(source):
- source = [source]
- return apply(MethodWrapper.__call__, (self, target, source) + args, kw)
-
- def __repr__(self):
- return '<BuilderWrapper %s>' % repr(self.name)
-
- def __str__(self):
- return self.__repr__()
-
- def __getattr__(self, name):
- if name == 'env':
- return self.object
- elif name == 'builder':
- return self.method
- else:
- raise AttributeError, name
-
- def __setattr__(self, name, value):
- if name == 'env':
- self.object = value
- elif name == 'builder':
- self.method = value
- else:
- self.__dict__[name] = value
-
- # This allows a Builder to be executed directly
- # through the Environment to which it's attached.
- # In practice, we shouldn't need this, because
- # builders actually get executed through a Node.
- # But we do have a unit test for this, and can't
- # yet rule out that it would be useful in the
- # future, so leave it for now.
- #def execute(self, **kw):
- # kw['env'] = self.env
- # apply(self.builder.execute, (), kw)
-
-class BuilderDict(UserDict):
- """This is a dictionary-like class used by an Environment to hold
- the Builders. We need to do this because every time someone changes
- the Builders in the Environment's BUILDERS dictionary, we must
- update the Environment's attributes."""
- def __init__(self, dict, env):
- # Set self.env before calling the superclass initialization,
- # because it will end up calling our other methods, which will
- # need to point the values in this dictionary to self.env.
- self.env = env
- UserDict.__init__(self, dict)
-
- def __semi_deepcopy__(self):
- return self.__class__(self.data, self.env)
-
- def __setitem__(self, item, val):
- try:
- method = getattr(self.env, item).method
- except AttributeError:
- pass
- else:
- self.env.RemoveMethod(method)
- UserDict.__setitem__(self, item, val)
- BuilderWrapper(self.env, val, item)
-
- def __delitem__(self, item):
- UserDict.__delitem__(self, item)
- delattr(self.env, item)
-
- def update(self, dict):
- for i, v in dict.items():
- self.__setitem__(i, v)
-
-
-
-_is_valid_var = re.compile(r'[_a-zA-Z]\w*$')
-
-def is_valid_construction_var(varstr):
- """Return if the specified string is a legitimate construction
- variable.
- """
- return _is_valid_var.match(varstr)
-
-
-
-class SubstitutionEnvironment:
- """Base class for different flavors of construction environments.
-
- This class contains a minimal set of methods that handle contruction
- variable expansion and conversion of strings to Nodes, which may or
- may not be actually useful as a stand-alone class. Which methods
- ended up in this class is pretty arbitrary right now. They're
- basically the ones which we've empirically determined are common to
- the different construction environment subclasses, and most of the
- others that use or touch the underlying dictionary of construction
- variables.
-
- Eventually, this class should contain all the methods that we
- determine are necessary for a "minimal" interface to the build engine.
- A full "native Python" SCons environment has gotten pretty heavyweight
- with all of the methods and Tools and construction variables we've
- jammed in there, so it would be nice to have a lighter weight
- alternative for interfaces that don't need all of the bells and
- whistles. (At some point, we'll also probably rename this class
- "Base," since that more reflects what we want this class to become,
- but because we've released comments that tell people to subclass
- Environment.Base to create their own flavors of construction
- environment, we'll save that for a future refactoring when this
- class actually becomes useful.)
- """
-
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- def __init__(self, **kw):
- """Initialization of an underlying SubstitutionEnvironment class.
- """
- if __debug__: logInstanceCreation(self, 'Environment.SubstitutionEnvironment')
- self.fs = SCons.Node.FS.get_default_fs()
- self.ans = SCons.Node.Alias.default_ans
- self.lookup_list = SCons.Node.arg2nodes_lookups
- self._dict = kw.copy()
- self._init_special()
- self.added_methods = []
- #self._memo = {}
-
- def _init_special(self):
- """Initial the dispatch tables for special handling of
- special construction variables."""
- self._special_del = {}
- self._special_del['SCANNERS'] = _del_SCANNERS
-
- self._special_set = {}
- for key in reserved_construction_var_names:
- self._special_set[key] = _set_reserved
- for key in future_reserved_construction_var_names:
- self._special_set[key] = _set_future_reserved
- self._special_set['BUILDERS'] = _set_BUILDERS
- self._special_set['SCANNERS'] = _set_SCANNERS
-
- # Freeze the keys of self._special_set in a list for use by
- # methods that need to check. (Empirically, list scanning has
- # gotten better than dict.has_key() in Python 2.5.)
- self._special_set_keys = self._special_set.keys()
-
- def __cmp__(self, other):
- return cmp(self._dict, other._dict)
-
- def __delitem__(self, key):
- special = self._special_del.get(key)
- if special:
- special(self, key)
- else:
- del self._dict[key]
-
- def __getitem__(self, key):
- return self._dict[key]
-
- def __setitem__(self, key, value):
- # This is heavily used. This implementation is the best we have
- # according to the timings in bench/env.__setitem__.py.
- #
- # The "key in self._special_set_keys" test here seems to perform
- # pretty well for the number of keys we have. A hard-coded
- # list works a little better in Python 2.5, but that has the
- # disadvantage of maybe getting out of sync if we ever add more
- # variable names. Using self._special_set.has_key() works a
- # little better in Python 2.4, but is worse then this test.
- # So right now it seems like a good trade-off, but feel free to
- # revisit this with bench/env.__setitem__.py as needed (and
- # as newer versions of Python come out).
- if key in self._special_set_keys:
- self._special_set[key](self, key, value)
- else:
- # If we already have the entry, then it's obviously a valid
- # key and we don't need to check. If we do check, using a
- # global, pre-compiled regular expression directly is more
- # efficient than calling another function or a method.
- if not self._dict.has_key(key) \
- and not _is_valid_var.match(key):
- raise SCons.Errors.UserError, "Illegal construction variable `%s'" % key
- self._dict[key] = value
-
- def get(self, key, default=None):
- """Emulates the get() method of dictionaries."""
- return self._dict.get(key, default)
-
- def has_key(self, key):
- return self._dict.has_key(key)
-
- def __contains__(self, key):
- return self._dict.__contains__(key)
-
- def items(self):
- return self._dict.items()
-
- def arg2nodes(self, args, node_factory=_null, lookup_list=_null, **kw):
- if node_factory is _null:
- node_factory = self.fs.File
- if lookup_list is _null:
- lookup_list = self.lookup_list
-
- if not args:
- return []
-
- args = SCons.Util.flatten(args)
-
- nodes = []
- for v in args:
- if SCons.Util.is_String(v):
- n = None
- for l in lookup_list:
- n = l(v)
- if not n is None:
- break
- if not n is None:
- if SCons.Util.is_String(n):
- # n = self.subst(n, raw=1, **kw)
- kw['raw'] = 1
- n = apply(self.subst, (n,), kw)
- if node_factory:
- n = node_factory(n)
- if SCons.Util.is_List(n):
- nodes.extend(n)
- else:
- nodes.append(n)
- elif node_factory:
- # v = node_factory(self.subst(v, raw=1, **kw))
- kw['raw'] = 1
- v = node_factory(apply(self.subst, (v,), kw))
- if SCons.Util.is_List(v):
- nodes.extend(v)
- else:
- nodes.append(v)
- else:
- nodes.append(v)
-
- return nodes
-
- def gvars(self):
- return self._dict
-
- def lvars(self):
- return {}
-
- def subst(self, string, raw=0, target=None, source=None, conv=None, executor=None):
- """Recursively interpolates construction variables from the
- Environment into the specified string, returning the expanded
- result. Construction variables are specified by a $ prefix
- in the string and begin with an initial underscore or
- alphabetic character followed by any number of underscores
- or alphanumeric characters. The construction variable names
- may be surrounded by curly braces to separate the name from
- trailing characters.
- """
- gvars = self.gvars()
- lvars = self.lvars()
- lvars['__env__'] = self
- if executor:
- lvars.update(executor.get_lvars())
- return SCons.Subst.scons_subst(string, self, raw, target, source, gvars, lvars, conv)
-
- def subst_kw(self, kw, raw=0, target=None, source=None):
- nkw = {}
- for k, v in kw.items():
- k = self.subst(k, raw, target, source)
- if SCons.Util.is_String(v):
- v = self.subst(v, raw, target, source)
- nkw[k] = v
- return nkw
-
- def subst_list(self, string, raw=0, target=None, source=None, conv=None, executor=None):
- """Calls through to SCons.Subst.scons_subst_list(). See
- the documentation for that function."""
- gvars = self.gvars()
- lvars = self.lvars()
- lvars['__env__'] = self
- if executor:
- lvars.update(executor.get_lvars())
- return SCons.Subst.scons_subst_list(string, self, raw, target, source, gvars, lvars, conv)
-
- def subst_path(self, path, target=None, source=None):
- """Substitute a path list, turning EntryProxies into Nodes
- and leaving Nodes (and other objects) as-is."""
-
- if not SCons.Util.is_List(path):
- path = [path]
-
- def s(obj):
- """This is the "string conversion" routine that we have our
- substitutions use to return Nodes, not strings. This relies
- on the fact that an EntryProxy object has a get() method that
- returns the underlying Node that it wraps, which is a bit of
- architectural dependence that we might need to break or modify
- in the future in response to additional requirements."""
- try:
- get = obj.get
- except AttributeError:
- obj = SCons.Util.to_String_for_subst(obj)
- else:
- obj = get()
- return obj
-
- r = []
- for p in path:
- if SCons.Util.is_String(p):
- p = self.subst(p, target=target, source=source, conv=s)
- if SCons.Util.is_List(p):
- if len(p) == 1:
- p = p[0]
- else:
- # We have an object plus a string, or multiple
- # objects that we need to smush together. No choice
- # but to make them into a string.
- p = string.join(map(SCons.Util.to_String_for_subst, p), '')
- else:
- p = s(p)
- r.append(p)
- return r
-
- subst_target_source = subst
-
- def backtick(self, command):
- import subprocess
- # common arguments
- kw = { 'stdin' : 'devnull',
- 'stdout' : subprocess.PIPE,
- 'stderr' : subprocess.PIPE,
- 'universal_newlines' : True,
- }
- # if the command is a list, assume it's been quoted
- # othewise force a shell
- if not SCons.Util.is_List(command): kw['shell'] = True
- # run constructed command
- #TODO(1.5) p = SCons.Action._subproc(self, command, **kw)
- p = apply(SCons.Action._subproc, (self, command), kw)
- out,err = p.communicate()
- status = p.wait()
- if err:
- sys.stderr.write(err)
- if status:
- raise OSError("'%s' exited %d" % (command, status))
- return out
-
- def AddMethod(self, function, name=None):
- """
- Adds the specified function as a method of this construction
- environment with the specified name. If the name is omitted,
- the default name is the name of the function itself.
- """
- method = MethodWrapper(self, function, name)
- self.added_methods.append(method)
-
- def RemoveMethod(self, function):
- """
- Removes the specified function's MethodWrapper from the
- added_methods list, so we don't re-bind it when making a clone.
- """
- is_not_func = lambda dm, f=function: not dm.method is f
- self.added_methods = filter(is_not_func, self.added_methods)
-
- def Override(self, overrides):
- """
- Produce a modified environment whose variables are overriden by
- the overrides dictionaries. "overrides" is a dictionary that
- will override the variables of this environment.
-
- This function is much more efficient than Clone() or creating
- a new Environment because it doesn't copy the construction
- environment dictionary, it just wraps the underlying construction
- environment, and doesn't even create a wrapper object if there
- are no overrides.
- """
- if not overrides: return self
- o = copy_non_reserved_keywords(overrides)
- if not o: return self
- overrides = {}
- merges = None
- for key, value in o.items():
- if key == 'parse_flags':
- merges = value
- else:
- overrides[key] = SCons.Subst.scons_subst_once(value, self, key)
- env = OverrideEnvironment(self, overrides)
- if merges: env.MergeFlags(merges)
- return env
-
- def ParseFlags(self, *flags):
- """
- Parse the set of flags and return a dict with the flags placed
- in the appropriate entry. The flags are treated as a typical
- set of command-line flags for a GNU-like toolchain and used to
- populate the entries in the dict immediately below. If one of
- the flag strings begins with a bang (exclamation mark), it is
- assumed to be a command and the rest of the string is executed;
- the result of that evaluation is then added to the dict.
- """
- dict = {
- 'ASFLAGS' : SCons.Util.CLVar(''),
- 'CFLAGS' : SCons.Util.CLVar(''),
- 'CCFLAGS' : SCons.Util.CLVar(''),
- 'CPPDEFINES' : [],
- 'CPPFLAGS' : SCons.Util.CLVar(''),
- 'CPPPATH' : [],
- 'FRAMEWORKPATH' : SCons.Util.CLVar(''),
- 'FRAMEWORKS' : SCons.Util.CLVar(''),
- 'LIBPATH' : [],
- 'LIBS' : [],
- 'LINKFLAGS' : SCons.Util.CLVar(''),
- 'RPATH' : [],
- }
-
- # The use of the "me" parameter to provide our own name for
- # recursion is an egregious hack to support Python 2.1 and before.
- def do_parse(arg, me, self = self, dict = dict):
- # if arg is a sequence, recurse with each element
- if not arg:
- return
-
- if not SCons.Util.is_String(arg):
- for t in arg: me(t, me)
- return
-
- # if arg is a command, execute it
- if arg[0] == '!':
- arg = self.backtick(arg[1:])
-
- # utility function to deal with -D option
- def append_define(name, dict = dict):
- t = string.split(name, '=')
- if len(t) == 1:
- dict['CPPDEFINES'].append(name)
- else:
- dict['CPPDEFINES'].append([t[0], string.join(t[1:], '=')])
-
- # Loop through the flags and add them to the appropriate option.
- # This tries to strike a balance between checking for all possible
- # flags and keeping the logic to a finite size, so it doesn't
- # check for some that don't occur often. It particular, if the
- # flag is not known to occur in a config script and there's a way
- # of passing the flag to the right place (by wrapping it in a -W
- # flag, for example) we don't check for it. Note that most
- # preprocessor options are not handled, since unhandled options
- # are placed in CCFLAGS, so unless the preprocessor is invoked
- # separately, these flags will still get to the preprocessor.
- # Other options not currently handled:
- # -iqoutedir (preprocessor search path)
- # -u symbol (linker undefined symbol)
- # -s (linker strip files)
- # -static* (linker static binding)
- # -shared* (linker dynamic binding)
- # -symbolic (linker global binding)
- # -R dir (deprecated linker rpath)
- # IBM compilers may also accept -qframeworkdir=foo
-
- params = shlex.split(arg)
- append_next_arg_to = None # for multi-word args
- for arg in params:
- if append_next_arg_to:
- if append_next_arg_to == 'CPPDEFINES':
- append_define(arg)
- elif append_next_arg_to == '-include':
- t = ('-include', self.fs.File(arg))
- dict['CCFLAGS'].append(t)
- elif append_next_arg_to == '-isysroot':
- t = ('-isysroot', arg)
- dict['CCFLAGS'].append(t)
- dict['LINKFLAGS'].append(t)
- elif append_next_arg_to == '-arch':
- t = ('-arch', arg)
- dict['CCFLAGS'].append(t)
- dict['LINKFLAGS'].append(t)
- else:
- dict[append_next_arg_to].append(arg)
- append_next_arg_to = None
- elif not arg[0] in ['-', '+']:
- dict['LIBS'].append(self.fs.File(arg))
- elif arg[:2] == '-L':
- if arg[2:]:
- dict['LIBPATH'].append(arg[2:])
- else:
- append_next_arg_to = 'LIBPATH'
- elif arg[:2] == '-l':
- if arg[2:]:
- dict['LIBS'].append(arg[2:])
- else:
- append_next_arg_to = 'LIBS'
- elif arg[:2] == '-I':
- if arg[2:]:
- dict['CPPPATH'].append(arg[2:])
- else:
- append_next_arg_to = 'CPPPATH'
- elif arg[:4] == '-Wa,':
- dict['ASFLAGS'].append(arg[4:])
- dict['CCFLAGS'].append(arg)
- elif arg[:4] == '-Wl,':
- if arg[:11] == '-Wl,-rpath=':
- dict['RPATH'].append(arg[11:])
- elif arg[:7] == '-Wl,-R,':
- dict['RPATH'].append(arg[7:])
- elif arg[:6] == '-Wl,-R':
- dict['RPATH'].append(arg[6:])
- else:
- dict['LINKFLAGS'].append(arg)
- elif arg[:4] == '-Wp,':
- dict['CPPFLAGS'].append(arg)
- elif arg[:2] == '-D':
- if arg[2:]:
- append_define(arg[2:])
- else:
- append_next_arg_to = 'CPPDEFINES'
- elif arg == '-framework':
- append_next_arg_to = 'FRAMEWORKS'
- elif arg[:14] == '-frameworkdir=':
- dict['FRAMEWORKPATH'].append(arg[14:])
- elif arg[:2] == '-F':
- if arg[2:]:
- dict['FRAMEWORKPATH'].append(arg[2:])
- else:
- append_next_arg_to = 'FRAMEWORKPATH'
- elif arg == '-mno-cygwin':
- dict['CCFLAGS'].append(arg)
- dict['LINKFLAGS'].append(arg)
- elif arg == '-mwindows':
- dict['LINKFLAGS'].append(arg)
- elif arg == '-pthread':
- dict['CCFLAGS'].append(arg)
- dict['LINKFLAGS'].append(arg)
- elif arg[:5] == '-std=':
- dict['CFLAGS'].append(arg) # C only
- elif arg[0] == '+':
- dict['CCFLAGS'].append(arg)
- dict['LINKFLAGS'].append(arg)
- elif arg in ['-include', '-isysroot', '-arch']:
- append_next_arg_to = arg
- else:
- dict['CCFLAGS'].append(arg)
-
- for arg in flags:
- do_parse(arg, do_parse)
- return dict
-
- def MergeFlags(self, args, unique=1, dict=None):
- """
- Merge the dict in args into the construction variables of this
- env, or the passed-in dict. If args is not a dict, it is
- converted into a dict using ParseFlags. If unique is not set,
- the flags are appended rather than merged.
- """
-
- if dict is None:
- dict = self
- if not SCons.Util.is_Dict(args):
- args = self.ParseFlags(args)
- if not unique:
- apply(self.Append, (), args)
- return self
- for key, value in args.items():
- if not value:
- continue
- try:
- orig = self[key]
- except KeyError:
- orig = value
- else:
- if not orig:
- orig = value
- elif value:
- # Add orig and value. The logic here was lifted from
- # part of env.Append() (see there for a lot of comments
- # about the order in which things are tried) and is
- # used mainly to handle coercion of strings to CLVar to
- # "do the right thing" given (e.g.) an original CCFLAGS
- # string variable like '-pipe -Wall'.
- try:
- orig = orig + value
- except (KeyError, TypeError):
- try:
- add_to_orig = orig.append
- except AttributeError:
- value.insert(0, orig)
- orig = value
- else:
- add_to_orig(value)
- t = []
- if key[-4:] == 'PATH':
- ### keep left-most occurence
- for v in orig:
- if v not in t:
- t.append(v)
- else:
- ### keep right-most occurence
- orig.reverse()
- for v in orig:
- if v not in t:
- t.insert(0, v)
- self[key] = t
- return self
-
-# def MergeShellPaths(self, args, prepend=1):
-# """
-# Merge the dict in args into the shell environment in env['ENV'].
-# Shell path elements are appended or prepended according to prepend.
-
-# Uses Pre/AppendENVPath, so it always appends or prepends uniquely.
-
-# Example: env.MergeShellPaths({'LIBPATH': '/usr/local/lib'})
-# prepends /usr/local/lib to env['ENV']['LIBPATH'].
-# """
-
-# for pathname, pathval in args.items():
-# if not pathval:
-# continue
-# if prepend:
-# apply(self.PrependENVPath, (pathname, pathval))
-# else:
-# apply(self.AppendENVPath, (pathname, pathval))
-
-
-# Used by the FindSourceFiles() method, below.
-# Stuck here for support of pre-2.2 Python versions.
-def build_source(ss, result):
- for s in ss:
- if isinstance(s, SCons.Node.FS.Dir):
- build_source(s.all_children(), result)
- elif s.has_builder():
- build_source(s.sources, result)
- elif isinstance(s.disambiguate(), SCons.Node.FS.File):
- result.append(s)
-
-def default_decide_source(dependency, target, prev_ni):
- f = SCons.Defaults.DefaultEnvironment().decide_source
- return f(dependency, target, prev_ni)
-
-def default_decide_target(dependency, target, prev_ni):
- f = SCons.Defaults.DefaultEnvironment().decide_target
- return f(dependency, target, prev_ni)
-
-def default_copy_from_cache(src, dst):
- f = SCons.Defaults.DefaultEnvironment().copy_from_cache
- return f(src, dst)
-
-class Base(SubstitutionEnvironment):
- """Base class for "real" construction Environments. These are the
- primary objects used to communicate dependency and construction
- information to the build engine.
-
- Keyword arguments supplied when the construction Environment
- is created are construction variables used to initialize the
- Environment.
- """
-
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- memoizer_counters = []
-
- #######################################################################
- # This is THE class for interacting with the SCons build engine,
- # and it contains a lot of stuff, so we're going to try to keep this
- # a little organized by grouping the methods.
- #######################################################################
-
- #######################################################################
- # Methods that make an Environment act like a dictionary. These have
- # the expected standard names for Python mapping objects. Note that
- # we don't actually make an Environment a subclass of UserDict for
- # performance reasons. Note also that we only supply methods for
- # dictionary functionality that we actually need and use.
- #######################################################################
-
- def __init__(self,
- platform=None,
- tools=None,
- toolpath=None,
- variables=None,
- parse_flags = None,
- **kw):
- """
- Initialization of a basic SCons construction environment,
- including setting up special construction variables like BUILDER,
- PLATFORM, etc., and searching for and applying available Tools.
-
- Note that we do *not* call the underlying base class
- (SubsitutionEnvironment) initialization, because we need to
- initialize things in a very specific order that doesn't work
- with the much simpler base class initialization.
- """
- if __debug__: logInstanceCreation(self, 'Environment.Base')
- self._memo = {}
- self.fs = SCons.Node.FS.get_default_fs()
- self.ans = SCons.Node.Alias.default_ans
- self.lookup_list = SCons.Node.arg2nodes_lookups
- self._dict = semi_deepcopy(SCons.Defaults.ConstructionEnvironment)
- self._init_special()
- self.added_methods = []
-
- # We don't use AddMethod, or define these as methods in this
- # class, because we *don't* want these functions to be bound
- # methods. They need to operate independently so that the
- # settings will work properly regardless of whether a given
- # target ends up being built with a Base environment or an
- # OverrideEnvironment or what have you.
- self.decide_target = default_decide_target
- self.decide_source = default_decide_source
-
- self.copy_from_cache = default_copy_from_cache
-
- self._dict['BUILDERS'] = BuilderDict(self._dict['BUILDERS'], self)
-
- if platform is None:
- platform = self._dict.get('PLATFORM', None)
- if platform is None:
- platform = SCons.Platform.Platform()
- if SCons.Util.is_String(platform):
- platform = SCons.Platform.Platform(platform)
- self._dict['PLATFORM'] = str(platform)
- platform(self)
-
- # Apply the passed-in and customizable variables to the
- # environment before calling the tools, because they may use
- # some of them during initialization.
- if kw.has_key('options'):
- # Backwards compatibility: they may stll be using the
- # old "options" keyword.
- variables = kw['options']
- del kw['options']
- apply(self.Replace, (), kw)
- keys = kw.keys()
- if variables:
- keys = keys + variables.keys()
- variables.Update(self)
-
- save = {}
- for k in keys:
- try:
- save[k] = self._dict[k]
- except KeyError:
- # No value may have been set if they tried to pass in a
- # reserved variable name like TARGETS.
- pass
-
- SCons.Tool.Initializers(self)
-
- if tools is None:
- tools = self._dict.get('TOOLS', None)
- if tools is None:
- tools = ['default']
- apply_tools(self, tools, toolpath)
-
- # Now restore the passed-in and customized variables
- # to the environment, since the values the user set explicitly
- # should override any values set by the tools.
- for key, val in save.items():
- self._dict[key] = val
-
- # Finally, apply any flags to be merged in
- if parse_flags: self.MergeFlags(parse_flags)
-
- #######################################################################
- # Utility methods that are primarily for internal use by SCons.
- # These begin with lower-case letters.
- #######################################################################
-
- def get_builder(self, name):
- """Fetch the builder with the specified name from the environment.
- """
- try:
- return self._dict['BUILDERS'][name]
- except KeyError:
- return None
-
- def get_CacheDir(self):
- try:
- path = self._CacheDir_path
- except AttributeError:
- path = SCons.Defaults.DefaultEnvironment()._CacheDir_path
- try:
- if path == self._last_CacheDir_path:
- return self._last_CacheDir
- except AttributeError:
- pass
- cd = SCons.CacheDir.CacheDir(path)
- self._last_CacheDir_path = path
- self._last_CacheDir = cd
- return cd
-
- def get_factory(self, factory, default='File'):
- """Return a factory function for creating Nodes for this
- construction environment.
- """
- name = default
- try:
- is_node = issubclass(factory, SCons.Node.Node)
- except TypeError:
- # The specified factory isn't a Node itself--it's
- # most likely None, or possibly a callable.
- pass
- else:
- if is_node:
- # The specified factory is a Node (sub)class. Try to
- # return the FS method that corresponds to the Node's
- # name--that is, we return self.fs.Dir if they want a Dir,
- # self.fs.File for a File, etc.
- try: name = factory.__name__
- except AttributeError: pass
- else: factory = None
- if not factory:
- # They passed us None, or we picked up a name from a specified
- # class, so return the FS method. (Note that we *don't*
- # use our own self.{Dir,File} methods because that would
- # cause env.subst() to be called twice on the file name,
- # interfering with files that have $$ in them.)
- factory = getattr(self.fs, name)
- return factory
-
- memoizer_counters.append(SCons.Memoize.CountValue('_gsm'))
-
- def _gsm(self):
- try:
- return self._memo['_gsm']
- except KeyError:
- pass
-
- result = {}
-
- try:
- scanners = self._dict['SCANNERS']
- except KeyError:
- pass
- else:
- # Reverse the scanner list so that, if multiple scanners
- # claim they can scan the same suffix, earlier scanners
- # in the list will overwrite later scanners, so that
- # the result looks like a "first match" to the user.
- if not SCons.Util.is_List(scanners):
- scanners = [scanners]
- else:
- scanners = scanners[:] # copy so reverse() doesn't mod original
- scanners.reverse()
- for scanner in scanners:
- for k in scanner.get_skeys(self):
- if k and self['PLATFORM'] == 'win32':
- k = string.lower(k)
- result[k] = scanner
-
- self._memo['_gsm'] = result
-
- return result
-
- def get_scanner(self, skey):
- """Find the appropriate scanner given a key (usually a file suffix).
- """
- if skey and self['PLATFORM'] == 'win32':
- skey = string.lower(skey)
- return self._gsm().get(skey)
-
- def scanner_map_delete(self, kw=None):
- """Delete the cached scanner map (if we need to).
- """
- try:
- del self._memo['_gsm']
- except KeyError:
- pass
-
- def _update(self, dict):
- """Update an environment's values directly, bypassing the normal
- checks that occur when users try to set items.
- """
- self._dict.update(dict)
-
- def get_src_sig_type(self):
- try:
- return self.src_sig_type
- except AttributeError:
- t = SCons.Defaults.DefaultEnvironment().src_sig_type
- self.src_sig_type = t
- return t
-
- def get_tgt_sig_type(self):
- try:
- return self.tgt_sig_type
- except AttributeError:
- t = SCons.Defaults.DefaultEnvironment().tgt_sig_type
- self.tgt_sig_type = t
- return t
-
- #######################################################################
- # Public methods for manipulating an Environment. These begin with
- # upper-case letters. The essential characteristic of methods in
- # this section is that they do *not* have corresponding same-named
- # global functions. For example, a stand-alone Append() function
- # makes no sense, because Append() is all about appending values to
- # an Environment's construction variables.
- #######################################################################
-
- def Append(self, **kw):
- """Append values to existing construction variables
- in an Environment.
- """
- kw = copy_non_reserved_keywords(kw)
- for key, val in kw.items():
- # It would be easier on the eyes to write this using
- # "continue" statements whenever we finish processing an item,
- # but Python 1.5.2 apparently doesn't let you use "continue"
- # within try:-except: blocks, so we have to nest our code.
- try:
- orig = self._dict[key]
- except KeyError:
- # No existing variable in the environment, so just set
- # it to the new value.
- self._dict[key] = val
- else:
- try:
- # Check if the original looks like a dictionary.
- # If it is, we can't just try adding the value because
- # dictionaries don't have __add__() methods, and
- # things like UserList will incorrectly coerce the
- # original dict to a list (which we don't want).
- update_dict = orig.update
- except AttributeError:
- try:
- # Most straightforward: just try to add them
- # together. This will work in most cases, when the
- # original and new values are of compatible types.
- self._dict[key] = orig + val
- except (KeyError, TypeError):
- try:
- # Check if the original is a list.
- add_to_orig = orig.append
- except AttributeError:
- # The original isn't a list, but the new
- # value is (by process of elimination),
- # so insert the original in the new value
- # (if there's one to insert) and replace
- # the variable with it.
- if orig:
- val.insert(0, orig)
- self._dict[key] = val
- else:
- # The original is a list, so append the new
- # value to it (if there's a value to append).
- if val:
- add_to_orig(val)
- else:
- # The original looks like a dictionary, so update it
- # based on what we think the value looks like.
- if SCons.Util.is_List(val):
- for v in val:
- orig[v] = None
- else:
- try:
- update_dict(val)
- except (AttributeError, TypeError, ValueError):
- if SCons.Util.is_Dict(val):
- for k, v in val.items():
- orig[k] = v
- else:
- orig[val] = None
- self.scanner_map_delete(kw)
-
- # allow Dirs and strings beginning with # for top-relative
- # Note this uses the current env's fs (in self).
- def _canonicalize(self, path):
- if not SCons.Util.is_String(path): # typically a Dir
- path = str(path)
- if path and path[0] == '#':
- path = str(self.fs.Dir(path))
- return path
-
- def AppendENVPath(self, name, newpath, envname = 'ENV',
- sep = os.pathsep, delete_existing=1):
- """Append path elements to the path 'name' in the 'ENV'
- dictionary for this environment. Will only add any particular
- path once, and will normpath and normcase all paths to help
- assure this. This can also handle the case where the env
- variable is a list instead of a string.
-
- If delete_existing is 0, a newpath which is already in the path
- will not be moved to the end (it will be left where it is).
- """
-
- orig = ''
- if self._dict.has_key(envname) and self._dict[envname].has_key(name):
- orig = self._dict[envname][name]
-
- nv = SCons.Util.AppendPath(orig, newpath, sep, delete_existing,
- canonicalize=self._canonicalize)
-
- if not self._dict.has_key(envname):
- self._dict[envname] = {}
-
- self._dict[envname][name] = nv
-
- def AppendUnique(self, delete_existing=0, **kw):
- """Append values to existing construction variables
- in an Environment, if they're not already there.
- If delete_existing is 1, removes existing values first, so
- values move to end.
- """
- kw = copy_non_reserved_keywords(kw)
- for key, val in kw.items():
- if SCons.Util.is_List(val):
- val = _delete_duplicates(val, delete_existing)
- if not self._dict.has_key(key) or self._dict[key] in ('', None):
- self._dict[key] = val
- elif SCons.Util.is_Dict(self._dict[key]) and \
- SCons.Util.is_Dict(val):
- self._dict[key].update(val)
- elif SCons.Util.is_List(val):
- dk = self._dict[key]
- if not SCons.Util.is_List(dk):
- dk = [dk]
- if delete_existing:
- dk = filter(lambda x, val=val: x not in val, dk)
- else:
- val = filter(lambda x, dk=dk: x not in dk, val)
- self._dict[key] = dk + val
- else:
- dk = self._dict[key]
- if SCons.Util.is_List(dk):
- # By elimination, val is not a list. Since dk is a
- # list, wrap val in a list first.
- if delete_existing:
- dk = filter(lambda x, val=val: x not in val, dk)
- self._dict[key] = dk + [val]
- else:
- if not val in dk:
- self._dict[key] = dk + [val]
- else:
- if delete_existing:
- dk = filter(lambda x, val=val: x not in val, dk)
- self._dict[key] = dk + val
- self.scanner_map_delete(kw)
-
- def Clone(self, tools=[], toolpath=None, parse_flags = None, **kw):
- """Return a copy of a construction Environment. The
- copy is like a Python "deep copy"--that is, independent
- copies are made recursively of each objects--except that
- a reference is copied when an object is not deep-copyable
- (like a function). There are no references to any mutable
- objects in the original Environment.
- """
- clone = copy.copy(self)
- clone._dict = semi_deepcopy(self._dict)
-
- try:
- cbd = clone._dict['BUILDERS']
- except KeyError:
- pass
- else:
- clone._dict['BUILDERS'] = BuilderDict(cbd, clone)
-
- # Check the methods added via AddMethod() and re-bind them to
- # the cloned environment. Only do this if the attribute hasn't
- # been overwritten by the user explicitly and still points to
- # the added method.
- clone.added_methods = []
- for mw in self.added_methods:
- if mw == getattr(self, mw.name):
- clone.added_methods.append(mw.clone(clone))
-
- clone._memo = {}
-
- # Apply passed-in variables before the tools
- # so the tools can use the new variables
- kw = copy_non_reserved_keywords(kw)
- new = {}
- for key, value in kw.items():
- new[key] = SCons.Subst.scons_subst_once(value, self, key)
- apply(clone.Replace, (), new)
-
- apply_tools(clone, tools, toolpath)
-
- # apply them again in case the tools overwrote them
- apply(clone.Replace, (), new)
-
- # Finally, apply any flags to be merged in
- if parse_flags: clone.MergeFlags(parse_flags)
-
- if __debug__: logInstanceCreation(self, 'Environment.EnvironmentClone')
- return clone
-
- def Copy(self, *args, **kw):
- global _warn_copy_deprecated
- if _warn_copy_deprecated:
- msg = "The env.Copy() method is deprecated; use the env.Clone() method instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedCopyWarning, msg)
- _warn_copy_deprecated = False
- return apply(self.Clone, args, kw)
-
- def _changed_build(self, dependency, target, prev_ni):
- if dependency.changed_state(target, prev_ni):
- return 1
- return self.decide_source(dependency, target, prev_ni)
-
- def _changed_content(self, dependency, target, prev_ni):
- return dependency.changed_content(target, prev_ni)
-
- def _changed_source(self, dependency, target, prev_ni):
- target_env = dependency.get_build_env()
- type = target_env.get_tgt_sig_type()
- if type == 'source':
- return target_env.decide_source(dependency, target, prev_ni)
- else:
- return target_env.decide_target(dependency, target, prev_ni)
-
- def _changed_timestamp_then_content(self, dependency, target, prev_ni):
- return dependency.changed_timestamp_then_content(target, prev_ni)
-
- def _changed_timestamp_newer(self, dependency, target, prev_ni):
- return dependency.changed_timestamp_newer(target, prev_ni)
-
- def _changed_timestamp_match(self, dependency, target, prev_ni):
- return dependency.changed_timestamp_match(target, prev_ni)
-
- def _copy_from_cache(self, src, dst):
- return self.fs.copy(src, dst)
-
- def _copy2_from_cache(self, src, dst):
- return self.fs.copy2(src, dst)
-
- def Decider(self, function):
- copy_function = self._copy2_from_cache
- if function in ('MD5', 'content'):
- if not SCons.Util.md5:
- raise UserError, "MD5 signatures are not available in this version of Python."
- function = self._changed_content
- elif function == 'MD5-timestamp':
- function = self._changed_timestamp_then_content
- elif function in ('timestamp-newer', 'make'):
- function = self._changed_timestamp_newer
- copy_function = self._copy_from_cache
- elif function == 'timestamp-match':
- function = self._changed_timestamp_match
- elif not callable(function):
- raise UserError, "Unknown Decider value %s" % repr(function)
-
- # We don't use AddMethod because we don't want to turn the
- # function, which only expects three arguments, into a bound
- # method, which would add self as an initial, fourth argument.
- self.decide_target = function
- self.decide_source = function
-
- self.copy_from_cache = copy_function
-
- def Detect(self, progs):
- """Return the first available program in progs.
- """
- if not SCons.Util.is_List(progs):
- progs = [ progs ]
- for prog in progs:
- path = self.WhereIs(prog)
- if path: return prog
- return None
-
- def Dictionary(self, *args):
- if not args:
- return self._dict
- dlist = map(lambda x, s=self: s._dict[x], args)
- if len(dlist) == 1:
- dlist = dlist[0]
- return dlist
-
- def Dump(self, key = None):
- """
- Using the standard Python pretty printer, dump the contents of the
- scons build environment to stdout.
-
- If the key passed in is anything other than None, then that will
- be used as an index into the build environment dictionary and
- whatever is found there will be fed into the pretty printer. Note
- that this key is case sensitive.
- """
- import pprint
- pp = pprint.PrettyPrinter(indent=2)
- if key:
- dict = self.Dictionary(key)
- else:
- dict = self.Dictionary()
- return pp.pformat(dict)
-
- def FindIxes(self, paths, prefix, suffix):
- """
- Search a list of paths for something that matches the prefix and suffix.
-
- paths - the list of paths or nodes.
- prefix - construction variable for the prefix.
- suffix - construction variable for the suffix.
- """
-
- suffix = self.subst('$'+suffix)
- prefix = self.subst('$'+prefix)
-
- for path in paths:
- dir,name = os.path.split(str(path))
- if name[:len(prefix)] == prefix and name[-len(suffix):] == suffix:
- return path
-
- def ParseConfig(self, command, function=None, unique=1):
- """
- Use the specified function to parse the output of the command
- in order to modify the current environment. The 'command' can
- be a string or a list of strings representing a command and
- its arguments. 'Function' is an optional argument that takes
- the environment, the output of the command, and the unique flag.
- If no function is specified, MergeFlags, which treats the output
- as the result of a typical 'X-config' command (i.e. gtk-config),
- will merge the output into the appropriate variables.
- """
- if function is None:
- def parse_conf(env, cmd, unique=unique):
- return env.MergeFlags(cmd, unique)
- function = parse_conf
- if SCons.Util.is_List(command):
- command = string.join(command)
- command = self.subst(command)
- return function(self, self.backtick(command))
-
- def ParseDepends(self, filename, must_exist=None, only_one=0):
- """
- Parse a mkdep-style file for explicit dependencies. This is
- completely abusable, and should be unnecessary in the "normal"
- case of proper SCons configuration, but it may help make
- the transition from a Make hierarchy easier for some people
- to swallow. It can also be genuinely useful when using a tool
- that can write a .d file, but for which writing a scanner would
- be too complicated.
- """
- filename = self.subst(filename)
- try:
- fp = open(filename, 'r')
- except IOError:
- if must_exist:
- raise
- return
- lines = SCons.Util.LogicalLines(fp).readlines()
- lines = filter(lambda l: l[0] != '#', lines)
- tdlist = []
- for line in lines:
- try:
- target, depends = string.split(line, ':', 1)
- except (AttributeError, TypeError, ValueError):
- # Python 1.5.2 throws TypeError if line isn't a string,
- # Python 2.x throws AttributeError because it tries
- # to call line.split(). Either can throw ValueError
- # if the line doesn't split into two or more elements.
- pass
- else:
- tdlist.append((string.split(target), string.split(depends)))
- if only_one:
- targets = reduce(lambda x, y: x+y, map(lambda p: p[0], tdlist))
- if len(targets) > 1:
- raise SCons.Errors.UserError, "More than one dependency target found in `%s': %s" % (filename, targets)
- for target, depends in tdlist:
- self.Depends(target, depends)
-
- def Platform(self, platform):
- platform = self.subst(platform)
- return SCons.Platform.Platform(platform)(self)
-
- def Prepend(self, **kw):
- """Prepend values to existing construction variables
- in an Environment.
- """
- kw = copy_non_reserved_keywords(kw)
- for key, val in kw.items():
- # It would be easier on the eyes to write this using
- # "continue" statements whenever we finish processing an item,
- # but Python 1.5.2 apparently doesn't let you use "continue"
- # within try:-except: blocks, so we have to nest our code.
- try:
- orig = self._dict[key]
- except KeyError:
- # No existing variable in the environment, so just set
- # it to the new value.
- self._dict[key] = val
- else:
- try:
- # Check if the original looks like a dictionary.
- # If it is, we can't just try adding the value because
- # dictionaries don't have __add__() methods, and
- # things like UserList will incorrectly coerce the
- # original dict to a list (which we don't want).
- update_dict = orig.update
- except AttributeError:
- try:
- # Most straightforward: just try to add them
- # together. This will work in most cases, when the
- # original and new values are of compatible types.
- self._dict[key] = val + orig
- except (KeyError, TypeError):
- try:
- # Check if the added value is a list.
- add_to_val = val.append
- except AttributeError:
- # The added value isn't a list, but the
- # original is (by process of elimination),
- # so insert the the new value in the original
- # (if there's one to insert).
- if val:
- orig.insert(0, val)
- else:
- # The added value is a list, so append
- # the original to it (if there's a value
- # to append).
- if orig:
- add_to_val(orig)
- self._dict[key] = val
- else:
- # The original looks like a dictionary, so update it
- # based on what we think the value looks like.
- if SCons.Util.is_List(val):
- for v in val:
- orig[v] = None
- else:
- try:
- update_dict(val)
- except (AttributeError, TypeError, ValueError):
- if SCons.Util.is_Dict(val):
- for k, v in val.items():
- orig[k] = v
- else:
- orig[val] = None
- self.scanner_map_delete(kw)
-
- def PrependENVPath(self, name, newpath, envname = 'ENV', sep = os.pathsep,
- delete_existing=1):
- """Prepend path elements to the path 'name' in the 'ENV'
- dictionary for this environment. Will only add any particular
- path once, and will normpath and normcase all paths to help
- assure this. This can also handle the case where the env
- variable is a list instead of a string.
-
- If delete_existing is 0, a newpath which is already in the path
- will not be moved to the front (it will be left where it is).
- """
-
- orig = ''
- if self._dict.has_key(envname) and self._dict[envname].has_key(name):
- orig = self._dict[envname][name]
-
- nv = SCons.Util.PrependPath(orig, newpath, sep, delete_existing,
- canonicalize=self._canonicalize)
-
- if not self._dict.has_key(envname):
- self._dict[envname] = {}
-
- self._dict[envname][name] = nv
-
- def PrependUnique(self, delete_existing=0, **kw):
- """Prepend values to existing construction variables
- in an Environment, if they're not already there.
- If delete_existing is 1, removes existing values first, so
- values move to front.
- """
- kw = copy_non_reserved_keywords(kw)
- for key, val in kw.items():
- if SCons.Util.is_List(val):
- val = _delete_duplicates(val, not delete_existing)
- if not self._dict.has_key(key) or self._dict[key] in ('', None):
- self._dict[key] = val
- elif SCons.Util.is_Dict(self._dict[key]) and \
- SCons.Util.is_Dict(val):
- self._dict[key].update(val)
- elif SCons.Util.is_List(val):
- dk = self._dict[key]
- if not SCons.Util.is_List(dk):
- dk = [dk]
- if delete_existing:
- dk = filter(lambda x, val=val: x not in val, dk)
- else:
- val = filter(lambda x, dk=dk: x not in dk, val)
- self._dict[key] = val + dk
- else:
- dk = self._dict[key]
- if SCons.Util.is_List(dk):
- # By elimination, val is not a list. Since dk is a
- # list, wrap val in a list first.
- if delete_existing:
- dk = filter(lambda x, val=val: x not in val, dk)
- self._dict[key] = [val] + dk
- else:
- if not val in dk:
- self._dict[key] = [val] + dk
- else:
- if delete_existing:
- dk = filter(lambda x, val=val: x not in val, dk)
- self._dict[key] = val + dk
- self.scanner_map_delete(kw)
-
- def Replace(self, **kw):
- """Replace existing construction variables in an Environment
- with new construction variables and/or values.
- """
- try:
- kwbd = kw['BUILDERS']
- except KeyError:
- pass
- else:
- kwbd = semi_deepcopy(kwbd)
- del kw['BUILDERS']
- self.__setitem__('BUILDERS', kwbd)
- kw = copy_non_reserved_keywords(kw)
- self._update(semi_deepcopy(kw))
- self.scanner_map_delete(kw)
-
- def ReplaceIxes(self, path, old_prefix, old_suffix, new_prefix, new_suffix):
- """
- Replace old_prefix with new_prefix and old_suffix with new_suffix.
-
- env - Environment used to interpolate variables.
- path - the path that will be modified.
- old_prefix - construction variable for the old prefix.
- old_suffix - construction variable for the old suffix.
- new_prefix - construction variable for the new prefix.
- new_suffix - construction variable for the new suffix.
- """
- old_prefix = self.subst('$'+old_prefix)
- old_suffix = self.subst('$'+old_suffix)
-
- new_prefix = self.subst('$'+new_prefix)
- new_suffix = self.subst('$'+new_suffix)
-
- dir,name = os.path.split(str(path))
- if name[:len(old_prefix)] == old_prefix:
- name = name[len(old_prefix):]
- if name[-len(old_suffix):] == old_suffix:
- name = name[:-len(old_suffix)]
- return os.path.join(dir, new_prefix+name+new_suffix)
-
- def SetDefault(self, **kw):
- for k in kw.keys():
- if self._dict.has_key(k):
- del kw[k]
- apply(self.Replace, (), kw)
-
- def _find_toolpath_dir(self, tp):
- return self.fs.Dir(self.subst(tp)).srcnode().abspath
-
- def Tool(self, tool, toolpath=None, **kw):
- if SCons.Util.is_String(tool):
- tool = self.subst(tool)
- if toolpath is None:
- toolpath = self.get('toolpath', [])
- toolpath = map(self._find_toolpath_dir, toolpath)
- tool = apply(SCons.Tool.Tool, (tool, toolpath), kw)
- tool(self)
-
- def WhereIs(self, prog, path=None, pathext=None, reject=[]):
- """Find prog in the path.
- """
- if path is None:
- try:
- path = self['ENV']['PATH']
- except KeyError:
- pass
- elif SCons.Util.is_String(path):
- path = self.subst(path)
- if pathext is None:
- try:
- pathext = self['ENV']['PATHEXT']
- except KeyError:
- pass
- elif SCons.Util.is_String(pathext):
- pathext = self.subst(pathext)
- prog = self.subst(prog)
- path = SCons.Util.WhereIs(prog, path, pathext, reject)
- if path: return path
- return None
-
- #######################################################################
- # Public methods for doing real "SCons stuff" (manipulating
- # dependencies, setting attributes on targets, etc.). These begin
- # with upper-case letters. The essential characteristic of methods
- # in this section is that they all *should* have corresponding
- # same-named global functions.
- #######################################################################
-
- def Action(self, *args, **kw):
- def subst_string(a, self=self):
- if SCons.Util.is_String(a):
- a = self.subst(a)
- return a
- nargs = map(subst_string, args)
- nkw = self.subst_kw(kw)
- return apply(SCons.Action.Action, nargs, nkw)
-
- def AddPreAction(self, files, action):
- nodes = self.arg2nodes(files, self.fs.Entry)
- action = SCons.Action.Action(action)
- uniq = {}
- for executor in map(lambda n: n.get_executor(), nodes):
- uniq[executor] = 1
- for executor in uniq.keys():
- executor.add_pre_action(action)
- return nodes
-
- def AddPostAction(self, files, action):
- nodes = self.arg2nodes(files, self.fs.Entry)
- action = SCons.Action.Action(action)
- uniq = {}
- for executor in map(lambda n: n.get_executor(), nodes):
- uniq[executor] = 1
- for executor in uniq.keys():
- executor.add_post_action(action)
- return nodes
-
- def Alias(self, target, source=[], action=None, **kw):
- tlist = self.arg2nodes(target, self.ans.Alias)
- if not SCons.Util.is_List(source):
- source = [source]
- source = filter(None, source)
-
- if not action:
- if not source:
- # There are no source files and no action, so just
- # return a target list of classic Alias Nodes, without
- # any builder. The externally visible effect is that
- # this will make the wrapping Script.BuildTask class
- # say that there's "Nothing to be done" for this Alias,
- # instead of that it's "up to date."
- return tlist
-
- # No action, but there are sources. Re-call all the target
- # builders to add the sources to each target.
- result = []
- for t in tlist:
- bld = t.get_builder(AliasBuilder)
- result.extend(bld(self, t, source))
- return result
-
- nkw = self.subst_kw(kw)
- nkw.update({
- 'action' : SCons.Action.Action(action),
- 'source_factory' : self.fs.Entry,
- 'multi' : 1,
- 'is_explicit' : None,
- })
- bld = apply(SCons.Builder.Builder, (), nkw)
-
- # Apply the Builder separately to each target so that the Aliases
- # stay separate. If we did one "normal" Builder call with the
- # whole target list, then all of the target Aliases would be
- # associated under a single Executor.
- result = []
- for t in tlist:
- # Calling the convert() method will cause a new Executor to be
- # created from scratch, so we have to explicitly initialize
- # it with the target's existing sources, plus our new ones,
- # so nothing gets lost.
- b = t.get_builder()
- if b is None or b is AliasBuilder:
- b = bld
- else:
- nkw['action'] = b.action + action
- b = apply(SCons.Builder.Builder, (), nkw)
- t.convert()
- result.extend(b(self, t, t.sources + source))
- return result
-
- def AlwaysBuild(self, *targets):
- tlist = []
- for t in targets:
- tlist.extend(self.arg2nodes(t, self.fs.Entry))
- for t in tlist:
- t.set_always_build()
- return tlist
-
- def BuildDir(self, *args, **kw):
- if kw.has_key('build_dir'):
- kw['variant_dir'] = kw['build_dir']
- del kw['build_dir']
- return apply(self.VariantDir, args, kw)
-
- def Builder(self, **kw):
- nkw = self.subst_kw(kw)
- return apply(SCons.Builder.Builder, [], nkw)
-
- def CacheDir(self, path):
- import SCons.CacheDir
- if not path is None:
- path = self.subst(path)
- self._CacheDir_path = path
-
- def Clean(self, targets, files):
- global CleanTargets
- tlist = self.arg2nodes(targets, self.fs.Entry)
- flist = self.arg2nodes(files, self.fs.Entry)
- for t in tlist:
- try:
- CleanTargets[t].extend(flist)
- except KeyError:
- CleanTargets[t] = flist
-
- def Configure(self, *args, **kw):
- nargs = [self]
- if args:
- nargs = nargs + self.subst_list(args)[0]
- nkw = self.subst_kw(kw)
- nkw['_depth'] = kw.get('_depth', 0) + 1
- try:
- nkw['custom_tests'] = self.subst_kw(nkw['custom_tests'])
- except KeyError:
- pass
- return apply(SCons.SConf.SConf, nargs, nkw)
-
- def Command(self, target, source, action, **kw):
- """Builds the supplied target files from the supplied
- source files using the supplied action. Action may
- be any type that the Builder constructor will accept
- for an action."""
- bkw = {
- 'action' : action,
- 'target_factory' : self.fs.Entry,
- 'source_factory' : self.fs.Entry,
- }
- try: bkw['source_scanner'] = kw['source_scanner']
- except KeyError: pass
- else: del kw['source_scanner']
- bld = apply(SCons.Builder.Builder, (), bkw)
- return apply(bld, (self, target, source), kw)
-
- def Depends(self, target, dependency):
- """Explicity specify that 'target's depend on 'dependency'."""
- tlist = self.arg2nodes(target, self.fs.Entry)
- dlist = self.arg2nodes(dependency, self.fs.Entry)
- for t in tlist:
- t.add_dependency(dlist)
- return tlist
-
- def Dir(self, name, *args, **kw):
- """
- """
- s = self.subst(name)
- if SCons.Util.is_Sequence(s):
- result=[]
- for e in s:
- result.append(apply(self.fs.Dir, (e,) + args, kw))
- return result
- return apply(self.fs.Dir, (s,) + args, kw)
-
- def NoClean(self, *targets):
- """Tags a target so that it will not be cleaned by -c"""
- tlist = []
- for t in targets:
- tlist.extend(self.arg2nodes(t, self.fs.Entry))
- for t in tlist:
- t.set_noclean()
- return tlist
-
- def NoCache(self, *targets):
- """Tags a target so that it will not be cached"""
- tlist = []
- for t in targets:
- tlist.extend(self.arg2nodes(t, self.fs.Entry))
- for t in tlist:
- t.set_nocache()
- return tlist
-
- def Entry(self, name, *args, **kw):
- """
- """
- s = self.subst(name)
- if SCons.Util.is_Sequence(s):
- result=[]
- for e in s:
- result.append(apply(self.fs.Entry, (e,) + args, kw))
- return result
- return apply(self.fs.Entry, (s,) + args, kw)
-
- def Environment(self, **kw):
- return apply(SCons.Environment.Environment, [], self.subst_kw(kw))
-
- def Execute(self, action, *args, **kw):
- """Directly execute an action through an Environment
- """
- action = apply(self.Action, (action,) + args, kw)
- result = action([], [], self)
- if isinstance(result, SCons.Errors.BuildError):
- errstr = result.errstr
- if result.filename:
- errstr = result.filename + ': ' + errstr
- sys.stderr.write("scons: *** %s\n" % errstr)
- return result.status
- else:
- return result
-
- def File(self, name, *args, **kw):
- """
- """
- s = self.subst(name)
- if SCons.Util.is_Sequence(s):
- result=[]
- for e in s:
- result.append(apply(self.fs.File, (e,) + args, kw))
- return result
- return apply(self.fs.File, (s,) + args, kw)
-
- def FindFile(self, file, dirs):
- file = self.subst(file)
- nodes = self.arg2nodes(dirs, self.fs.Dir)
- return SCons.Node.FS.find_file(file, tuple(nodes))
-
- def Flatten(self, sequence):
- return SCons.Util.flatten(sequence)
-
- def GetBuildPath(self, files):
- result = map(str, self.arg2nodes(files, self.fs.Entry))
- if SCons.Util.is_List(files):
- return result
- else:
- return result[0]
-
- def Glob(self, pattern, ondisk=True, source=False, strings=False):
- return self.fs.Glob(self.subst(pattern), ondisk, source, strings)
-
- def Ignore(self, target, dependency):
- """Ignore a dependency."""
- tlist = self.arg2nodes(target, self.fs.Entry)
- dlist = self.arg2nodes(dependency, self.fs.Entry)
- for t in tlist:
- t.add_ignore(dlist)
- return tlist
-
- def Literal(self, string):
- return SCons.Subst.Literal(string)
-
- def Local(self, *targets):
- ret = []
- for targ in targets:
- if isinstance(targ, SCons.Node.Node):
- targ.set_local()
- ret.append(targ)
- else:
- for t in self.arg2nodes(targ, self.fs.Entry):
- t.set_local()
- ret.append(t)
- return ret
-
- def Precious(self, *targets):
- tlist = []
- for t in targets:
- tlist.extend(self.arg2nodes(t, self.fs.Entry))
- for t in tlist:
- t.set_precious()
- return tlist
-
- def Repository(self, *dirs, **kw):
- dirs = self.arg2nodes(list(dirs), self.fs.Dir)
- apply(self.fs.Repository, dirs, kw)
-
- def Requires(self, target, prerequisite):
- """Specify that 'prerequisite' must be built before 'target',
- (but 'target' does not actually depend on 'prerequisite'
- and need not be rebuilt if it changes)."""
- tlist = self.arg2nodes(target, self.fs.Entry)
- plist = self.arg2nodes(prerequisite, self.fs.Entry)
- for t in tlist:
- t.add_prerequisite(plist)
- return tlist
-
- def Scanner(self, *args, **kw):
- nargs = []
- for arg in args:
- if SCons.Util.is_String(arg):
- arg = self.subst(arg)
- nargs.append(arg)
- nkw = self.subst_kw(kw)
- return apply(SCons.Scanner.Base, nargs, nkw)
-
- def SConsignFile(self, name=".sconsign", dbm_module=None):
- if not name is None:
- name = self.subst(name)
- if not os.path.isabs(name):
- name = os.path.join(str(self.fs.SConstruct_dir), name)
- if name:
- name = os.path.normpath(name)
- sconsign_dir = os.path.dirname(name)
- if sconsign_dir and not os.path.exists(sconsign_dir):
- self.Execute(SCons.Defaults.Mkdir(sconsign_dir))
- SCons.SConsign.File(name, dbm_module)
-
- def SideEffect(self, side_effect, target):
- """Tell scons that side_effects are built as side
- effects of building targets."""
- side_effects = self.arg2nodes(side_effect, self.fs.Entry)
- targets = self.arg2nodes(target, self.fs.Entry)
-
- for side_effect in side_effects:
- if side_effect.multiple_side_effect_has_builder():
- raise SCons.Errors.UserError, "Multiple ways to build the same target were specified for: %s" % str(side_effect)
- side_effect.add_source(targets)
- side_effect.side_effect = 1
- self.Precious(side_effect)
- for target in targets:
- target.side_effects.append(side_effect)
- return side_effects
-
- def SourceCode(self, entry, builder):
- """Arrange for a source code builder for (part of) a tree."""
- entries = self.arg2nodes(entry, self.fs.Entry)
- for entry in entries:
- entry.set_src_builder(builder)
- return entries
-
- def SourceSignatures(self, type):
- global _warn_source_signatures_deprecated
- if _warn_source_signatures_deprecated:
- msg = "The env.SourceSignatures() method is deprecated;\n" + \
- "\tconvert your build to use the env.Decider() method instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedSourceSignaturesWarning, msg)
- _warn_source_signatures_deprecated = False
- type = self.subst(type)
- self.src_sig_type = type
- if type == 'MD5':
- if not SCons.Util.md5:
- raise UserError, "MD5 signatures are not available in this version of Python."
- self.decide_source = self._changed_content
- elif type == 'timestamp':
- self.decide_source = self._changed_timestamp_match
- else:
- raise UserError, "Unknown source signature type '%s'" % type
-
- def Split(self, arg):
- """This function converts a string or list into a list of strings
- or Nodes. This makes things easier for users by allowing files to
- be specified as a white-space separated list to be split.
- The input rules are:
- - A single string containing names separated by spaces. These will be
- split apart at the spaces.
- - A single Node instance
- - A list containing either strings or Node instances. Any strings
- in the list are not split at spaces.
- In all cases, the function returns a list of Nodes and strings."""
- if SCons.Util.is_List(arg):
- return map(self.subst, arg)
- elif SCons.Util.is_String(arg):
- return string.split(self.subst(arg))
- else:
- return [self.subst(arg)]
-
- def TargetSignatures(self, type):
- global _warn_target_signatures_deprecated
- if _warn_target_signatures_deprecated:
- msg = "The env.TargetSignatures() method is deprecated;\n" + \
- "\tconvert your build to use the env.Decider() method instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedTargetSignaturesWarning, msg)
- _warn_target_signatures_deprecated = False
- type = self.subst(type)
- self.tgt_sig_type = type
- if type in ('MD5', 'content'):
- if not SCons.Util.md5:
- raise UserError, "MD5 signatures are not available in this version of Python."
- self.decide_target = self._changed_content
- elif type == 'timestamp':
- self.decide_target = self._changed_timestamp_match
- elif type == 'build':
- self.decide_target = self._changed_build
- elif type == 'source':
- self.decide_target = self._changed_source
- else:
- raise UserError, "Unknown target signature type '%s'"%type
-
- def Value(self, value, built_value=None):
- """
- """
- return SCons.Node.Python.Value(value, built_value)
-
- def VariantDir(self, variant_dir, src_dir, duplicate=1):
- variant_dir = self.arg2nodes(variant_dir, self.fs.Dir)[0]
- src_dir = self.arg2nodes(src_dir, self.fs.Dir)[0]
- self.fs.VariantDir(variant_dir, src_dir, duplicate)
-
- def FindSourceFiles(self, node='.'):
- """ returns a list of all source files.
- """
- node = self.arg2nodes(node, self.fs.Entry)[0]
-
- sources = []
- # Uncomment this and get rid of the global definition when we
- # drop support for pre-2.2 Python versions.
- #def build_source(ss, result):
- # for s in ss:
- # if isinstance(s, SCons.Node.FS.Dir):
- # build_source(s.all_children(), result)
- # elif s.has_builder():
- # build_source(s.sources, result)
- # elif isinstance(s.disambiguate(), SCons.Node.FS.File):
- # result.append(s)
- build_source(node.all_children(), sources)
-
- # THIS CODE APPEARS TO HAVE NO EFFECT
- # # get the final srcnode for all nodes, this means stripping any
- # # attached build node by calling the srcnode function
- # for file in sources:
- # srcnode = file.srcnode()
- # while srcnode != file.srcnode():
- # srcnode = file.srcnode()
-
- # remove duplicates
- return list(set(sources))
-
- def FindInstalledFiles(self):
- """ returns the list of all targets of the Install and InstallAs Builder.
- """
- from SCons.Tool import install
- if install._UNIQUE_INSTALLED_FILES is None:
- install._UNIQUE_INSTALLED_FILES = SCons.Util.uniquer_hashables(install._INSTALLED_FILES)
- return install._UNIQUE_INSTALLED_FILES
-
-class OverrideEnvironment(Base):
- """A proxy that overrides variables in a wrapped construction
- environment by returning values from an overrides dictionary in
- preference to values from the underlying subject environment.
-
- This is a lightweight (I hope) proxy that passes through most use of
- attributes to the underlying Environment.Base class, but has just
- enough additional methods defined to act like a real construction
- environment with overridden values. It can wrap either a Base
- construction environment, or another OverrideEnvironment, which
- can in turn nest arbitrary OverrideEnvironments...
-
- Note that we do *not* call the underlying base class
- (SubsitutionEnvironment) initialization, because we get most of those
- from proxying the attributes of the subject construction environment.
- But because we subclass SubstitutionEnvironment, this class also
- has inherited arg2nodes() and subst*() methods; those methods can't
- be proxied because they need *this* object's methods to fetch the
- values from the overrides dictionary.
- """
-
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- def __init__(self, subject, overrides={}):
- if __debug__: logInstanceCreation(self, 'Environment.OverrideEnvironment')
- self.__dict__['__subject'] = subject
- self.__dict__['overrides'] = overrides
-
- # Methods that make this class act like a proxy.
- def __getattr__(self, name):
- return getattr(self.__dict__['__subject'], name)
- def __setattr__(self, name, value):
- setattr(self.__dict__['__subject'], name, value)
-
- # Methods that make this class act like a dictionary.
- def __getitem__(self, key):
- try:
- return self.__dict__['overrides'][key]
- except KeyError:
- return self.__dict__['__subject'].__getitem__(key)
- def __setitem__(self, key, value):
- if not is_valid_construction_var(key):
- raise SCons.Errors.UserError, "Illegal construction variable `%s'" % key
- self.__dict__['overrides'][key] = value
- def __delitem__(self, key):
- try:
- del self.__dict__['overrides'][key]
- except KeyError:
- deleted = 0
- else:
- deleted = 1
- try:
- result = self.__dict__['__subject'].__delitem__(key)
- except KeyError:
- if not deleted:
- raise
- result = None
- return result
- def get(self, key, default=None):
- """Emulates the get() method of dictionaries."""
- try:
- return self.__dict__['overrides'][key]
- except KeyError:
- return self.__dict__['__subject'].get(key, default)
- def has_key(self, key):
- try:
- self.__dict__['overrides'][key]
- return 1
- except KeyError:
- return self.__dict__['__subject'].has_key(key)
- def __contains__(self, key):
- if self.__dict__['overrides'].__contains__(key):
- return 1
- return self.__dict__['__subject'].__contains__(key)
- def Dictionary(self):
- """Emulates the items() method of dictionaries."""
- d = self.__dict__['__subject'].Dictionary().copy()
- d.update(self.__dict__['overrides'])
- return d
- def items(self):
- """Emulates the items() method of dictionaries."""
- return self.Dictionary().items()
-
- # Overridden private construction environment methods.
- def _update(self, dict):
- """Update an environment's values directly, bypassing the normal
- checks that occur when users try to set items.
- """
- self.__dict__['overrides'].update(dict)
-
- def gvars(self):
- return self.__dict__['__subject'].gvars()
-
- def lvars(self):
- lvars = self.__dict__['__subject'].lvars()
- lvars.update(self.__dict__['overrides'])
- return lvars
-
- # Overridden public construction environment methods.
- def Replace(self, **kw):
- kw = copy_non_reserved_keywords(kw)
- self.__dict__['overrides'].update(semi_deepcopy(kw))
-
-# The entry point that will be used by the external world
-# to refer to a construction environment. This allows the wrapper
-# interface to extend a construction environment for its own purposes
-# by subclassing SCons.Environment.Base and then assigning the
-# class to SCons.Environment.Environment.
-
-Environment = Base
-
-# An entry point for returning a proxy subclass instance that overrides
-# the subst*() methods so they don't actually perform construction
-# variable substitution. This is specifically intended to be the shim
-# layer in between global function calls (which don't want construction
-# variable substitution) and the DefaultEnvironment() (which would
-# substitute variables if left to its own devices)."""
-#
-# We have to wrap this in a function that allows us to delay definition of
-# the class until it's necessary, so that when it subclasses Environment
-# it will pick up whatever Environment subclass the wrapper interface
-# might have assigned to SCons.Environment.Environment.
-
-def NoSubstitutionProxy(subject):
- class _NoSubstitutionProxy(Environment):
- def __init__(self, subject):
- self.__dict__['__subject'] = subject
- def __getattr__(self, name):
- return getattr(self.__dict__['__subject'], name)
- def __setattr__(self, name, value):
- return setattr(self.__dict__['__subject'], name, value)
- def raw_to_mode(self, dict):
- try:
- raw = dict['raw']
- except KeyError:
- pass
- else:
- del dict['raw']
- dict['mode'] = raw
- def subst(self, string, *args, **kwargs):
- return string
- def subst_kw(self, kw, *args, **kwargs):
- return kw
- def subst_list(self, string, *args, **kwargs):
- nargs = (string, self,) + args
- nkw = kwargs.copy()
- nkw['gvars'] = {}
- self.raw_to_mode(nkw)
- return apply(SCons.Subst.scons_subst_list, nargs, nkw)
- def subst_target_source(self, string, *args, **kwargs):
- nargs = (string, self,) + args
- nkw = kwargs.copy()
- nkw['gvars'] = {}
- self.raw_to_mode(nkw)
- return apply(SCons.Subst.scons_subst, nargs, nkw)
- return _NoSubstitutionProxy(subject)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Errors.py b/3rdParty/SCons/scons-local/SCons/Errors.py
deleted file mode 100644
index 1fd5663..0000000
--- a/3rdParty/SCons/scons-local/SCons/Errors.py
+++ /dev/null
@@ -1,207 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-"""SCons.Errors
-
-This file contains the exception classes used to handle internal
-and user errors in SCons.
-
-"""
-
-__revision__ = "src/engine/SCons/Errors.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-import exceptions
-
-class BuildError(Exception):
- """ Errors occuring while building.
-
- BuildError have the following attributes:
-
- Information about the cause of the build error:
- -----------------------------------------------
-
- errstr : a description of the error message
-
- status : the return code of the action that caused the build
- error. Must be set to a non-zero value even if the
- build error is not due to an action returning a
- non-zero returned code.
-
- exitstatus : SCons exit status due to this build error.
- Must be nonzero unless due to an explicit Exit()
- call. Not always the same as status, since
- actions return a status code that should be
- respected, but SCons typically exits with 2
- irrespective of the return value of the failed
- action.
-
- filename : The name of the file or directory that caused the
- build error. Set to None if no files are associated with
- this error. This might be different from the target
- being built. For example, failure to create the
- directory in which the target file will appear. It
- can be None if the error is not due to a particular
- filename.
-
- exc_info : Info about exception that caused the build
- error. Set to (None, None, None) if this build
- error is not due to an exception.
-
-
- Information about the cause of the location of the error:
- ---------------------------------------------------------
-
- node : the error occured while building this target node(s)
-
- executor : the executor that caused the build to fail (might
- be None if the build failures is not due to the
- executor failing)
-
- action : the action that caused the build to fail (might be
- None if the build failures is not due to the an
- action failure)
-
- command : the command line for the action that caused the
- build to fail (might be None if the build failures
- is not due to the an action failure)
- """
-
- def __init__(self,
- node=None, errstr="Unknown error", status=2, exitstatus=2,
- filename=None, executor=None, action=None, command=None,
- exc_info=(None, None, None)):
-
- self.errstr = errstr
- self.status = status
- self.exitstatus = exitstatus
- self.filename = filename
- self.exc_info = exc_info
-
- self.node = node
- self.executor = executor
- self.action = action
- self.command = command
-
- Exception.__init__(self, node, errstr, status, exitstatus, filename,
- executor, action, command, exc_info)
-
- def __str__(self):
- if self.filename:
- return self.filename + ': ' + self.errstr
- else:
- return self.errstr
-
-class InternalError(Exception):
- pass
-
-class UserError(Exception):
- pass
-
-class StopError(Exception):
- pass
-
-class EnvironmentError(Exception):
- pass
-
-class MSVCError(IOError):
- pass
-
-class ExplicitExit(Exception):
- def __init__(self, node=None, status=None, *args):
- self.node = node
- self.status = status
- self.exitstatus = status
- apply(Exception.__init__, (self,) + args)
-
-def convert_to_BuildError(status, exc_info=None):
- """
- Convert any return code a BuildError Exception.
-
- `status' can either be a return code or an Exception.
- The buildError.status we set here will normally be
- used as the exit status of the "scons" process.
- """
- if not exc_info and isinstance(status, Exception):
- exc_info = (status.__class__, status, None)
-
- if isinstance(status, BuildError):
- buildError = status
- buildError.exitstatus = 2 # always exit with 2 on build errors
- elif isinstance(status, ExplicitExit):
- status = status.status
- errstr = 'Explicit exit, status %s' % status
- buildError = BuildError(
- errstr=errstr,
- status=status, # might be 0, OK here
- exitstatus=status, # might be 0, OK here
- exc_info=exc_info)
- # TODO(1.5):
- #elif isinstance(status, (StopError, UserError)):
- elif isinstance(status, StopError) or isinstance(status, UserError):
- buildError = BuildError(
- errstr=str(status),
- status=2,
- exitstatus=2,
- exc_info=exc_info)
- elif isinstance(status, exceptions.EnvironmentError):
- # If an IOError/OSError happens, raise a BuildError.
- # Report the name of the file or directory that caused the
- # error, which might be different from the target being built
- # (for example, failure to create the directory in which the
- # target file will appear).
- try: filename = status.filename
- except AttributeError: filename = None
- buildError = BuildError(
- errstr=status.strerror,
- status=status.errno,
- exitstatus=2,
- filename=filename,
- exc_info=exc_info)
- elif isinstance(status, Exception):
- buildError = BuildError(
- errstr='%s : %s' % (status.__class__.__name__, status),
- status=2,
- exitstatus=2,
- exc_info=exc_info)
- elif SCons.Util.is_String(status):
- buildError = BuildError(
- errstr=status,
- status=2,
- exitstatus=2)
- else:
- buildError = BuildError(
- errstr="Error %s" % status,
- status=status,
- exitstatus=2)
-
- #import sys
- #sys.stderr.write("convert_to_BuildError: status %s => (errstr %s, status %s)"%(status,buildError.errstr, buildError.status))
- return buildError
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Executor.py b/3rdParty/SCons/scons-local/SCons/Executor.py
deleted file mode 100644
index 0dfeaf1..0000000
--- a/3rdParty/SCons/scons-local/SCons/Executor.py
+++ /dev/null
@@ -1,636 +0,0 @@
-"""SCons.Executor
-
-A module for executing actions with specific lists of target and source
-Nodes.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Executor.py 4043 2009/02/23 09:06:45 scons"
-
-import string
-import UserList
-
-from SCons.Debug import logInstanceCreation
-import SCons.Errors
-import SCons.Memoize
-
-
-class Batch:
- """Remembers exact association between targets
- and sources of executor."""
- def __init__(self, targets=[], sources=[]):
- self.targets = targets
- self.sources = sources
-
-
-
-class TSList(UserList.UserList):
- """A class that implements $TARGETS or $SOURCES expansions by wrapping
- an executor Method. This class is used in the Executor.lvars()
- to delay creation of NodeList objects until they're needed.
-
- Note that we subclass UserList.UserList purely so that the
- is_Sequence() function will identify an object of this class as
- a list during variable expansion. We're not really using any
- UserList.UserList methods in practice.
- """
- def __init__(self, func):
- self.func = func
- def __getattr__(self, attr):
- nl = self.func()
- return getattr(nl, attr)
- def __getitem__(self, i):
- nl = self.func()
- return nl[i]
- def __getslice__(self, i, j):
- nl = self.func()
- i = max(i, 0); j = max(j, 0)
- return nl[i:j]
- def __str__(self):
- nl = self.func()
- return str(nl)
- def __repr__(self):
- nl = self.func()
- return repr(nl)
-
-class TSObject:
- """A class that implements $TARGET or $SOURCE expansions by wrapping
- an Executor method.
- """
- def __init__(self, func):
- self.func = func
- def __getattr__(self, attr):
- n = self.func()
- return getattr(n, attr)
- def __str__(self):
- n = self.func()
- if n:
- return str(n)
- return ''
- def __repr__(self):
- n = self.func()
- if n:
- return repr(n)
- return ''
-
-def rfile(node):
- """
- A function to return the results of a Node's rfile() method,
- if it exists, and the Node itself otherwise (if it's a Value
- Node, e.g.).
- """
- try:
- rfile = node.rfile
- except AttributeError:
- return node
- else:
- return rfile()
-
-
-class Executor:
- """A class for controlling instances of executing an action.
-
- This largely exists to hold a single association of an action,
- environment, list of environment override dictionaries, targets
- and sources for later processing as needed.
- """
-
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- memoizer_counters = []
-
- def __init__(self, action, env=None, overridelist=[{}],
- targets=[], sources=[], builder_kw={}):
- if __debug__: logInstanceCreation(self, 'Executor.Executor')
- self.set_action_list(action)
- self.pre_actions = []
- self.post_actions = []
- self.env = env
- self.overridelist = overridelist
- if targets or sources:
- self.batches = [Batch(targets[:], sources[:])]
- else:
- self.batches = []
- self.builder_kw = builder_kw
- self._memo = {}
-
- def get_lvars(self):
- try:
- return self.lvars
- except AttributeError:
- self.lvars = {
- 'CHANGED_SOURCES' : TSList(self._get_changed_sources),
- 'CHANGED_TARGETS' : TSList(self._get_changed_targets),
- 'SOURCE' : TSObject(self._get_source),
- 'SOURCES' : TSList(self._get_sources),
- 'TARGET' : TSObject(self._get_target),
- 'TARGETS' : TSList(self._get_targets),
- 'UNCHANGED_SOURCES' : TSList(self._get_unchanged_sources),
- 'UNCHANGED_TARGETS' : TSList(self._get_unchanged_targets),
- }
- return self.lvars
-
- def _get_changes(self):
- cs = []
- ct = []
- us = []
- ut = []
- for b in self.batches:
- if b.targets[0].is_up_to_date():
- us.extend(map(rfile, b.sources))
- ut.extend(b.targets)
- else:
- cs.extend(map(rfile, b.sources))
- ct.extend(b.targets)
- self._changed_sources_list = SCons.Util.NodeList(cs)
- self._changed_targets_list = SCons.Util.NodeList(ct)
- self._unchanged_sources_list = SCons.Util.NodeList(us)
- self._unchanged_targets_list = SCons.Util.NodeList(ut)
-
- def _get_changed_sources(self, *args, **kw):
- try:
- return self._changed_sources_list
- except AttributeError:
- self._get_changes()
- return self._changed_sources_list
-
- def _get_changed_targets(self, *args, **kw):
- try:
- return self._changed_targets_list
- except AttributeError:
- self._get_changes()
- return self._changed_targets_list
-
- def _get_source(self, *args, **kw):
- #return SCons.Util.NodeList([rfile(self.batches[0].sources[0]).get_subst_proxy()])
- return rfile(self.batches[0].sources[0]).get_subst_proxy()
-
- def _get_sources(self, *args, **kw):
- return SCons.Util.NodeList(map(lambda n: rfile(n).get_subst_proxy(), self.get_all_sources()))
-
- def _get_target(self, *args, **kw):
- #return SCons.Util.NodeList([self.batches[0].targets[0].get_subst_proxy()])
- return self.batches[0].targets[0].get_subst_proxy()
-
- def _get_targets(self, *args, **kw):
- return SCons.Util.NodeList(map(lambda n: n.get_subst_proxy(), self.get_all_targets()))
-
- def _get_unchanged_sources(self, *args, **kw):
- try:
- return self._unchanged_sources_list
- except AttributeError:
- self._get_changes()
- return self._unchanged_sources_list
-
- def _get_unchanged_targets(self, *args, **kw):
- try:
- return self._unchanged_targets_list
- except AttributeError:
- self._get_changes()
- return self._unchanged_targets_list
-
- def get_action_targets(self):
- if not self.action_list:
- return []
- targets_string = self.action_list[0].get_targets(self.env, self)
- if targets_string[0] == '$':
- targets_string = targets_string[1:]
- return self.get_lvars()[targets_string]
-
- def set_action_list(self, action):
- import SCons.Util
- if not SCons.Util.is_List(action):
- if not action:
- import SCons.Errors
- raise SCons.Errors.UserError, "Executor must have an action."
- action = [action]
- self.action_list = action
-
- def get_action_list(self):
- return self.pre_actions + self.action_list + self.post_actions
-
- def get_all_targets(self):
- """Returns all targets for all batches of this Executor."""
- result = []
- for batch in self.batches:
- # TODO(1.5): remove the list() cast
- result.extend(list(batch.targets))
- return result
-
- def get_all_sources(self):
- """Returns all sources for all batches of this Executor."""
- result = []
- for batch in self.batches:
- # TODO(1.5): remove the list() cast
- result.extend(list(batch.sources))
- return result
-
- def get_all_children(self):
- """Returns all unique children (dependencies) for all batches
- of this Executor.
-
- The Taskmaster can recognize when it's already evaluated a
- Node, so we don't have to make this list unique for its intended
- canonical use case, but we expect there to be a lot of redundancy
- (long lists of batched .cc files #including the same .h files
- over and over), so removing the duplicates once up front should
- save the Taskmaster a lot of work.
- """
- result = SCons.Util.UniqueList([])
- for target in self.get_all_targets():
- result.extend(target.children())
- return result
-
- def get_all_prerequisites(self):
- """Returns all unique (order-only) prerequisites for all batches
- of this Executor.
- """
- result = SCons.Util.UniqueList([])
- for target in self.get_all_targets():
- # TODO(1.5): remove the list() cast
- result.extend(list(target.prerequisites))
- return result
-
- def get_action_side_effects(self):
-
- """Returns all side effects for all batches of this
- Executor used by the underlying Action.
- """
- result = SCons.Util.UniqueList([])
- for target in self.get_action_targets():
- result.extend(target.side_effects)
- return result
-
- memoizer_counters.append(SCons.Memoize.CountValue('get_build_env'))
-
- def get_build_env(self):
- """Fetch or create the appropriate build Environment
- for this Executor.
- """
- try:
- return self._memo['get_build_env']
- except KeyError:
- pass
-
- # Create the build environment instance with appropriate
- # overrides. These get evaluated against the current
- # environment's construction variables so that users can
- # add to existing values by referencing the variable in
- # the expansion.
- overrides = {}
- for odict in self.overridelist:
- overrides.update(odict)
-
- import SCons.Defaults
- env = self.env or SCons.Defaults.DefaultEnvironment()
- build_env = env.Override(overrides)
-
- self._memo['get_build_env'] = build_env
-
- return build_env
-
- def get_build_scanner_path(self, scanner):
- """Fetch the scanner path for this executor's targets and sources.
- """
- env = self.get_build_env()
- try:
- cwd = self.batches[0].targets[0].cwd
- except (IndexError, AttributeError):
- cwd = None
- return scanner.path(env, cwd,
- self.get_all_targets(),
- self.get_all_sources())
-
- def get_kw(self, kw={}):
- result = self.builder_kw.copy()
- result.update(kw)
- result['executor'] = self
- return result
-
- def do_nothing(self, target, kw):
- return 0
-
- def do_execute(self, target, kw):
- """Actually execute the action list."""
- env = self.get_build_env()
- kw = self.get_kw(kw)
- status = 0
- for act in self.get_action_list():
- #args = (self.get_all_targets(), self.get_all_sources(), env)
- args = ([], [], env)
- status = apply(act, args, kw)
- if isinstance(status, SCons.Errors.BuildError):
- status.executor = self
- raise status
- elif status:
- msg = "Error %s" % status
- raise SCons.Errors.BuildError(
- errstr=msg,
- node=self.batches[0].targets,
- executor=self,
- action=act)
- return status
-
- # use extra indirection because with new-style objects (Python 2.2
- # and above) we can't override special methods, and nullify() needs
- # to be able to do this.
-
- def __call__(self, target, **kw):
- return self.do_execute(target, kw)
-
- def cleanup(self):
- self._memo = {}
-
- def add_sources(self, sources):
- """Add source files to this Executor's list. This is necessary
- for "multi" Builders that can be called repeatedly to build up
- a source file list for a given target."""
- # TODO(batch): extend to multiple batches
- assert (len(self.batches) == 1)
- # TODO(batch): remove duplicates?
- sources = filter(lambda x, s=self.batches[0].sources: x not in s, sources)
- self.batches[0].sources.extend(sources)
-
- def get_sources(self):
- return self.batches[0].sources
-
- def add_batch(self, targets, sources):
- """Add pair of associated target and source to this Executor's list.
- This is necessary for "batch" Builders that can be called repeatedly
- to build up a list of matching target and source files that will be
- used in order to update multiple target files at once from multiple
- corresponding source files, for tools like MSVC that support it."""
- self.batches.append(Batch(targets, sources))
-
- def prepare(self):
- """
- Preparatory checks for whether this Executor can go ahead
- and (try to) build its targets.
- """
- for s in self.get_all_sources():
- if s.missing():
- msg = "Source `%s' not found, needed by target `%s'."
- raise SCons.Errors.StopError, msg % (s, self.batches[0].targets[0])
-
- def add_pre_action(self, action):
- self.pre_actions.append(action)
-
- def add_post_action(self, action):
- self.post_actions.append(action)
-
- # another extra indirection for new-style objects and nullify...
-
- def my_str(self):
- env = self.get_build_env()
- get = lambda action, t=self.get_all_targets(), s=self.get_all_sources(), e=env: \
- action.genstring(t, s, e)
- return string.join(map(get, self.get_action_list()), "\n")
-
-
- def __str__(self):
- return self.my_str()
-
- def nullify(self):
- self.cleanup()
- self.do_execute = self.do_nothing
- self.my_str = lambda S=self: ''
-
- memoizer_counters.append(SCons.Memoize.CountValue('get_contents'))
-
- def get_contents(self):
- """Fetch the signature contents. This is the main reason this
- class exists, so we can compute this once and cache it regardless
- of how many target or source Nodes there are.
- """
- try:
- return self._memo['get_contents']
- except KeyError:
- pass
- env = self.get_build_env()
- get = lambda action, t=self.get_all_targets(), s=self.get_all_sources(), e=env: \
- action.get_contents(t, s, e)
- result = string.join(map(get, self.get_action_list()), "")
- self._memo['get_contents'] = result
- return result
-
- def get_timestamp(self):
- """Fetch a time stamp for this Executor. We don't have one, of
- course (only files do), but this is the interface used by the
- timestamp module.
- """
- return 0
-
- def scan_targets(self, scanner):
- # TODO(batch): scan by batches
- self.scan(scanner, self.get_all_targets())
-
- def scan_sources(self, scanner):
- # TODO(batch): scan by batches
- if self.batches[0].sources:
- self.scan(scanner, self.get_all_sources())
-
- def scan(self, scanner, node_list):
- """Scan a list of this Executor's files (targets or sources) for
- implicit dependencies and update all of the targets with them.
- This essentially short-circuits an N*M scan of the sources for
- each individual target, which is a hell of a lot more efficient.
- """
- env = self.get_build_env()
-
- # TODO(batch): scan by batches)
- deps = []
- if scanner:
- for node in node_list:
- node.disambiguate()
- s = scanner.select(node)
- if not s:
- continue
- path = self.get_build_scanner_path(s)
- deps.extend(node.get_implicit_deps(env, s, path))
- else:
- kw = self.get_kw()
- for node in node_list:
- node.disambiguate()
- scanner = node.get_env_scanner(env, kw)
- if not scanner:
- continue
- scanner = scanner.select(node)
- if not scanner:
- continue
- path = self.get_build_scanner_path(scanner)
- deps.extend(node.get_implicit_deps(env, scanner, path))
-
- deps.extend(self.get_implicit_deps())
-
- for tgt in self.get_all_targets():
- tgt.add_to_implicit(deps)
-
- def _get_unignored_sources_key(self, node, ignore=()):
- return (node,) + tuple(ignore)
-
- memoizer_counters.append(SCons.Memoize.CountDict('get_unignored_sources', _get_unignored_sources_key))
-
- def get_unignored_sources(self, node, ignore=()):
- key = (node,) + tuple(ignore)
- try:
- memo_dict = self._memo['get_unignored_sources']
- except KeyError:
- memo_dict = {}
- self._memo['get_unignored_sources'] = memo_dict
- else:
- try:
- return memo_dict[key]
- except KeyError:
- pass
-
- if node:
- # TODO: better way to do this (it's a linear search,
- # but it may not be critical path)?
- sourcelist = []
- for b in self.batches:
- if node in b.targets:
- sourcelist = b.sources
- break
- else:
- sourcelist = self.get_all_sources()
- if ignore:
- idict = {}
- for i in ignore:
- idict[i] = 1
- sourcelist = filter(lambda s, i=idict: not i.has_key(s), sourcelist)
-
- memo_dict[key] = sourcelist
-
- return sourcelist
-
- def get_implicit_deps(self):
- """Return the executor's implicit dependencies, i.e. the nodes of
- the commands to be executed."""
- result = []
- build_env = self.get_build_env()
- for act in self.get_action_list():
- deps = act.get_implicit_deps(self.get_all_targets(),
- self.get_all_sources(),
- build_env)
- result.extend(deps)
- return result
-
-
-
-_batch_executors = {}
-
-def GetBatchExecutor(key):
- return _batch_executors[key]
-
-def AddBatchExecutor(key, executor):
- assert not _batch_executors.has_key(key)
- _batch_executors[key] = executor
-
-nullenv = None
-
-
-def get_NullEnvironment():
- """Use singleton pattern for Null Environments."""
- global nullenv
-
- import SCons.Util
- class NullEnvironment(SCons.Util.Null):
- import SCons.CacheDir
- _CacheDir_path = None
- _CacheDir = SCons.CacheDir.CacheDir(None)
- def get_CacheDir(self):
- return self._CacheDir
-
- if not nullenv:
- nullenv = NullEnvironment()
- return nullenv
-
-class Null:
- """A null Executor, with a null build Environment, that does
- nothing when the rest of the methods call it.
-
- This might be able to disapper when we refactor things to
- disassociate Builders from Nodes entirely, so we're not
- going to worry about unit tests for this--at least for now.
- """
- def __init__(self, *args, **kw):
- if __debug__: logInstanceCreation(self, 'Executor.Null')
- self.batches = [Batch(kw['targets'][:], [])]
- def get_build_env(self):
- return get_NullEnvironment()
- def get_build_scanner_path(self):
- return None
- def cleanup(self):
- pass
- def prepare(self):
- pass
- def get_unignored_sources(self, *args, **kw):
- return tuple(())
- def get_action_targets(self):
- return []
- def get_action_list(self):
- return []
- def get_all_targets(self):
- return self.batches[0].targets
- def get_all_sources(self):
- return self.batches[0].targets[0].sources
- def get_all_children(self):
- return self.get_all_sources()
- def get_all_prerequisites(self):
- return []
- def get_action_side_effects(self):
- return []
- def __call__(self, *args, **kw):
- return 0
- def get_contents(self):
- return ''
- def _morph(self):
- """Morph this Null executor to a real Executor object."""
- batches = self.batches
- self.__class__ = Executor
- self.__init__([])
- self.batches = batches
-
- # The following methods require morphing this Null Executor to a
- # real Executor object.
-
- def add_pre_action(self, action):
- self._morph()
- self.add_pre_action(action)
- def add_post_action(self, action):
- self._morph()
- self.add_post_action(action)
- def set_action_list(self, action):
- self._morph()
- self.set_action_list(action)
-
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Job.py b/3rdParty/SCons/scons-local/SCons/Job.py
deleted file mode 100644
index 4efddd4..0000000
--- a/3rdParty/SCons/scons-local/SCons/Job.py
+++ /dev/null
@@ -1,435 +0,0 @@
-"""SCons.Job
-
-This module defines the Serial and Parallel classes that execute tasks to
-complete a build. The Jobs class provides a higher level interface to start,
-stop, and wait on jobs.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Job.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import signal
-
-import SCons.Errors
-
-# The default stack size (in kilobytes) of the threads used to execute
-# jobs in parallel.
-#
-# We use a stack size of 256 kilobytes. The default on some platforms
-# is too large and prevents us from creating enough threads to fully
-# parallelized the build. For example, the default stack size on linux
-# is 8 MBytes.
-
-explicit_stack_size = None
-default_stack_size = 256
-
-interrupt_msg = 'Build interrupted.'
-
-
-class InterruptState:
- def __init__(self):
- self.interrupted = False
-
- def set(self):
- self.interrupted = True
-
- def __call__(self):
- return self.interrupted
-
-
-class Jobs:
- """An instance of this class initializes N jobs, and provides
- methods for starting, stopping, and waiting on all N jobs.
- """
-
- def __init__(self, num, taskmaster):
- """
- create 'num' jobs using the given taskmaster.
-
- If 'num' is 1 or less, then a serial job will be used,
- otherwise a parallel job with 'num' worker threads will
- be used.
-
- The 'num_jobs' attribute will be set to the actual number of jobs
- allocated. If more than one job is requested but the Parallel
- class can't do it, it gets reset to 1. Wrapping interfaces that
- care should check the value of 'num_jobs' after initialization.
- """
-
- self.job = None
- if num > 1:
- stack_size = explicit_stack_size
- if stack_size is None:
- stack_size = default_stack_size
-
- try:
- self.job = Parallel(taskmaster, num, stack_size)
- self.num_jobs = num
- except NameError:
- pass
- if self.job is None:
- self.job = Serial(taskmaster)
- self.num_jobs = 1
-
- def run(self, postfunc=lambda: None):
- """Run the jobs.
-
- postfunc() will be invoked after the jobs has run. It will be
- invoked even if the jobs are interrupted by a keyboard
- interrupt (well, in fact by a signal such as either SIGINT,
- SIGTERM or SIGHUP). The execution of postfunc() is protected
- against keyboard interrupts and is guaranteed to run to
- completion."""
- self._setup_sig_handler()
- try:
- self.job.start()
- finally:
- postfunc()
- self._reset_sig_handler()
-
- def were_interrupted(self):
- """Returns whether the jobs were interrupted by a signal."""
- return self.job.interrupted()
-
- def _setup_sig_handler(self):
- """Setup an interrupt handler so that SCons can shutdown cleanly in
- various conditions:
-
- a) SIGINT: Keyboard interrupt
- b) SIGTERM: kill or system shutdown
- c) SIGHUP: Controlling shell exiting
-
- We handle all of these cases by stopping the taskmaster. It
- turns out that it very difficult to stop the build process
- by throwing asynchronously an exception such as
- KeyboardInterrupt. For example, the python Condition
- variables (threading.Condition) and Queue's do not seem to
- asynchronous-exception-safe. It would require adding a whole
- bunch of try/finally block and except KeyboardInterrupt all
- over the place.
-
- Note also that we have to be careful to handle the case when
- SCons forks before executing another process. In that case, we
- want the child to exit immediately.
- """
- def handler(signum, stack, self=self, parentpid=os.getpid()):
- if os.getpid() == parentpid:
- self.job.taskmaster.stop()
- self.job.interrupted.set()
- else:
- os._exit(2)
-
- self.old_sigint = signal.signal(signal.SIGINT, handler)
- self.old_sigterm = signal.signal(signal.SIGTERM, handler)
- try:
- self.old_sighup = signal.signal(signal.SIGHUP, handler)
- except AttributeError:
- pass
-
- def _reset_sig_handler(self):
- """Restore the signal handlers to their previous state (before the
- call to _setup_sig_handler()."""
-
- signal.signal(signal.SIGINT, self.old_sigint)
- signal.signal(signal.SIGTERM, self.old_sigterm)
- try:
- signal.signal(signal.SIGHUP, self.old_sighup)
- except AttributeError:
- pass
-
-class Serial:
- """This class is used to execute tasks in series, and is more efficient
- than Parallel, but is only appropriate for non-parallel builds. Only
- one instance of this class should be in existence at a time.
-
- This class is not thread safe.
- """
-
- def __init__(self, taskmaster):
- """Create a new serial job given a taskmaster.
-
- The taskmaster's next_task() method should return the next task
- that needs to be executed, or None if there are no more tasks. The
- taskmaster's executed() method will be called for each task when it
- is successfully executed or failed() will be called if it failed to
- execute (e.g. execute() raised an exception)."""
-
- self.taskmaster = taskmaster
- self.interrupted = InterruptState()
-
- def start(self):
- """Start the job. This will begin pulling tasks from the taskmaster
- and executing them, and return when there are no more tasks. If a task
- fails to execute (i.e. execute() raises an exception), then the job will
- stop."""
-
- while 1:
- task = self.taskmaster.next_task()
-
- if task is None:
- break
-
- try:
- task.prepare()
- if task.needs_execute():
- task.execute()
- except:
- if self.interrupted():
- try:
- raise SCons.Errors.BuildError(
- task.targets[0], errstr=interrupt_msg)
- except:
- task.exception_set()
- else:
- task.exception_set()
-
- # Let the failed() callback function arrange for the
- # build to stop if that's appropriate.
- task.failed()
- else:
- task.executed()
-
- task.postprocess()
- self.taskmaster.cleanup()
-
-
-# Trap import failure so that everything in the Job module but the
-# Parallel class (and its dependent classes) will work if the interpreter
-# doesn't support threads.
-try:
- import Queue
- import threading
-except ImportError:
- pass
-else:
- class Worker(threading.Thread):
- """A worker thread waits on a task to be posted to its request queue,
- dequeues the task, executes it, and posts a tuple including the task
- and a boolean indicating whether the task executed successfully. """
-
- def __init__(self, requestQueue, resultsQueue, interrupted):
- threading.Thread.__init__(self)
- self.setDaemon(1)
- self.requestQueue = requestQueue
- self.resultsQueue = resultsQueue
- self.interrupted = interrupted
- self.start()
-
- def run(self):
- while 1:
- task = self.requestQueue.get()
-
- if task is None:
- # The "None" value is used as a sentinel by
- # ThreadPool.cleanup(). This indicates that there
- # are no more tasks, so we should quit.
- break
-
- try:
- if self.interrupted():
- raise SCons.Errors.BuildError(
- task.targets[0], errstr=interrupt_msg)
- task.execute()
- except:
- task.exception_set()
- ok = False
- else:
- ok = True
-
- self.resultsQueue.put((task, ok))
-
- class ThreadPool:
- """This class is responsible for spawning and managing worker threads."""
-
- def __init__(self, num, stack_size, interrupted):
- """Create the request and reply queues, and 'num' worker threads.
-
- One must specify the stack size of the worker threads. The
- stack size is specified in kilobytes.
- """
- self.requestQueue = Queue.Queue(0)
- self.resultsQueue = Queue.Queue(0)
-
- try:
- prev_size = threading.stack_size(stack_size*1024)
- except AttributeError, e:
- # Only print a warning if the stack size has been
- # explicitly set.
- if not explicit_stack_size is None:
- msg = "Setting stack size is unsupported by this version of Python:\n " + \
- e.args[0]
- SCons.Warnings.warn(SCons.Warnings.StackSizeWarning, msg)
- except ValueError, e:
- msg = "Setting stack size failed:\n " + str(e)
- SCons.Warnings.warn(SCons.Warnings.StackSizeWarning, msg)
-
- # Create worker threads
- self.workers = []
- for _ in range(num):
- worker = Worker(self.requestQueue, self.resultsQueue, interrupted)
- self.workers.append(worker)
-
- # Once we drop Python 1.5 we can change the following to:
- #if 'prev_size' in locals():
- if 'prev_size' in locals().keys():
- threading.stack_size(prev_size)
-
- def put(self, task):
- """Put task into request queue."""
- self.requestQueue.put(task)
-
- def get(self):
- """Remove and return a result tuple from the results queue."""
- return self.resultsQueue.get()
-
- def preparation_failed(self, task):
- self.resultsQueue.put((task, False))
-
- def cleanup(self):
- """
- Shuts down the thread pool, giving each worker thread a
- chance to shut down gracefully.
- """
- # For each worker thread, put a sentinel "None" value
- # on the requestQueue (indicating that there's no work
- # to be done) so that each worker thread will get one and
- # terminate gracefully.
- for _ in self.workers:
- self.requestQueue.put(None)
-
- # Wait for all of the workers to terminate.
- #
- # If we don't do this, later Python versions (2.4, 2.5) often
- # seem to raise exceptions during shutdown. This happens
- # in requestQueue.get(), as an assertion failure that
- # requestQueue.not_full is notified while not acquired,
- # seemingly because the main thread has shut down (or is
- # in the process of doing so) while the workers are still
- # trying to pull sentinels off the requestQueue.
- #
- # Normally these terminations should happen fairly quickly,
- # but we'll stick a one-second timeout on here just in case
- # someone gets hung.
- for worker in self.workers:
- worker.join(1.0)
- self.workers = []
-
- class Parallel:
- """This class is used to execute tasks in parallel, and is somewhat
- less efficient than Serial, but is appropriate for parallel builds.
-
- This class is thread safe.
- """
-
- def __init__(self, taskmaster, num, stack_size):
- """Create a new parallel job given a taskmaster.
-
- The taskmaster's next_task() method should return the next
- task that needs to be executed, or None if there are no more
- tasks. The taskmaster's executed() method will be called
- for each task when it is successfully executed or failed()
- will be called if the task failed to execute (i.e. execute()
- raised an exception).
-
- Note: calls to taskmaster are serialized, but calls to
- execute() on distinct tasks are not serialized, because
- that is the whole point of parallel jobs: they can execute
- multiple tasks simultaneously. """
-
- self.taskmaster = taskmaster
- self.interrupted = InterruptState()
- self.tp = ThreadPool(num, stack_size, self.interrupted)
-
- self.maxjobs = num
-
- def start(self):
- """Start the job. This will begin pulling tasks from the
- taskmaster and executing them, and return when there are no
- more tasks. If a task fails to execute (i.e. execute() raises
- an exception), then the job will stop."""
-
- jobs = 0
-
- while 1:
- # Start up as many available tasks as we're
- # allowed to.
- while jobs < self.maxjobs:
- task = self.taskmaster.next_task()
- if task is None:
- break
-
- try:
- # prepare task for execution
- task.prepare()
- except:
- task.exception_set()
- task.failed()
- task.postprocess()
- else:
- if task.needs_execute():
- # dispatch task
- self.tp.put(task)
- jobs = jobs + 1
- else:
- task.executed()
- task.postprocess()
-
- if not task and not jobs: break
-
- # Let any/all completed tasks finish up before we go
- # back and put the next batch of tasks on the queue.
- while 1:
- task, ok = self.tp.get()
- jobs = jobs - 1
-
- if ok:
- task.executed()
- else:
- if self.interrupted():
- try:
- raise SCons.Errors.BuildError(
- task.targets[0], errstr=interrupt_msg)
- except:
- task.exception_set()
-
- # Let the failed() callback function arrange
- # for the build to stop if that's appropriate.
- task.failed()
-
- task.postprocess()
-
- if self.tp.resultsQueue.empty():
- break
-
- self.tp.cleanup()
- self.taskmaster.cleanup()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Memoize.py b/3rdParty/SCons/scons-local/SCons/Memoize.py
deleted file mode 100644
index dbb0cf1..0000000
--- a/3rdParty/SCons/scons-local/SCons/Memoize.py
+++ /dev/null
@@ -1,292 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Memoize.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Memoizer
-
-A metaclass implementation to count hits and misses of the computed
-values that various methods cache in memory.
-
-Use of this modules assumes that wrapped methods be coded to cache their
-values in a consistent way. Here is an example of wrapping a method
-that returns a computed value, with no input parameters:
-
- memoizer_counters = [] # Memoization
-
- memoizer_counters.append(SCons.Memoize.CountValue('foo')) # Memoization
-
- def foo(self):
-
- try: # Memoization
- return self._memo['foo'] # Memoization
- except KeyError: # Memoization
- pass # Memoization
-
- result = self.compute_foo_value()
-
- self._memo['foo'] = result # Memoization
-
- return result
-
-Here is an example of wrapping a method that will return different values
-based on one or more input arguments:
-
- def _bar_key(self, argument): # Memoization
- return argument # Memoization
-
- memoizer_counters.append(SCons.Memoize.CountDict('bar', _bar_key)) # Memoization
-
- def bar(self, argument):
-
- memo_key = argument # Memoization
- try: # Memoization
- memo_dict = self._memo['bar'] # Memoization
- except KeyError: # Memoization
- memo_dict = {} # Memoization
- self._memo['dict'] = memo_dict # Memoization
- else: # Memoization
- try: # Memoization
- return memo_dict[memo_key] # Memoization
- except KeyError: # Memoization
- pass # Memoization
-
- result = self.compute_bar_value(argument)
-
- memo_dict[memo_key] = result # Memoization
-
- return result
-
-At one point we avoided replicating this sort of logic in all the methods
-by putting it right into this module, but we've moved away from that at
-present (see the "Historical Note," below.).
-
-Deciding what to cache is tricky, because different configurations
-can have radically different performance tradeoffs, and because the
-tradeoffs involved are often so non-obvious. Consequently, deciding
-whether or not to cache a given method will likely be more of an art than
-a science, but should still be based on available data from this module.
-Here are some VERY GENERAL guidelines about deciding whether or not to
-cache return values from a method that's being called a lot:
-
- -- The first question to ask is, "Can we change the calling code
- so this method isn't called so often?" Sometimes this can be
- done by changing the algorithm. Sometimes the *caller* should
- be memoized, not the method you're looking at.
-
- -- The memoized function should be timed with multiple configurations
- to make sure it doesn't inadvertently slow down some other
- configuration.
-
- -- When memoizing values based on a dictionary key composed of
- input arguments, you don't need to use all of the arguments
- if some of them don't affect the return values.
-
-Historical Note: The initial Memoizer implementation actually handled
-the caching of values for the wrapped methods, based on a set of generic
-algorithms for computing hashable values based on the method's arguments.
-This collected caching logic nicely, but had two drawbacks:
-
- Running arguments through a generic key-conversion mechanism is slower
- (and less flexible) than just coding these things directly. Since the
- methods that need memoized values are generally performance-critical,
- slowing them down in order to collect the logic isn't the right
- tradeoff.
-
- Use of the memoizer really obscured what was being called, because
- all the memoized methods were wrapped with re-used generic methods.
- This made it more difficult, for example, to use the Python profiler
- to figure out how to optimize the underlying methods.
-"""
-
-import new
-
-# A flag controlling whether or not we actually use memoization.
-use_memoizer = None
-
-CounterList = []
-
-class Counter:
- """
- Base class for counting memoization hits and misses.
-
- We expect that the metaclass initialization will have filled in
- the .name attribute that represents the name of the function
- being counted.
- """
- def __init__(self, method_name):
- """
- """
- self.method_name = method_name
- self.hit = 0
- self.miss = 0
- CounterList.append(self)
- def display(self):
- fmt = " %7d hits %7d misses %s()"
- print fmt % (self.hit, self.miss, self.name)
- def __cmp__(self, other):
- try:
- return cmp(self.name, other.name)
- except AttributeError:
- return 0
-
-class CountValue(Counter):
- """
- A counter class for simple, atomic memoized values.
-
- A CountValue object should be instantiated in a class for each of
- the class's methods that memoizes its return value by simply storing
- the return value in its _memo dictionary.
-
- We expect that the metaclass initialization will fill in the
- .underlying_method attribute with the method that we're wrapping.
- We then call the underlying_method method after counting whether
- its memoized value has already been set (a hit) or not (a miss).
- """
- def __call__(self, *args, **kw):
- obj = args[0]
- if obj._memo.has_key(self.method_name):
- self.hit = self.hit + 1
- else:
- self.miss = self.miss + 1
- return apply(self.underlying_method, args, kw)
-
-class CountDict(Counter):
- """
- A counter class for memoized values stored in a dictionary, with
- keys based on the method's input arguments.
-
- A CountDict object is instantiated in a class for each of the
- class's methods that memoizes its return value in a dictionary,
- indexed by some key that can be computed from one or more of
- its input arguments.
-
- We expect that the metaclass initialization will fill in the
- .underlying_method attribute with the method that we're wrapping.
- We then call the underlying_method method after counting whether the
- computed key value is already present in the memoization dictionary
- (a hit) or not (a miss).
- """
- def __init__(self, method_name, keymaker):
- """
- """
- Counter.__init__(self, method_name)
- self.keymaker = keymaker
- def __call__(self, *args, **kw):
- obj = args[0]
- try:
- memo_dict = obj._memo[self.method_name]
- except KeyError:
- self.miss = self.miss + 1
- else:
- key = apply(self.keymaker, args, kw)
- if memo_dict.has_key(key):
- self.hit = self.hit + 1
- else:
- self.miss = self.miss + 1
- return apply(self.underlying_method, args, kw)
-
-class Memoizer:
- """Object which performs caching of method calls for its 'primary'
- instance."""
-
- def __init__(self):
- pass
-
-# Find out if we support metaclasses (Python 2.2 and later).
-
-class M:
- def __init__(cls, name, bases, cls_dict):
- cls.use_metaclass = 1
- def fake_method(self):
- pass
- new.instancemethod(fake_method, None, cls)
-
-try:
- class A:
- __metaclass__ = M
-
- use_metaclass = A.use_metaclass
-except AttributeError:
- use_metaclass = None
- reason = 'no metaclasses'
-except TypeError:
- use_metaclass = None
- reason = 'new.instancemethod() bug'
-else:
- del A
-
-del M
-
-if not use_metaclass:
-
- def Dump(title):
- pass
-
- try:
- class Memoized_Metaclass(type):
- # Just a place-holder so pre-metaclass Python versions don't
- # have to have special code for the Memoized classes.
- pass
- except TypeError:
- class Memoized_Metaclass:
- # A place-holder so pre-metaclass Python versions don't
- # have to have special code for the Memoized classes.
- pass
-
- def EnableMemoization():
- import SCons.Warnings
- msg = 'memoization is not supported in this version of Python (%s)'
- raise SCons.Warnings.NoMetaclassSupportWarning, msg % reason
-
-else:
-
- def Dump(title=None):
- if title:
- print title
- CounterList.sort()
- for counter in CounterList:
- counter.display()
-
- class Memoized_Metaclass(type):
- def __init__(cls, name, bases, cls_dict):
- super(Memoized_Metaclass, cls).__init__(name, bases, cls_dict)
-
- for counter in cls_dict.get('memoizer_counters', []):
- method_name = counter.method_name
-
- counter.name = cls.__name__ + '.' + method_name
- counter.underlying_method = cls_dict[method_name]
-
- replacement_method = new.instancemethod(counter, None, cls)
- setattr(cls, method_name, replacement_method)
-
- def EnableMemoization():
- global use_memoizer
- use_memoizer = 1
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Node/Alias.py b/3rdParty/SCons/scons-local/SCons/Node/Alias.py
deleted file mode 100644
index a52a3fb..0000000
--- a/3rdParty/SCons/scons-local/SCons/Node/Alias.py
+++ /dev/null
@@ -1,153 +0,0 @@
-
-"""scons.Node.Alias
-
-Alias nodes.
-
-This creates a hash of global Aliases (dummy targets).
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Node/Alias.py 4043 2009/02/23 09:06:45 scons"
-
-import string
-import UserDict
-
-import SCons.Errors
-import SCons.Node
-import SCons.Util
-
-class AliasNameSpace(UserDict.UserDict):
- def Alias(self, name, **kw):
- if isinstance(name, SCons.Node.Alias.Alias):
- return name
- try:
- a = self[name]
- except KeyError:
- a = apply(SCons.Node.Alias.Alias, (name,), kw)
- self[name] = a
- return a
-
- def lookup(self, name, **kw):
- try:
- return self[name]
- except KeyError:
- return None
-
-class AliasNodeInfo(SCons.Node.NodeInfoBase):
- current_version_id = 1
- field_list = ['csig']
- def str_to_node(self, s):
- return default_ans.Alias(s)
-
-class AliasBuildInfo(SCons.Node.BuildInfoBase):
- current_version_id = 1
-
-class Alias(SCons.Node.Node):
-
- NodeInfo = AliasNodeInfo
- BuildInfo = AliasBuildInfo
-
- def __init__(self, name):
- SCons.Node.Node.__init__(self)
- self.name = name
-
- def str_for_display(self):
- return '"' + self.__str__() + '"'
-
- def __str__(self):
- return self.name
-
- def make_ready(self):
- self.get_csig()
-
- really_build = SCons.Node.Node.build
- is_up_to_date = SCons.Node.Node.children_are_up_to_date
-
- def is_under(self, dir):
- # Make Alias nodes get built regardless of
- # what directory scons was run from. Alias nodes
- # are outside the filesystem:
- return 1
-
- def get_contents(self):
- """The contents of an alias is the concatenation
- of the content signatures of all its sources."""
- childsigs = map(lambda n: n.get_csig(), self.children())
- return string.join(childsigs, '')
-
- def sconsign(self):
- """An Alias is not recorded in .sconsign files"""
- pass
-
- #
- #
- #
-
- def changed_since_last_build(self, target, prev_ni):
- cur_csig = self.get_csig()
- try:
- return cur_csig != prev_ni.csig
- except AttributeError:
- return 1
-
- def build(self):
- """A "builder" for aliases."""
- pass
-
- def convert(self):
- try: del self.builder
- except AttributeError: pass
- self.reset_executor()
- self.build = self.really_build
-
- def get_csig(self):
- """
- Generate a node's content signature, the digested signature
- of its content.
-
- node - the node
- cache - alternate node to use for the signature cache
- returns - the content signature
- """
- try:
- return self.ninfo.csig
- except AttributeError:
- pass
-
- contents = self.get_contents()
- csig = SCons.Util.MD5signature(contents)
- self.get_ninfo().csig = csig
- return csig
-
-default_ans = AliasNameSpace()
-
-SCons.Node.arg2nodes_lookups.append(default_ans.lookup)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Node/FS.py b/3rdParty/SCons/scons-local/SCons/Node/FS.py
deleted file mode 100644
index abcd8da..0000000
--- a/3rdParty/SCons/scons-local/SCons/Node/FS.py
+++ /dev/null
@@ -1,3166 +0,0 @@
-"""scons.Node.FS
-
-File system nodes.
-
-These Nodes represent the canonical external objects that people think
-of when they think of building software: files and directories.
-
-This holds a "default_fs" variable that should be initialized with an FS
-that can be used by scripts or modules looking for the canonical default.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Node/FS.py 4043 2009/02/23 09:06:45 scons"
-
-from itertools import izip
-import cStringIO
-import fnmatch
-import os
-import os.path
-import re
-import shutil
-import stat
-import string
-import sys
-import time
-
-try:
- import codecs
-except ImportError:
- pass
-else:
- # TODO(2.2): Remove when 2.3 becomes the minimal supported version.
- try:
- codecs.BOM_UTF8
- except AttributeError:
- codecs.BOM_UTF8 = '\xef\xbb\xbf'
- try:
- codecs.BOM_UTF16
- except AttributeError:
- if sys.byteorder == 'little':
- codecs.BOM_UTF16 = '\xff\xfe'
- else:
- codecs.BOM_UTF16 = '\xfe\xff'
-
-import SCons.Action
-from SCons.Debug import logInstanceCreation
-import SCons.Errors
-import SCons.Memoize
-import SCons.Node
-import SCons.Node.Alias
-import SCons.Subst
-import SCons.Util
-import SCons.Warnings
-
-from SCons.Debug import Trace
-
-do_store_info = True
-
-
-class EntryProxyAttributeError(AttributeError):
- """
- An AttributeError subclass for recording and displaying the name
- of the underlying Entry involved in an AttributeError exception.
- """
- def __init__(self, entry_proxy, attribute):
- AttributeError.__init__(self)
- self.entry_proxy = entry_proxy
- self.attribute = attribute
- def __str__(self):
- entry = self.entry_proxy.get()
- fmt = "%s instance %s has no attribute %s"
- return fmt % (entry.__class__.__name__,
- repr(entry.name),
- repr(self.attribute))
-
-# The max_drift value: by default, use a cached signature value for
-# any file that's been untouched for more than two days.
-default_max_drift = 2*24*60*60
-
-#
-# We stringify these file system Nodes a lot. Turning a file system Node
-# into a string is non-trivial, because the final string representation
-# can depend on a lot of factors: whether it's a derived target or not,
-# whether it's linked to a repository or source directory, and whether
-# there's duplication going on. The normal technique for optimizing
-# calculations like this is to memoize (cache) the string value, so you
-# only have to do the calculation once.
-#
-# A number of the above factors, however, can be set after we've already
-# been asked to return a string for a Node, because a Repository() or
-# VariantDir() call or the like may not occur until later in SConscript
-# files. So this variable controls whether we bother trying to save
-# string values for Nodes. The wrapper interface can set this whenever
-# they're done mucking with Repository and VariantDir and the other stuff,
-# to let this module know it can start returning saved string values
-# for Nodes.
-#
-Save_Strings = None
-
-def save_strings(val):
- global Save_Strings
- Save_Strings = val
-
-#
-# Avoid unnecessary function calls by recording a Boolean value that
-# tells us whether or not os.path.splitdrive() actually does anything
-# on this system, and therefore whether we need to bother calling it
-# when looking up path names in various methods below.
-#
-
-do_splitdrive = None
-
-def initialize_do_splitdrive():
- global do_splitdrive
- drive, path = os.path.splitdrive('X:/foo')
- do_splitdrive = not not drive
-
-initialize_do_splitdrive()
-
-#
-
-needs_normpath_check = None
-
-def initialize_normpath_check():
- """
- Initialize the normpath_check regular expression.
-
- This function is used by the unit tests to re-initialize the pattern
- when testing for behavior with different values of os.sep.
- """
- global needs_normpath_check
- if os.sep == '/':
- pattern = r'.*/|\.$|\.\.$'
- else:
- pattern = r'.*[/%s]|\.$|\.\.$' % re.escape(os.sep)
- needs_normpath_check = re.compile(pattern)
-
-initialize_normpath_check()
-
-#
-# SCons.Action objects for interacting with the outside world.
-#
-# The Node.FS methods in this module should use these actions to
-# create and/or remove files and directories; they should *not* use
-# os.{link,symlink,unlink,mkdir}(), etc., directly.
-#
-# Using these SCons.Action objects ensures that descriptions of these
-# external activities are properly displayed, that the displays are
-# suppressed when the -s (silent) option is used, and (most importantly)
-# the actions are disabled when the the -n option is used, in which case
-# there should be *no* changes to the external file system(s)...
-#
-
-if hasattr(os, 'link'):
- def _hardlink_func(fs, src, dst):
- # If the source is a symlink, we can't just hard-link to it
- # because a relative symlink may point somewhere completely
- # different. We must disambiguate the symlink and then
- # hard-link the final destination file.
- while fs.islink(src):
- link = fs.readlink(src)
- if not os.path.isabs(link):
- src = link
- else:
- src = os.path.join(os.path.dirname(src), link)
- fs.link(src, dst)
-else:
- _hardlink_func = None
-
-if hasattr(os, 'symlink'):
- def _softlink_func(fs, src, dst):
- fs.symlink(src, dst)
-else:
- _softlink_func = None
-
-def _copy_func(fs, src, dest):
- shutil.copy2(src, dest)
- st = fs.stat(src)
- fs.chmod(dest, stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE)
-
-
-Valid_Duplicates = ['hard-soft-copy', 'soft-hard-copy',
- 'hard-copy', 'soft-copy', 'copy']
-
-Link_Funcs = [] # contains the callables of the specified duplication style
-
-def set_duplicate(duplicate):
- # Fill in the Link_Funcs list according to the argument
- # (discarding those not available on the platform).
-
- # Set up the dictionary that maps the argument names to the
- # underlying implementations. We do this inside this function,
- # not in the top-level module code, so that we can remap os.link
- # and os.symlink for testing purposes.
- link_dict = {
- 'hard' : _hardlink_func,
- 'soft' : _softlink_func,
- 'copy' : _copy_func
- }
-
- if not duplicate in Valid_Duplicates:
- raise SCons.Errors.InternalError, ("The argument of set_duplicate "
- "should be in Valid_Duplicates")
- global Link_Funcs
- Link_Funcs = []
- for func in string.split(duplicate,'-'):
- if link_dict[func]:
- Link_Funcs.append(link_dict[func])
-
-def LinkFunc(target, source, env):
- # Relative paths cause problems with symbolic links, so
- # we use absolute paths, which may be a problem for people
- # who want to move their soft-linked src-trees around. Those
- # people should use the 'hard-copy' mode, softlinks cannot be
- # used for that; at least I have no idea how ...
- src = source[0].abspath
- dest = target[0].abspath
- dir, file = os.path.split(dest)
- if dir and not target[0].fs.isdir(dir):
- os.makedirs(dir)
- if not Link_Funcs:
- # Set a default order of link functions.
- set_duplicate('hard-soft-copy')
- fs = source[0].fs
- # Now link the files with the previously specified order.
- for func in Link_Funcs:
- try:
- func(fs, src, dest)
- break
- except (IOError, OSError):
- # An OSError indicates something happened like a permissions
- # problem or an attempt to symlink across file-system
- # boundaries. An IOError indicates something like the file
- # not existing. In either case, keeping trying additional
- # functions in the list and only raise an error if the last
- # one failed.
- if func == Link_Funcs[-1]:
- # exception of the last link method (copy) are fatal
- raise
- return 0
-
-Link = SCons.Action.Action(LinkFunc, None)
-def LocalString(target, source, env):
- return 'Local copy of %s from %s' % (target[0], source[0])
-
-LocalCopy = SCons.Action.Action(LinkFunc, LocalString)
-
-def UnlinkFunc(target, source, env):
- t = target[0]
- t.fs.unlink(t.abspath)
- return 0
-
-Unlink = SCons.Action.Action(UnlinkFunc, None)
-
-def MkdirFunc(target, source, env):
- t = target[0]
- if not t.exists():
- t.fs.mkdir(t.abspath)
- return 0
-
-Mkdir = SCons.Action.Action(MkdirFunc, None, presub=None)
-
-MkdirBuilder = None
-
-def get_MkdirBuilder():
- global MkdirBuilder
- if MkdirBuilder is None:
- import SCons.Builder
- import SCons.Defaults
- # "env" will get filled in by Executor.get_build_env()
- # calling SCons.Defaults.DefaultEnvironment() when necessary.
- MkdirBuilder = SCons.Builder.Builder(action = Mkdir,
- env = None,
- explain = None,
- is_explicit = None,
- target_scanner = SCons.Defaults.DirEntryScanner,
- name = "MkdirBuilder")
- return MkdirBuilder
-
-class _Null:
- pass
-
-_null = _Null()
-
-DefaultSCCSBuilder = None
-DefaultRCSBuilder = None
-
-def get_DefaultSCCSBuilder():
- global DefaultSCCSBuilder
- if DefaultSCCSBuilder is None:
- import SCons.Builder
- # "env" will get filled in by Executor.get_build_env()
- # calling SCons.Defaults.DefaultEnvironment() when necessary.
- act = SCons.Action.Action('$SCCSCOM', '$SCCSCOMSTR')
- DefaultSCCSBuilder = SCons.Builder.Builder(action = act,
- env = None,
- name = "DefaultSCCSBuilder")
- return DefaultSCCSBuilder
-
-def get_DefaultRCSBuilder():
- global DefaultRCSBuilder
- if DefaultRCSBuilder is None:
- import SCons.Builder
- # "env" will get filled in by Executor.get_build_env()
- # calling SCons.Defaults.DefaultEnvironment() when necessary.
- act = SCons.Action.Action('$RCS_COCOM', '$RCS_COCOMSTR')
- DefaultRCSBuilder = SCons.Builder.Builder(action = act,
- env = None,
- name = "DefaultRCSBuilder")
- return DefaultRCSBuilder
-
-# Cygwin's os.path.normcase pretends it's on a case-sensitive filesystem.
-_is_cygwin = sys.platform == "cygwin"
-if os.path.normcase("TeSt") == os.path.normpath("TeSt") and not _is_cygwin:
- def _my_normcase(x):
- return x
-else:
- def _my_normcase(x):
- return string.upper(x)
-
-
-
-class DiskChecker:
- def __init__(self, type, do, ignore):
- self.type = type
- self.do = do
- self.ignore = ignore
- self.set_do()
- def set_do(self):
- self.__call__ = self.do
- def set_ignore(self):
- self.__call__ = self.ignore
- def set(self, list):
- if self.type in list:
- self.set_do()
- else:
- self.set_ignore()
-
-def do_diskcheck_match(node, predicate, errorfmt):
- result = predicate()
- try:
- # If calling the predicate() cached a None value from stat(),
- # remove it so it doesn't interfere with later attempts to
- # build this Node as we walk the DAG. (This isn't a great way
- # to do this, we're reaching into an interface that doesn't
- # really belong to us, but it's all about performance, so
- # for now we'll just document the dependency...)
- if node._memo['stat'] is None:
- del node._memo['stat']
- except (AttributeError, KeyError):
- pass
- if result:
- raise TypeError, errorfmt % node.abspath
-
-def ignore_diskcheck_match(node, predicate, errorfmt):
- pass
-
-def do_diskcheck_rcs(node, name):
- try:
- rcs_dir = node.rcs_dir
- except AttributeError:
- if node.entry_exists_on_disk('RCS'):
- rcs_dir = node.Dir('RCS')
- else:
- rcs_dir = None
- node.rcs_dir = rcs_dir
- if rcs_dir:
- return rcs_dir.entry_exists_on_disk(name+',v')
- return None
-
-def ignore_diskcheck_rcs(node, name):
- return None
-
-def do_diskcheck_sccs(node, name):
- try:
- sccs_dir = node.sccs_dir
- except AttributeError:
- if node.entry_exists_on_disk('SCCS'):
- sccs_dir = node.Dir('SCCS')
- else:
- sccs_dir = None
- node.sccs_dir = sccs_dir
- if sccs_dir:
- return sccs_dir.entry_exists_on_disk('s.'+name)
- return None
-
-def ignore_diskcheck_sccs(node, name):
- return None
-
-diskcheck_match = DiskChecker('match', do_diskcheck_match, ignore_diskcheck_match)
-diskcheck_rcs = DiskChecker('rcs', do_diskcheck_rcs, ignore_diskcheck_rcs)
-diskcheck_sccs = DiskChecker('sccs', do_diskcheck_sccs, ignore_diskcheck_sccs)
-
-diskcheckers = [
- diskcheck_match,
- diskcheck_rcs,
- diskcheck_sccs,
-]
-
-def set_diskcheck(list):
- for dc in diskcheckers:
- dc.set(list)
-
-def diskcheck_types():
- return map(lambda dc: dc.type, diskcheckers)
-
-
-
-class EntryProxy(SCons.Util.Proxy):
- def __get_abspath(self):
- entry = self.get()
- return SCons.Subst.SpecialAttrWrapper(entry.get_abspath(),
- entry.name + "_abspath")
-
- def __get_filebase(self):
- name = self.get().name
- return SCons.Subst.SpecialAttrWrapper(SCons.Util.splitext(name)[0],
- name + "_filebase")
-
- def __get_suffix(self):
- name = self.get().name
- return SCons.Subst.SpecialAttrWrapper(SCons.Util.splitext(name)[1],
- name + "_suffix")
-
- def __get_file(self):
- name = self.get().name
- return SCons.Subst.SpecialAttrWrapper(name, name + "_file")
-
- def __get_base_path(self):
- """Return the file's directory and file name, with the
- suffix stripped."""
- entry = self.get()
- return SCons.Subst.SpecialAttrWrapper(SCons.Util.splitext(entry.get_path())[0],
- entry.name + "_base")
-
- def __get_posix_path(self):
- """Return the path with / as the path separator,
- regardless of platform."""
- if os.sep == '/':
- return self
- else:
- entry = self.get()
- r = string.replace(entry.get_path(), os.sep, '/')
- return SCons.Subst.SpecialAttrWrapper(r, entry.name + "_posix")
-
- def __get_windows_path(self):
- """Return the path with \ as the path separator,
- regardless of platform."""
- if os.sep == '\\':
- return self
- else:
- entry = self.get()
- r = string.replace(entry.get_path(), os.sep, '\\')
- return SCons.Subst.SpecialAttrWrapper(r, entry.name + "_windows")
-
- def __get_srcnode(self):
- return EntryProxy(self.get().srcnode())
-
- def __get_srcdir(self):
- """Returns the directory containing the source node linked to this
- node via VariantDir(), or the directory of this node if not linked."""
- return EntryProxy(self.get().srcnode().dir)
-
- def __get_rsrcnode(self):
- return EntryProxy(self.get().srcnode().rfile())
-
- def __get_rsrcdir(self):
- """Returns the directory containing the source node linked to this
- node via VariantDir(), or the directory of this node if not linked."""
- return EntryProxy(self.get().srcnode().rfile().dir)
-
- def __get_dir(self):
- return EntryProxy(self.get().dir)
-
- dictSpecialAttrs = { "base" : __get_base_path,
- "posix" : __get_posix_path,
- "windows" : __get_windows_path,
- "win32" : __get_windows_path,
- "srcpath" : __get_srcnode,
- "srcdir" : __get_srcdir,
- "dir" : __get_dir,
- "abspath" : __get_abspath,
- "filebase" : __get_filebase,
- "suffix" : __get_suffix,
- "file" : __get_file,
- "rsrcpath" : __get_rsrcnode,
- "rsrcdir" : __get_rsrcdir,
- }
-
- def __getattr__(self, name):
- # This is how we implement the "special" attributes
- # such as base, posix, srcdir, etc.
- try:
- attr_function = self.dictSpecialAttrs[name]
- except KeyError:
- try:
- attr = SCons.Util.Proxy.__getattr__(self, name)
- except AttributeError, e:
- # Raise our own AttributeError subclass with an
- # overridden __str__() method that identifies the
- # name of the entry that caused the exception.
- raise EntryProxyAttributeError(self, name)
- return attr
- else:
- return attr_function(self)
-
-class Base(SCons.Node.Node):
- """A generic class for file system entries. This class is for
- when we don't know yet whether the entry being looked up is a file
- or a directory. Instances of this class can morph into either
- Dir or File objects by a later, more precise lookup.
-
- Note: this class does not define __cmp__ and __hash__ for
- efficiency reasons. SCons does a lot of comparing of
- Node.FS.{Base,Entry,File,Dir} objects, so those operations must be
- as fast as possible, which means we want to use Python's built-in
- object identity comparisons.
- """
-
- memoizer_counters = []
-
- def __init__(self, name, directory, fs):
- """Initialize a generic Node.FS.Base object.
-
- Call the superclass initialization, take care of setting up
- our relative and absolute paths, identify our parent
- directory, and indicate that this node should use
- signatures."""
- if __debug__: logInstanceCreation(self, 'Node.FS.Base')
- SCons.Node.Node.__init__(self)
-
- # Filenames and paths are probably reused and are intern'ed to
- # save some memory.
- self.name = intern(name)
- self.suffix = intern(SCons.Util.splitext(name)[1])
- self.fs = fs
-
- assert directory, "A directory must be provided"
-
- self.abspath = intern(directory.entry_abspath(name))
- self.labspath = intern(directory.entry_labspath(name))
- if directory.path == '.':
- self.path = intern(name)
- else:
- self.path = intern(directory.entry_path(name))
- if directory.tpath == '.':
- self.tpath = intern(name)
- else:
- self.tpath = intern(directory.entry_tpath(name))
- self.path_elements = directory.path_elements + [self]
-
- self.dir = directory
- self.cwd = None # will hold the SConscript directory for target nodes
- self.duplicate = directory.duplicate
-
- def str_for_display(self):
- return '"' + self.__str__() + '"'
-
- def must_be_same(self, klass):
- """
- This node, which already existed, is being looked up as the
- specified klass. Raise an exception if it isn't.
- """
- if isinstance(self, klass) or klass is Entry:
- return
- raise TypeError, "Tried to lookup %s '%s' as a %s." %\
- (self.__class__.__name__, self.path, klass.__name__)
-
- def get_dir(self):
- return self.dir
-
- def get_suffix(self):
- return self.suffix
-
- def rfile(self):
- return self
-
- def __str__(self):
- """A Node.FS.Base object's string representation is its path
- name."""
- global Save_Strings
- if Save_Strings:
- return self._save_str()
- return self._get_str()
-
- memoizer_counters.append(SCons.Memoize.CountValue('_save_str'))
-
- def _save_str(self):
- try:
- return self._memo['_save_str']
- except KeyError:
- pass
- result = intern(self._get_str())
- self._memo['_save_str'] = result
- return result
-
- def _get_str(self):
- global Save_Strings
- if self.duplicate or self.is_derived():
- return self.get_path()
- srcnode = self.srcnode()
- if srcnode.stat() is None and self.stat() is not None:
- result = self.get_path()
- else:
- result = srcnode.get_path()
- if not Save_Strings:
- # We're not at the point where we're saving the string string
- # representations of FS Nodes (because we haven't finished
- # reading the SConscript files and need to have str() return
- # things relative to them). That also means we can't yet
- # cache values returned (or not returned) by stat(), since
- # Python code in the SConscript files might still create
- # or otherwise affect the on-disk file. So get rid of the
- # values that the underlying stat() method saved.
- try: del self._memo['stat']
- except KeyError: pass
- if self is not srcnode:
- try: del srcnode._memo['stat']
- except KeyError: pass
- return result
-
- rstr = __str__
-
- memoizer_counters.append(SCons.Memoize.CountValue('stat'))
-
- def stat(self):
- try: return self._memo['stat']
- except KeyError: pass
- try: result = self.fs.stat(self.abspath)
- except os.error: result = None
- self._memo['stat'] = result
- return result
-
- def exists(self):
- return self.stat() is not None
-
- def rexists(self):
- return self.rfile().exists()
-
- def getmtime(self):
- st = self.stat()
- if st: return st[stat.ST_MTIME]
- else: return None
-
- def getsize(self):
- st = self.stat()
- if st: return st[stat.ST_SIZE]
- else: return None
-
- def isdir(self):
- st = self.stat()
- return st is not None and stat.S_ISDIR(st[stat.ST_MODE])
-
- def isfile(self):
- st = self.stat()
- return st is not None and stat.S_ISREG(st[stat.ST_MODE])
-
- if hasattr(os, 'symlink'):
- def islink(self):
- try: st = self.fs.lstat(self.abspath)
- except os.error: return 0
- return stat.S_ISLNK(st[stat.ST_MODE])
- else:
- def islink(self):
- return 0 # no symlinks
-
- def is_under(self, dir):
- if self is dir:
- return 1
- else:
- return self.dir.is_under(dir)
-
- def set_local(self):
- self._local = 1
-
- def srcnode(self):
- """If this node is in a build path, return the node
- corresponding to its source file. Otherwise, return
- ourself.
- """
- srcdir_list = self.dir.srcdir_list()
- if srcdir_list:
- srcnode = srcdir_list[0].Entry(self.name)
- srcnode.must_be_same(self.__class__)
- return srcnode
- return self
-
- def get_path(self, dir=None):
- """Return path relative to the current working directory of the
- Node.FS.Base object that owns us."""
- if not dir:
- dir = self.fs.getcwd()
- if self == dir:
- return '.'
- path_elems = self.path_elements
- try: i = path_elems.index(dir)
- except ValueError: pass
- else: path_elems = path_elems[i+1:]
- path_elems = map(lambda n: n.name, path_elems)
- return string.join(path_elems, os.sep)
-
- def set_src_builder(self, builder):
- """Set the source code builder for this node."""
- self.sbuilder = builder
- if not self.has_builder():
- self.builder_set(builder)
-
- def src_builder(self):
- """Fetch the source code builder for this node.
-
- If there isn't one, we cache the source code builder specified
- for the directory (which in turn will cache the value from its
- parent directory, and so on up to the file system root).
- """
- try:
- scb = self.sbuilder
- except AttributeError:
- scb = self.dir.src_builder()
- self.sbuilder = scb
- return scb
-
- def get_abspath(self):
- """Get the absolute path of the file."""
- return self.abspath
-
- def for_signature(self):
- # Return just our name. Even an absolute path would not work,
- # because that can change thanks to symlinks or remapped network
- # paths.
- return self.name
-
- def get_subst_proxy(self):
- try:
- return self._proxy
- except AttributeError:
- ret = EntryProxy(self)
- self._proxy = ret
- return ret
-
- def target_from_source(self, prefix, suffix, splitext=SCons.Util.splitext):
- """
-
- Generates a target entry that corresponds to this entry (usually
- a source file) with the specified prefix and suffix.
-
- Note that this method can be overridden dynamically for generated
- files that need different behavior. See Tool/swig.py for
- an example.
- """
- return self.dir.Entry(prefix + splitext(self.name)[0] + suffix)
-
- def _Rfindalldirs_key(self, pathlist):
- return pathlist
-
- memoizer_counters.append(SCons.Memoize.CountDict('Rfindalldirs', _Rfindalldirs_key))
-
- def Rfindalldirs(self, pathlist):
- """
- Return all of the directories for a given path list, including
- corresponding "backing" directories in any repositories.
-
- The Node lookups are relative to this Node (typically a
- directory), so memoizing result saves cycles from looking
- up the same path for each target in a given directory.
- """
- try:
- memo_dict = self._memo['Rfindalldirs']
- except KeyError:
- memo_dict = {}
- self._memo['Rfindalldirs'] = memo_dict
- else:
- try:
- return memo_dict[pathlist]
- except KeyError:
- pass
-
- create_dir_relative_to_self = self.Dir
- result = []
- for path in pathlist:
- if isinstance(path, SCons.Node.Node):
- result.append(path)
- else:
- dir = create_dir_relative_to_self(path)
- result.extend(dir.get_all_rdirs())
-
- memo_dict[pathlist] = result
-
- return result
-
- def RDirs(self, pathlist):
- """Search for a list of directories in the Repository list."""
- cwd = self.cwd or self.fs._cwd
- return cwd.Rfindalldirs(pathlist)
-
- memoizer_counters.append(SCons.Memoize.CountValue('rentry'))
-
- def rentry(self):
- try:
- return self._memo['rentry']
- except KeyError:
- pass
- result = self
- if not self.exists():
- norm_name = _my_normcase(self.name)
- for dir in self.dir.get_all_rdirs():
- try:
- node = dir.entries[norm_name]
- except KeyError:
- if dir.entry_exists_on_disk(self.name):
- result = dir.Entry(self.name)
- break
- self._memo['rentry'] = result
- return result
-
- def _glob1(self, pattern, ondisk=True, source=False, strings=False):
- return []
-
-class Entry(Base):
- """This is the class for generic Node.FS entries--that is, things
- that could be a File or a Dir, but we're just not sure yet.
- Consequently, the methods in this class really exist just to
- transform their associated object into the right class when the
- time comes, and then call the same-named method in the transformed
- class."""
-
- def diskcheck_match(self):
- pass
-
- def disambiguate(self, must_exist=None):
- """
- """
- if self.isdir():
- self.__class__ = Dir
- self._morph()
- elif self.isfile():
- self.__class__ = File
- self._morph()
- self.clear()
- else:
- # There was nothing on-disk at this location, so look in
- # the src directory.
- #
- # We can't just use self.srcnode() straight away because
- # that would create an actual Node for this file in the src
- # directory, and there might not be one. Instead, use the
- # dir_on_disk() method to see if there's something on-disk
- # with that name, in which case we can go ahead and call
- # self.srcnode() to create the right type of entry.
- srcdir = self.dir.srcnode()
- if srcdir != self.dir and \
- srcdir.entry_exists_on_disk(self.name) and \
- self.srcnode().isdir():
- self.__class__ = Dir
- self._morph()
- elif must_exist:
- msg = "No such file or directory: '%s'" % self.abspath
- raise SCons.Errors.UserError, msg
- else:
- self.__class__ = File
- self._morph()
- self.clear()
- return self
-
- def rfile(self):
- """We're a generic Entry, but the caller is actually looking for
- a File at this point, so morph into one."""
- self.__class__ = File
- self._morph()
- self.clear()
- return File.rfile(self)
-
- def scanner_key(self):
- return self.get_suffix()
-
- def get_contents(self):
- """Fetch the contents of the entry. Returns the exact binary
- contents of the file."""
- try:
- self = self.disambiguate(must_exist=1)
- except SCons.Errors.UserError:
- # There was nothing on disk with which to disambiguate
- # this entry. Leave it as an Entry, but return a null
- # string so calls to get_contents() in emitters and the
- # like (e.g. in qt.py) don't have to disambiguate by hand
- # or catch the exception.
- return ''
- else:
- return self.get_contents()
-
- def get_text_contents(self):
- """Fetch the decoded text contents of a Unicode encoded Entry.
-
- Since this should return the text contents from the file
- system, we check to see into what sort of subclass we should
- morph this Entry."""
- try:
- self = self.disambiguate(must_exist=1)
- except SCons.Errors.UserError:
- # There was nothing on disk with which to disambiguate
- # this entry. Leave it as an Entry, but return a null
- # string so calls to get_text_contents() in emitters and
- # the like (e.g. in qt.py) don't have to disambiguate by
- # hand or catch the exception.
- return ''
- else:
- return self.get_text_contents()
-
- def must_be_same(self, klass):
- """Called to make sure a Node is a Dir. Since we're an
- Entry, we can morph into one."""
- if self.__class__ is not klass:
- self.__class__ = klass
- self._morph()
- self.clear()
-
- # The following methods can get called before the Taskmaster has
- # had a chance to call disambiguate() directly to see if this Entry
- # should really be a Dir or a File. We therefore use these to call
- # disambiguate() transparently (from our caller's point of view).
- #
- # Right now, this minimal set of methods has been derived by just
- # looking at some of the methods that will obviously be called early
- # in any of the various Taskmasters' calling sequences, and then
- # empirically figuring out which additional methods are necessary
- # to make various tests pass.
-
- def exists(self):
- """Return if the Entry exists. Check the file system to see
- what we should turn into first. Assume a file if there's no
- directory."""
- return self.disambiguate().exists()
-
- def rel_path(self, other):
- d = self.disambiguate()
- if d.__class__ is Entry:
- raise "rel_path() could not disambiguate File/Dir"
- return d.rel_path(other)
-
- def new_ninfo(self):
- return self.disambiguate().new_ninfo()
-
- def changed_since_last_build(self, target, prev_ni):
- return self.disambiguate().changed_since_last_build(target, prev_ni)
-
- def _glob1(self, pattern, ondisk=True, source=False, strings=False):
- return self.disambiguate()._glob1(pattern, ondisk, source, strings)
-
- def get_subst_proxy(self):
- return self.disambiguate().get_subst_proxy()
-
-# This is for later so we can differentiate between Entry the class and Entry
-# the method of the FS class.
-_classEntry = Entry
-
-
-class LocalFS:
-
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- # This class implements an abstraction layer for operations involving
- # a local file system. Essentially, this wraps any function in
- # the os, os.path or shutil modules that we use to actually go do
- # anything with or to the local file system.
- #
- # Note that there's a very good chance we'll refactor this part of
- # the architecture in some way as we really implement the interface(s)
- # for remote file system Nodes. For example, the right architecture
- # might be to have this be a subclass instead of a base class.
- # Nevertheless, we're using this as a first step in that direction.
- #
- # We're not using chdir() yet because the calling subclass method
- # needs to use os.chdir() directly to avoid recursion. Will we
- # really need this one?
- #def chdir(self, path):
- # return os.chdir(path)
- def chmod(self, path, mode):
- return os.chmod(path, mode)
- def copy(self, src, dst):
- return shutil.copy(src, dst)
- def copy2(self, src, dst):
- return shutil.copy2(src, dst)
- def exists(self, path):
- return os.path.exists(path)
- def getmtime(self, path):
- return os.path.getmtime(path)
- def getsize(self, path):
- return os.path.getsize(path)
- def isdir(self, path):
- return os.path.isdir(path)
- def isfile(self, path):
- return os.path.isfile(path)
- def link(self, src, dst):
- return os.link(src, dst)
- def lstat(self, path):
- return os.lstat(path)
- def listdir(self, path):
- return os.listdir(path)
- def makedirs(self, path):
- return os.makedirs(path)
- def mkdir(self, path):
- return os.mkdir(path)
- def rename(self, old, new):
- return os.rename(old, new)
- def stat(self, path):
- return os.stat(path)
- def symlink(self, src, dst):
- return os.symlink(src, dst)
- def open(self, path):
- return open(path)
- def unlink(self, path):
- return os.unlink(path)
-
- if hasattr(os, 'symlink'):
- def islink(self, path):
- return os.path.islink(path)
- else:
- def islink(self, path):
- return 0 # no symlinks
-
- if hasattr(os, 'readlink'):
- def readlink(self, file):
- return os.readlink(file)
- else:
- def readlink(self, file):
- return ''
-
-
-#class RemoteFS:
-# # Skeleton for the obvious methods we might need from the
-# # abstraction layer for a remote filesystem.
-# def upload(self, local_src, remote_dst):
-# pass
-# def download(self, remote_src, local_dst):
-# pass
-
-
-class FS(LocalFS):
-
- memoizer_counters = []
-
- def __init__(self, path = None):
- """Initialize the Node.FS subsystem.
-
- The supplied path is the top of the source tree, where we
- expect to find the top-level build file. If no path is
- supplied, the current directory is the default.
-
- The path argument must be a valid absolute path.
- """
- if __debug__: logInstanceCreation(self, 'Node.FS')
-
- self._memo = {}
-
- self.Root = {}
- self.SConstruct_dir = None
- self.max_drift = default_max_drift
-
- self.Top = None
- if path is None:
- self.pathTop = os.getcwd()
- else:
- self.pathTop = path
- self.defaultDrive = _my_normcase(os.path.splitdrive(self.pathTop)[0])
-
- self.Top = self.Dir(self.pathTop)
- self.Top.path = '.'
- self.Top.tpath = '.'
- self._cwd = self.Top
-
- DirNodeInfo.fs = self
- FileNodeInfo.fs = self
-
- def set_SConstruct_dir(self, dir):
- self.SConstruct_dir = dir
-
- def get_max_drift(self):
- return self.max_drift
-
- def set_max_drift(self, max_drift):
- self.max_drift = max_drift
-
- def getcwd(self):
- return self._cwd
-
- def chdir(self, dir, change_os_dir=0):
- """Change the current working directory for lookups.
- If change_os_dir is true, we will also change the "real" cwd
- to match.
- """
- curr=self._cwd
- try:
- if dir is not None:
- self._cwd = dir
- if change_os_dir:
- os.chdir(dir.abspath)
- except OSError:
- self._cwd = curr
- raise
-
- def get_root(self, drive):
- """
- Returns the root directory for the specified drive, creating
- it if necessary.
- """
- drive = _my_normcase(drive)
- try:
- return self.Root[drive]
- except KeyError:
- root = RootDir(drive, self)
- self.Root[drive] = root
- if not drive:
- self.Root[self.defaultDrive] = root
- elif drive == self.defaultDrive:
- self.Root[''] = root
- return root
-
- def _lookup(self, p, directory, fsclass, create=1):
- """
- The generic entry point for Node lookup with user-supplied data.
-
- This translates arbitrary input into a canonical Node.FS object
- of the specified fsclass. The general approach for strings is
- to turn it into a fully normalized absolute path and then call
- the root directory's lookup_abs() method for the heavy lifting.
-
- If the path name begins with '#', it is unconditionally
- interpreted relative to the top-level directory of this FS. '#'
- is treated as a synonym for the top-level SConstruct directory,
- much like '~' is treated as a synonym for the user's home
- directory in a UNIX shell. So both '#foo' and '#/foo' refer
- to the 'foo' subdirectory underneath the top-level SConstruct
- directory.
-
- If the path name is relative, then the path is looked up relative
- to the specified directory, or the current directory (self._cwd,
- typically the SConscript directory) if the specified directory
- is None.
- """
- if isinstance(p, Base):
- # It's already a Node.FS object. Make sure it's the right
- # class and return.
- p.must_be_same(fsclass)
- return p
- # str(p) in case it's something like a proxy object
- p = str(p)
-
- initial_hash = (p[0:1] == '#')
- if initial_hash:
- # There was an initial '#', so we strip it and override
- # whatever directory they may have specified with the
- # top-level SConstruct directory.
- p = p[1:]
- directory = self.Top
-
- if directory and not isinstance(directory, Dir):
- directory = self.Dir(directory)
-
- if do_splitdrive:
- drive, p = os.path.splitdrive(p)
- else:
- drive = ''
- if drive and not p:
- # This causes a naked drive letter to be treated as a synonym
- # for the root directory on that drive.
- p = os.sep
- absolute = os.path.isabs(p)
-
- needs_normpath = needs_normpath_check.match(p)
-
- if initial_hash or not absolute:
- # This is a relative lookup, either to the top-level
- # SConstruct directory (because of the initial '#') or to
- # the current directory (the path name is not absolute).
- # Add the string to the appropriate directory lookup path,
- # after which the whole thing gets normalized.
- if not directory:
- directory = self._cwd
- if p:
- p = directory.labspath + '/' + p
- else:
- p = directory.labspath
-
- if needs_normpath:
- p = os.path.normpath(p)
-
- if drive or absolute:
- root = self.get_root(drive)
- else:
- if not directory:
- directory = self._cwd
- root = directory.root
-
- if os.sep != '/':
- p = string.replace(p, os.sep, '/')
- return root._lookup_abs(p, fsclass, create)
-
- def Entry(self, name, directory = None, create = 1):
- """Look up or create a generic Entry node with the specified name.
- If the name is a relative path (begins with ./, ../, or a file
- name), then it is looked up relative to the supplied directory
- node, or to the top level directory of the FS (supplied at
- construction time) if no directory is supplied.
- """
- return self._lookup(name, directory, Entry, create)
-
- def File(self, name, directory = None, create = 1):
- """Look up or create a File node with the specified name. If
- the name is a relative path (begins with ./, ../, or a file name),
- then it is looked up relative to the supplied directory node,
- or to the top level directory of the FS (supplied at construction
- time) if no directory is supplied.
-
- This method will raise TypeError if a directory is found at the
- specified path.
- """
- return self._lookup(name, directory, File, create)
-
- def Dir(self, name, directory = None, create = True):
- """Look up or create a Dir node with the specified name. If
- the name is a relative path (begins with ./, ../, or a file name),
- then it is looked up relative to the supplied directory node,
- or to the top level directory of the FS (supplied at construction
- time) if no directory is supplied.
-
- This method will raise TypeError if a normal file is found at the
- specified path.
- """
- return self._lookup(name, directory, Dir, create)
-
- def VariantDir(self, variant_dir, src_dir, duplicate=1):
- """Link the supplied variant directory to the source directory
- for purposes of building files."""
-
- if not isinstance(src_dir, SCons.Node.Node):
- src_dir = self.Dir(src_dir)
- if not isinstance(variant_dir, SCons.Node.Node):
- variant_dir = self.Dir(variant_dir)
- if src_dir.is_under(variant_dir):
- raise SCons.Errors.UserError, "Source directory cannot be under variant directory."
- if variant_dir.srcdir:
- if variant_dir.srcdir == src_dir:
- return # We already did this.
- raise SCons.Errors.UserError, "'%s' already has a source directory: '%s'."%(variant_dir, variant_dir.srcdir)
- variant_dir.link(src_dir, duplicate)
-
- def Repository(self, *dirs):
- """Specify Repository directories to search."""
- for d in dirs:
- if not isinstance(d, SCons.Node.Node):
- d = self.Dir(d)
- self.Top.addRepository(d)
-
- def variant_dir_target_climb(self, orig, dir, tail):
- """Create targets in corresponding variant directories
-
- Climb the directory tree, and look up path names
- relative to any linked variant directories we find.
-
- Even though this loops and walks up the tree, we don't memoize
- the return value because this is really only used to process
- the command-line targets.
- """
- targets = []
- message = None
- fmt = "building associated VariantDir targets: %s"
- start_dir = dir
- while dir:
- for bd in dir.variant_dirs:
- if start_dir.is_under(bd):
- # If already in the build-dir location, don't reflect
- return [orig], fmt % str(orig)
- p = apply(os.path.join, [bd.path] + tail)
- targets.append(self.Entry(p))
- tail = [dir.name] + tail
- dir = dir.up()
- if targets:
- message = fmt % string.join(map(str, targets))
- return targets, message
-
- def Glob(self, pathname, ondisk=True, source=True, strings=False, cwd=None):
- """
- Globs
-
- This is mainly a shim layer
- """
- if cwd is None:
- cwd = self.getcwd()
- return cwd.glob(pathname, ondisk, source, strings)
-
-class DirNodeInfo(SCons.Node.NodeInfoBase):
- # This should get reset by the FS initialization.
- current_version_id = 1
-
- fs = None
-
- def str_to_node(self, s):
- top = self.fs.Top
- root = top.root
- if do_splitdrive:
- drive, s = os.path.splitdrive(s)
- if drive:
- root = self.fs.get_root(drive)
- if not os.path.isabs(s):
- s = top.labspath + '/' + s
- return root._lookup_abs(s, Entry)
-
-class DirBuildInfo(SCons.Node.BuildInfoBase):
- current_version_id = 1
-
-glob_magic_check = re.compile('[*?[]')
-
-def has_glob_magic(s):
- return glob_magic_check.search(s) is not None
-
-class Dir(Base):
- """A class for directories in a file system.
- """
-
- memoizer_counters = []
-
- NodeInfo = DirNodeInfo
- BuildInfo = DirBuildInfo
-
- def __init__(self, name, directory, fs):
- if __debug__: logInstanceCreation(self, 'Node.FS.Dir')
- Base.__init__(self, name, directory, fs)
- self._morph()
-
- def _morph(self):
- """Turn a file system Node (either a freshly initialized directory
- object or a separate Entry object) into a proper directory object.
-
- Set up this directory's entries and hook it into the file
- system tree. Specify that directories (this Node) don't use
- signatures for calculating whether they're current.
- """
-
- self.repositories = []
- self.srcdir = None
-
- self.entries = {}
- self.entries['.'] = self
- self.entries['..'] = self.dir
- self.cwd = self
- self.searched = 0
- self._sconsign = None
- self.variant_dirs = []
- self.root = self.dir.root
-
- # Don't just reset the executor, replace its action list,
- # because it might have some pre-or post-actions that need to
- # be preserved.
- self.builder = get_MkdirBuilder()
- self.get_executor().set_action_list(self.builder.action)
-
- def diskcheck_match(self):
- diskcheck_match(self, self.isfile,
- "File %s found where directory expected.")
-
- def __clearRepositoryCache(self, duplicate=None):
- """Called when we change the repository(ies) for a directory.
- This clears any cached information that is invalidated by changing
- the repository."""
-
- for node in self.entries.values():
- if node != self.dir:
- if node != self and isinstance(node, Dir):
- node.__clearRepositoryCache(duplicate)
- else:
- node.clear()
- try:
- del node._srcreps
- except AttributeError:
- pass
- if duplicate is not None:
- node.duplicate=duplicate
-
- def __resetDuplicate(self, node):
- if node != self:
- node.duplicate = node.get_dir().duplicate
-
- def Entry(self, name):
- """
- Looks up or creates an entry node named 'name' relative to
- this directory.
- """
- return self.fs.Entry(name, self)
-
- def Dir(self, name, create=True):
- """
- Looks up or creates a directory node named 'name' relative to
- this directory.
- """
- return self.fs.Dir(name, self, create)
-
- def File(self, name):
- """
- Looks up or creates a file node named 'name' relative to
- this directory.
- """
- return self.fs.File(name, self)
-
- def _lookup_rel(self, name, klass, create=1):
- """
- Looks up a *normalized* relative path name, relative to this
- directory.
-
- This method is intended for use by internal lookups with
- already-normalized path data. For general-purpose lookups,
- use the Entry(), Dir() and File() methods above.
-
- This method does *no* input checking and will die or give
- incorrect results if it's passed a non-normalized path name (e.g.,
- a path containing '..'), an absolute path name, a top-relative
- ('#foo') path name, or any kind of object.
- """
- name = self.entry_labspath(name)
- return self.root._lookup_abs(name, klass, create)
-
- def link(self, srcdir, duplicate):
- """Set this directory as the variant directory for the
- supplied source directory."""
- self.srcdir = srcdir
- self.duplicate = duplicate
- self.__clearRepositoryCache(duplicate)
- srcdir.variant_dirs.append(self)
-
- def getRepositories(self):
- """Returns a list of repositories for this directory.
- """
- if self.srcdir and not self.duplicate:
- return self.srcdir.get_all_rdirs() + self.repositories
- return self.repositories
-
- memoizer_counters.append(SCons.Memoize.CountValue('get_all_rdirs'))
-
- def get_all_rdirs(self):
- try:
- return list(self._memo['get_all_rdirs'])
- except KeyError:
- pass
-
- result = [self]
- fname = '.'
- dir = self
- while dir:
- for rep in dir.getRepositories():
- result.append(rep.Dir(fname))
- if fname == '.':
- fname = dir.name
- else:
- fname = dir.name + os.sep + fname
- dir = dir.up()
-
- self._memo['get_all_rdirs'] = list(result)
-
- return result
-
- def addRepository(self, dir):
- if dir != self and not dir in self.repositories:
- self.repositories.append(dir)
- dir.tpath = '.'
- self.__clearRepositoryCache()
-
- def up(self):
- return self.entries['..']
-
- def _rel_path_key(self, other):
- return str(other)
-
- memoizer_counters.append(SCons.Memoize.CountDict('rel_path', _rel_path_key))
-
- def rel_path(self, other):
- """Return a path to "other" relative to this directory.
- """
-
- # This complicated and expensive method, which constructs relative
- # paths between arbitrary Node.FS objects, is no longer used
- # by SCons itself. It was introduced to store dependency paths
- # in .sconsign files relative to the target, but that ended up
- # being significantly inefficient.
- #
- # We're continuing to support the method because some SConstruct
- # files out there started using it when it was available, and
- # we're all about backwards compatibility..
-
- try:
- memo_dict = self._memo['rel_path']
- except KeyError:
- memo_dict = {}
- self._memo['rel_path'] = memo_dict
- else:
- try:
- return memo_dict[other]
- except KeyError:
- pass
-
- if self is other:
- result = '.'
-
- elif not other in self.path_elements:
- try:
- other_dir = other.get_dir()
- except AttributeError:
- result = str(other)
- else:
- if other_dir is None:
- result = other.name
- else:
- dir_rel_path = self.rel_path(other_dir)
- if dir_rel_path == '.':
- result = other.name
- else:
- result = dir_rel_path + os.sep + other.name
- else:
- i = self.path_elements.index(other) + 1
-
- path_elems = ['..'] * (len(self.path_elements) - i) \
- + map(lambda n: n.name, other.path_elements[i:])
-
- result = string.join(path_elems, os.sep)
-
- memo_dict[other] = result
-
- return result
-
- def get_env_scanner(self, env, kw={}):
- import SCons.Defaults
- return SCons.Defaults.DirEntryScanner
-
- def get_target_scanner(self):
- import SCons.Defaults
- return SCons.Defaults.DirEntryScanner
-
- def get_found_includes(self, env, scanner, path):
- """Return this directory's implicit dependencies.
-
- We don't bother caching the results because the scan typically
- shouldn't be requested more than once (as opposed to scanning
- .h file contents, which can be requested as many times as the
- files is #included by other files).
- """
- if not scanner:
- return []
- # Clear cached info for this Dir. If we already visited this
- # directory on our walk down the tree (because we didn't know at
- # that point it was being used as the source for another Node)
- # then we may have calculated build signature before realizing
- # we had to scan the disk. Now that we have to, though, we need
- # to invalidate the old calculated signature so that any node
- # dependent on our directory structure gets one that includes
- # info about everything on disk.
- self.clear()
- return scanner(self, env, path)
-
- #
- # Taskmaster interface subsystem
- #
-
- def prepare(self):
- pass
-
- def build(self, **kw):
- """A null "builder" for directories."""
- global MkdirBuilder
- if self.builder is not MkdirBuilder:
- apply(SCons.Node.Node.build, [self,], kw)
-
- #
- #
- #
-
- def _create(self):
- """Create this directory, silently and without worrying about
- whether the builder is the default or not."""
- listDirs = []
- parent = self
- while parent:
- if parent.exists():
- break
- listDirs.append(parent)
- p = parent.up()
- if p is None:
- # Don't use while: - else: for this condition because
- # if so, then parent is None and has no .path attribute.
- raise SCons.Errors.StopError, parent.path
- parent = p
- listDirs.reverse()
- for dirnode in listDirs:
- try:
- # Don't call dirnode.build(), call the base Node method
- # directly because we definitely *must* create this
- # directory. The dirnode.build() method will suppress
- # the build if it's the default builder.
- SCons.Node.Node.build(dirnode)
- dirnode.get_executor().nullify()
- # The build() action may or may not have actually
- # created the directory, depending on whether the -n
- # option was used or not. Delete the _exists and
- # _rexists attributes so they can be reevaluated.
- dirnode.clear()
- except OSError:
- pass
-
- def multiple_side_effect_has_builder(self):
- global MkdirBuilder
- return self.builder is not MkdirBuilder and self.has_builder()
-
- def alter_targets(self):
- """Return any corresponding targets in a variant directory.
- """
- return self.fs.variant_dir_target_climb(self, self, [])
-
- def scanner_key(self):
- """A directory does not get scanned."""
- return None
-
- def get_text_contents(self):
- """We already emit things in text, so just return the binary
- version."""
- return self.get_contents()
-
- def get_contents(self):
- """Return content signatures and names of all our children
- separated by new-lines. Ensure that the nodes are sorted."""
- contents = []
- name_cmp = lambda a, b: cmp(a.name, b.name)
- sorted_children = self.children()[:]
- sorted_children.sort(name_cmp)
- for node in sorted_children:
- contents.append('%s %s\n' % (node.get_csig(), node.name))
- return string.join(contents, '')
-
- def get_csig(self):
- """Compute the content signature for Directory nodes. In
- general, this is not needed and the content signature is not
- stored in the DirNodeInfo. However, if get_contents on a Dir
- node is called which has a child directory, the child
- directory should return the hash of its contents."""
- contents = self.get_contents()
- return SCons.Util.MD5signature(contents)
-
- def do_duplicate(self, src):
- pass
-
- changed_since_last_build = SCons.Node.Node.state_has_changed
-
- def is_up_to_date(self):
- """If any child is not up-to-date, then this directory isn't,
- either."""
- if self.builder is not MkdirBuilder and not self.exists():
- return 0
- up_to_date = SCons.Node.up_to_date
- for kid in self.children():
- if kid.get_state() > up_to_date:
- return 0
- return 1
-
- def rdir(self):
- if not self.exists():
- norm_name = _my_normcase(self.name)
- for dir in self.dir.get_all_rdirs():
- try: node = dir.entries[norm_name]
- except KeyError: node = dir.dir_on_disk(self.name)
- if node and node.exists() and \
- (isinstance(dir, Dir) or isinstance(dir, Entry)):
- return node
- return self
-
- def sconsign(self):
- """Return the .sconsign file info for this directory,
- creating it first if necessary."""
- if not self._sconsign:
- import SCons.SConsign
- self._sconsign = SCons.SConsign.ForDirectory(self)
- return self._sconsign
-
- def srcnode(self):
- """Dir has a special need for srcnode()...if we
- have a srcdir attribute set, then that *is* our srcnode."""
- if self.srcdir:
- return self.srcdir
- return Base.srcnode(self)
-
- def get_timestamp(self):
- """Return the latest timestamp from among our children"""
- stamp = 0
- for kid in self.children():
- if kid.get_timestamp() > stamp:
- stamp = kid.get_timestamp()
- return stamp
-
- def entry_abspath(self, name):
- return self.abspath + os.sep + name
-
- def entry_labspath(self, name):
- return self.labspath + '/' + name
-
- def entry_path(self, name):
- return self.path + os.sep + name
-
- def entry_tpath(self, name):
- return self.tpath + os.sep + name
-
- def entry_exists_on_disk(self, name):
- try:
- d = self.on_disk_entries
- except AttributeError:
- d = {}
- try:
- entries = os.listdir(self.abspath)
- except OSError:
- pass
- else:
- for entry in map(_my_normcase, entries):
- d[entry] = True
- self.on_disk_entries = d
- if sys.platform == 'win32':
- name = _my_normcase(name)
- result = d.get(name)
- if result is None:
- # Belt-and-suspenders for Windows: check directly for
- # 8.3 file names that don't show up in os.listdir().
- result = os.path.exists(self.abspath + os.sep + name)
- d[name] = result
- return result
- else:
- return d.has_key(name)
-
- memoizer_counters.append(SCons.Memoize.CountValue('srcdir_list'))
-
- def srcdir_list(self):
- try:
- return self._memo['srcdir_list']
- except KeyError:
- pass
-
- result = []
-
- dirname = '.'
- dir = self
- while dir:
- if dir.srcdir:
- result.append(dir.srcdir.Dir(dirname))
- dirname = dir.name + os.sep + dirname
- dir = dir.up()
-
- self._memo['srcdir_list'] = result
-
- return result
-
- def srcdir_duplicate(self, name):
- for dir in self.srcdir_list():
- if self.is_under(dir):
- # We shouldn't source from something in the build path;
- # variant_dir is probably under src_dir, in which case
- # we are reflecting.
- break
- if dir.entry_exists_on_disk(name):
- srcnode = dir.Entry(name).disambiguate()
- if self.duplicate:
- node = self.Entry(name).disambiguate()
- node.do_duplicate(srcnode)
- return node
- else:
- return srcnode
- return None
-
- def _srcdir_find_file_key(self, filename):
- return filename
-
- memoizer_counters.append(SCons.Memoize.CountDict('srcdir_find_file', _srcdir_find_file_key))
-
- def srcdir_find_file(self, filename):
- try:
- memo_dict = self._memo['srcdir_find_file']
- except KeyError:
- memo_dict = {}
- self._memo['srcdir_find_file'] = memo_dict
- else:
- try:
- return memo_dict[filename]
- except KeyError:
- pass
-
- def func(node):
- if (isinstance(node, File) or isinstance(node, Entry)) and \
- (node.is_derived() or node.exists()):
- return node
- return None
-
- norm_name = _my_normcase(filename)
-
- for rdir in self.get_all_rdirs():
- try: node = rdir.entries[norm_name]
- except KeyError: node = rdir.file_on_disk(filename)
- else: node = func(node)
- if node:
- result = (node, self)
- memo_dict[filename] = result
- return result
-
- for srcdir in self.srcdir_list():
- for rdir in srcdir.get_all_rdirs():
- try: node = rdir.entries[norm_name]
- except KeyError: node = rdir.file_on_disk(filename)
- else: node = func(node)
- if node:
- result = (File(filename, self, self.fs), srcdir)
- memo_dict[filename] = result
- return result
-
- result = (None, None)
- memo_dict[filename] = result
- return result
-
- def dir_on_disk(self, name):
- if self.entry_exists_on_disk(name):
- try: return self.Dir(name)
- except TypeError: pass
- node = self.srcdir_duplicate(name)
- if isinstance(node, File):
- return None
- return node
-
- def file_on_disk(self, name):
- if self.entry_exists_on_disk(name) or \
- diskcheck_rcs(self, name) or \
- diskcheck_sccs(self, name):
- try: return self.File(name)
- except TypeError: pass
- node = self.srcdir_duplicate(name)
- if isinstance(node, Dir):
- return None
- return node
-
- def walk(self, func, arg):
- """
- Walk this directory tree by calling the specified function
- for each directory in the tree.
-
- This behaves like the os.path.walk() function, but for in-memory
- Node.FS.Dir objects. The function takes the same arguments as
- the functions passed to os.path.walk():
-
- func(arg, dirname, fnames)
-
- Except that "dirname" will actually be the directory *Node*,
- not the string. The '.' and '..' entries are excluded from
- fnames. The fnames list may be modified in-place to filter the
- subdirectories visited or otherwise impose a specific order.
- The "arg" argument is always passed to func() and may be used
- in any way (or ignored, passing None is common).
- """
- entries = self.entries
- names = entries.keys()
- names.remove('.')
- names.remove('..')
- func(arg, self, names)
- select_dirs = lambda n, e=entries: isinstance(e[n], Dir)
- for dirname in filter(select_dirs, names):
- entries[dirname].walk(func, arg)
-
- def glob(self, pathname, ondisk=True, source=False, strings=False):
- """
- Returns a list of Nodes (or strings) matching a specified
- pathname pattern.
-
- Pathname patterns follow UNIX shell semantics: * matches
- any-length strings of any characters, ? matches any character,
- and [] can enclose lists or ranges of characters. Matches do
- not span directory separators.
-
- The matches take into account Repositories, returning local
- Nodes if a corresponding entry exists in a Repository (either
- an in-memory Node or something on disk).
-
- By defafult, the glob() function matches entries that exist
- on-disk, in addition to in-memory Nodes. Setting the "ondisk"
- argument to False (or some other non-true value) causes the glob()
- function to only match in-memory Nodes. The default behavior is
- to return both the on-disk and in-memory Nodes.
-
- The "source" argument, when true, specifies that corresponding
- source Nodes must be returned if you're globbing in a build
- directory (initialized with VariantDir()). The default behavior
- is to return Nodes local to the VariantDir().
-
- The "strings" argument, when true, returns the matches as strings,
- not Nodes. The strings are path names relative to this directory.
-
- The underlying algorithm is adapted from the glob.glob() function
- in the Python library (but heavily modified), and uses fnmatch()
- under the covers.
- """
- dirname, basename = os.path.split(pathname)
- if not dirname:
- return self._glob1(basename, ondisk, source, strings)
- if has_glob_magic(dirname):
- list = self.glob(dirname, ondisk, source, strings=False)
- else:
- list = [self.Dir(dirname, create=True)]
- result = []
- for dir in list:
- r = dir._glob1(basename, ondisk, source, strings)
- if strings:
- r = map(lambda x, d=str(dir): os.path.join(d, x), r)
- result.extend(r)
- result.sort(lambda a, b: cmp(str(a), str(b)))
- return result
-
- def _glob1(self, pattern, ondisk=True, source=False, strings=False):
- """
- Globs for and returns a list of entry names matching a single
- pattern in this directory.
-
- This searches any repositories and source directories for
- corresponding entries and returns a Node (or string) relative
- to the current directory if an entry is found anywhere.
-
- TODO: handle pattern with no wildcard
- """
- search_dir_list = self.get_all_rdirs()
- for srcdir in self.srcdir_list():
- search_dir_list.extend(srcdir.get_all_rdirs())
-
- selfEntry = self.Entry
- names = []
- for dir in search_dir_list:
- # We use the .name attribute from the Node because the keys of
- # the dir.entries dictionary are normalized (that is, all upper
- # case) on case-insensitive systems like Windows.
- #node_names = [ v.name for k, v in dir.entries.items() if k not in ('.', '..') ]
- entry_names = filter(lambda n: n not in ('.', '..'), dir.entries.keys())
- node_names = map(lambda n, e=dir.entries: e[n].name, entry_names)
- names.extend(node_names)
- if not strings:
- # Make sure the working directory (self) actually has
- # entries for all Nodes in repositories or variant dirs.
- for name in node_names: selfEntry(name)
- if ondisk:
- try:
- disk_names = os.listdir(dir.abspath)
- except os.error:
- continue
- names.extend(disk_names)
- if not strings:
- # We're going to return corresponding Nodes in
- # the local directory, so we need to make sure
- # those Nodes exist. We only want to create
- # Nodes for the entries that will match the
- # specified pattern, though, which means we
- # need to filter the list here, even though
- # the overall list will also be filtered later,
- # after we exit this loop.
- if pattern[0] != '.':
- #disk_names = [ d for d in disk_names if d[0] != '.' ]
- disk_names = filter(lambda x: x[0] != '.', disk_names)
- disk_names = fnmatch.filter(disk_names, pattern)
- dirEntry = dir.Entry
- for name in disk_names:
- # Add './' before disk filename so that '#' at
- # beginning of filename isn't interpreted.
- name = './' + name
- node = dirEntry(name).disambiguate()
- n = selfEntry(name)
- if n.__class__ != node.__class__:
- n.__class__ = node.__class__
- n._morph()
-
- names = set(names)
- if pattern[0] != '.':
- #names = [ n for n in names if n[0] != '.' ]
- names = filter(lambda x: x[0] != '.', names)
- names = fnmatch.filter(names, pattern)
-
- if strings:
- return names
-
- #return [ self.entries[_my_normcase(n)] for n in names ]
- return map(lambda n, e=self.entries: e[_my_normcase(n)], names)
-
-class RootDir(Dir):
- """A class for the root directory of a file system.
-
- This is the same as a Dir class, except that the path separator
- ('/' or '\\') is actually part of the name, so we don't need to
- add a separator when creating the path names of entries within
- this directory.
- """
- def __init__(self, name, fs):
- if __debug__: logInstanceCreation(self, 'Node.FS.RootDir')
- # We're going to be our own parent directory (".." entry and .dir
- # attribute) so we have to set up some values so Base.__init__()
- # won't gag won't it calls some of our methods.
- self.abspath = ''
- self.labspath = ''
- self.path = ''
- self.tpath = ''
- self.path_elements = []
- self.duplicate = 0
- self.root = self
- Base.__init__(self, name, self, fs)
-
- # Now set our paths to what we really want them to be: the
- # initial drive letter (the name) plus the directory separator,
- # except for the "lookup abspath," which does not have the
- # drive letter.
- self.abspath = name + os.sep
- self.labspath = ''
- self.path = name + os.sep
- self.tpath = name + os.sep
- self._morph()
-
- self._lookupDict = {}
-
- # The // and os.sep + os.sep entries are necessary because
- # os.path.normpath() seems to preserve double slashes at the
- # beginning of a path (presumably for UNC path names), but
- # collapses triple slashes to a single slash.
- self._lookupDict[''] = self
- self._lookupDict['/'] = self
- self._lookupDict['//'] = self
- self._lookupDict[os.sep] = self
- self._lookupDict[os.sep + os.sep] = self
-
- def must_be_same(self, klass):
- if klass is Dir:
- return
- Base.must_be_same(self, klass)
-
- def _lookup_abs(self, p, klass, create=1):
- """
- Fast (?) lookup of a *normalized* absolute path.
-
- This method is intended for use by internal lookups with
- already-normalized path data. For general-purpose lookups,
- use the FS.Entry(), FS.Dir() or FS.File() methods.
-
- The caller is responsible for making sure we're passed a
- normalized absolute path; we merely let Python's dictionary look
- up and return the One True Node.FS object for the path.
-
- If no Node for the specified "p" doesn't already exist, and
- "create" is specified, the Node may be created after recursive
- invocation to find or create the parent directory or directories.
- """
- k = _my_normcase(p)
- try:
- result = self._lookupDict[k]
- except KeyError:
- if not create:
- raise SCons.Errors.UserError
- # There is no Node for this path name, and we're allowed
- # to create it.
- dir_name, file_name = os.path.split(p)
- dir_node = self._lookup_abs(dir_name, Dir)
- result = klass(file_name, dir_node, self.fs)
-
- # Double-check on disk (as configured) that the Node we
- # created matches whatever is out there in the real world.
- result.diskcheck_match()
-
- self._lookupDict[k] = result
- dir_node.entries[_my_normcase(file_name)] = result
- dir_node.implicit = None
- else:
- # There is already a Node for this path name. Allow it to
- # complain if we were looking for an inappropriate type.
- result.must_be_same(klass)
- return result
-
- def __str__(self):
- return self.abspath
-
- def entry_abspath(self, name):
- return self.abspath + name
-
- def entry_labspath(self, name):
- return '/' + name
-
- def entry_path(self, name):
- return self.path + name
-
- def entry_tpath(self, name):
- return self.tpath + name
-
- def is_under(self, dir):
- if self is dir:
- return 1
- else:
- return 0
-
- def up(self):
- return None
-
- def get_dir(self):
- return None
-
- def src_builder(self):
- return _null
-
-class FileNodeInfo(SCons.Node.NodeInfoBase):
- current_version_id = 1
-
- field_list = ['csig', 'timestamp', 'size']
-
- # This should get reset by the FS initialization.
- fs = None
-
- def str_to_node(self, s):
- top = self.fs.Top
- root = top.root
- if do_splitdrive:
- drive, s = os.path.splitdrive(s)
- if drive:
- root = self.fs.get_root(drive)
- if not os.path.isabs(s):
- s = top.labspath + '/' + s
- return root._lookup_abs(s, Entry)
-
-class FileBuildInfo(SCons.Node.BuildInfoBase):
- current_version_id = 1
-
- def convert_to_sconsign(self):
- """
- Converts this FileBuildInfo object for writing to a .sconsign file
-
- This replaces each Node in our various dependency lists with its
- usual string representation: relative to the top-level SConstruct
- directory, or an absolute path if it's outside.
- """
- if os.sep == '/':
- node_to_str = str
- else:
- def node_to_str(n):
- try:
- s = n.path
- except AttributeError:
- s = str(n)
- else:
- s = string.replace(s, os.sep, '/')
- return s
- for attr in ['bsources', 'bdepends', 'bimplicit']:
- try:
- val = getattr(self, attr)
- except AttributeError:
- pass
- else:
- setattr(self, attr, map(node_to_str, val))
- def convert_from_sconsign(self, dir, name):
- """
- Converts a newly-read FileBuildInfo object for in-SCons use
-
- For normal up-to-date checking, we don't have any conversion to
- perform--but we're leaving this method here to make that clear.
- """
- pass
- def prepare_dependencies(self):
- """
- Prepares a FileBuildInfo object for explaining what changed
-
- The bsources, bdepends and bimplicit lists have all been
- stored on disk as paths relative to the top-level SConstruct
- directory. Convert the strings to actual Nodes (for use by the
- --debug=explain code and --implicit-cache).
- """
- attrs = [
- ('bsources', 'bsourcesigs'),
- ('bdepends', 'bdependsigs'),
- ('bimplicit', 'bimplicitsigs'),
- ]
- for (nattr, sattr) in attrs:
- try:
- strings = getattr(self, nattr)
- nodeinfos = getattr(self, sattr)
- except AttributeError:
- continue
- nodes = []
- for s, ni in izip(strings, nodeinfos):
- if not isinstance(s, SCons.Node.Node):
- s = ni.str_to_node(s)
- nodes.append(s)
- setattr(self, nattr, nodes)
- def format(self, names=0):
- result = []
- bkids = self.bsources + self.bdepends + self.bimplicit
- bkidsigs = self.bsourcesigs + self.bdependsigs + self.bimplicitsigs
- for bkid, bkidsig in izip(bkids, bkidsigs):
- result.append(str(bkid) + ': ' +
- string.join(bkidsig.format(names=names), ' '))
- result.append('%s [%s]' % (self.bactsig, self.bact))
- return string.join(result, '\n')
-
-class File(Base):
- """A class for files in a file system.
- """
-
- memoizer_counters = []
-
- NodeInfo = FileNodeInfo
- BuildInfo = FileBuildInfo
-
- md5_chunksize = 64
-
- def diskcheck_match(self):
- diskcheck_match(self, self.isdir,
- "Directory %s found where file expected.")
-
- def __init__(self, name, directory, fs):
- if __debug__: logInstanceCreation(self, 'Node.FS.File')
- Base.__init__(self, name, directory, fs)
- self._morph()
-
- def Entry(self, name):
- """Create an entry node named 'name' relative to
- the directory of this file."""
- return self.dir.Entry(name)
-
- def Dir(self, name, create=True):
- """Create a directory node named 'name' relative to
- the directory of this file."""
- return self.dir.Dir(name, create=create)
-
- def Dirs(self, pathlist):
- """Create a list of directories relative to the SConscript
- directory of this file."""
- # TODO(1.5)
- # return [self.Dir(p) for p in pathlist]
- return map(lambda p, s=self: s.Dir(p), pathlist)
-
- def File(self, name):
- """Create a file node named 'name' relative to
- the directory of this file."""
- return self.dir.File(name)
-
- #def generate_build_dict(self):
- # """Return an appropriate dictionary of values for building
- # this File."""
- # return {'Dir' : self.Dir,
- # 'File' : self.File,
- # 'RDirs' : self.RDirs}
-
- def _morph(self):
- """Turn a file system node into a File object."""
- self.scanner_paths = {}
- if not hasattr(self, '_local'):
- self._local = 0
-
- # If there was already a Builder set on this entry, then
- # we need to make sure we call the target-decider function,
- # not the source-decider. Reaching in and doing this by hand
- # is a little bogus. We'd prefer to handle this by adding
- # an Entry.builder_set() method that disambiguates like the
- # other methods, but that starts running into problems with the
- # fragile way we initialize Dir Nodes with their Mkdir builders,
- # yet still allow them to be overridden by the user. Since it's
- # not clear right now how to fix that, stick with what works
- # until it becomes clear...
- if self.has_builder():
- self.changed_since_last_build = self.decide_target
-
- def scanner_key(self):
- return self.get_suffix()
-
- def get_contents(self):
- if not self.rexists():
- return ''
- fname = self.rfile().abspath
- try:
- contents = open(fname, "rb").read()
- except EnvironmentError, e:
- if not e.filename:
- e.filename = fname
- raise
- return contents
-
- try:
- import codecs
- except ImportError:
- get_text_contents = get_contents
- else:
- # This attempts to figure out what the encoding of the text is
- # based upon the BOM bytes, and then decodes the contents so that
- # it's a valid python string.
- def get_text_contents(self):
- contents = self.get_contents()
- if contents.startswith(codecs.BOM_UTF8):
- contents = contents.decode('utf-8')
- elif contents.startswith(codecs.BOM_UTF16):
- contents = contents.decode('utf-16')
- return contents
-
- def get_content_hash(self):
- """
- Compute and return the MD5 hash for this file.
- """
- if not self.rexists():
- return SCons.Util.MD5signature('')
- fname = self.rfile().abspath
- try:
- cs = SCons.Util.MD5filesignature(fname,
- chunksize=SCons.Node.FS.File.md5_chunksize*1024)
- except EnvironmentError, e:
- if not e.filename:
- e.filename = fname
- raise
- return cs
-
-
- memoizer_counters.append(SCons.Memoize.CountValue('get_size'))
-
- def get_size(self):
- try:
- return self._memo['get_size']
- except KeyError:
- pass
-
- if self.rexists():
- size = self.rfile().getsize()
- else:
- size = 0
-
- self._memo['get_size'] = size
-
- return size
-
- memoizer_counters.append(SCons.Memoize.CountValue('get_timestamp'))
-
- def get_timestamp(self):
- try:
- return self._memo['get_timestamp']
- except KeyError:
- pass
-
- if self.rexists():
- timestamp = self.rfile().getmtime()
- else:
- timestamp = 0
-
- self._memo['get_timestamp'] = timestamp
-
- return timestamp
-
- def store_info(self):
- # Merge our build information into the already-stored entry.
- # This accomodates "chained builds" where a file that's a target
- # in one build (SConstruct file) is a source in a different build.
- # See test/chained-build.py for the use case.
- if do_store_info:
- self.dir.sconsign().store_info(self.name, self)
-
- convert_copy_attrs = [
- 'bsources',
- 'bimplicit',
- 'bdepends',
- 'bact',
- 'bactsig',
- 'ninfo',
- ]
-
-
- convert_sig_attrs = [
- 'bsourcesigs',
- 'bimplicitsigs',
- 'bdependsigs',
- ]
-
- def convert_old_entry(self, old_entry):
- # Convert a .sconsign entry from before the Big Signature
- # Refactoring, doing what we can to convert its information
- # to the new .sconsign entry format.
- #
- # The old format looked essentially like this:
- #
- # BuildInfo
- # .ninfo (NodeInfo)
- # .bsig
- # .csig
- # .timestamp
- # .size
- # .bsources
- # .bsourcesigs ("signature" list)
- # .bdepends
- # .bdependsigs ("signature" list)
- # .bimplicit
- # .bimplicitsigs ("signature" list)
- # .bact
- # .bactsig
- #
- # The new format looks like this:
- #
- # .ninfo (NodeInfo)
- # .bsig
- # .csig
- # .timestamp
- # .size
- # .binfo (BuildInfo)
- # .bsources
- # .bsourcesigs (NodeInfo list)
- # .bsig
- # .csig
- # .timestamp
- # .size
- # .bdepends
- # .bdependsigs (NodeInfo list)
- # .bsig
- # .csig
- # .timestamp
- # .size
- # .bimplicit
- # .bimplicitsigs (NodeInfo list)
- # .bsig
- # .csig
- # .timestamp
- # .size
- # .bact
- # .bactsig
- #
- # The basic idea of the new structure is that a NodeInfo always
- # holds all available information about the state of a given Node
- # at a certain point in time. The various .b*sigs lists can just
- # be a list of pointers to the .ninfo attributes of the different
- # dependent nodes, without any copying of information until it's
- # time to pickle it for writing out to a .sconsign file.
- #
- # The complicating issue is that the *old* format only stored one
- # "signature" per dependency, based on however the *last* build
- # was configured. We don't know from just looking at it whether
- # it was a build signature, a content signature, or a timestamp
- # "signature". Since we no longer use build signatures, the
- # best we can do is look at the length and if it's thirty two,
- # assume that it was (or might have been) a content signature.
- # If it was actually a build signature, then it will cause a
- # rebuild anyway when it doesn't match the new content signature,
- # but that's probably the best we can do.
- import SCons.SConsign
- new_entry = SCons.SConsign.SConsignEntry()
- new_entry.binfo = self.new_binfo()
- binfo = new_entry.binfo
- for attr in self.convert_copy_attrs:
- try:
- value = getattr(old_entry, attr)
- except AttributeError:
- continue
- setattr(binfo, attr, value)
- delattr(old_entry, attr)
- for attr in self.convert_sig_attrs:
- try:
- sig_list = getattr(old_entry, attr)
- except AttributeError:
- continue
- value = []
- for sig in sig_list:
- ninfo = self.new_ninfo()
- if len(sig) == 32:
- ninfo.csig = sig
- else:
- ninfo.timestamp = sig
- value.append(ninfo)
- setattr(binfo, attr, value)
- delattr(old_entry, attr)
- return new_entry
-
- memoizer_counters.append(SCons.Memoize.CountValue('get_stored_info'))
-
- def get_stored_info(self):
- try:
- return self._memo['get_stored_info']
- except KeyError:
- pass
-
- try:
- sconsign_entry = self.dir.sconsign().get_entry(self.name)
- except (KeyError, EnvironmentError):
- import SCons.SConsign
- sconsign_entry = SCons.SConsign.SConsignEntry()
- sconsign_entry.binfo = self.new_binfo()
- sconsign_entry.ninfo = self.new_ninfo()
- else:
- if isinstance(sconsign_entry, FileBuildInfo):
- # This is a .sconsign file from before the Big Signature
- # Refactoring; convert it as best we can.
- sconsign_entry = self.convert_old_entry(sconsign_entry)
- try:
- delattr(sconsign_entry.ninfo, 'bsig')
- except AttributeError:
- pass
-
- self._memo['get_stored_info'] = sconsign_entry
-
- return sconsign_entry
-
- def get_stored_implicit(self):
- binfo = self.get_stored_info().binfo
- binfo.prepare_dependencies()
- try: return binfo.bimplicit
- except AttributeError: return None
-
- def rel_path(self, other):
- return self.dir.rel_path(other)
-
- def _get_found_includes_key(self, env, scanner, path):
- return (id(env), id(scanner), path)
-
- memoizer_counters.append(SCons.Memoize.CountDict('get_found_includes', _get_found_includes_key))
-
- def get_found_includes(self, env, scanner, path):
- """Return the included implicit dependencies in this file.
- Cache results so we only scan the file once per path
- regardless of how many times this information is requested.
- """
- memo_key = (id(env), id(scanner), path)
- try:
- memo_dict = self._memo['get_found_includes']
- except KeyError:
- memo_dict = {}
- self._memo['get_found_includes'] = memo_dict
- else:
- try:
- return memo_dict[memo_key]
- except KeyError:
- pass
-
- if scanner:
- # result = [n.disambiguate() for n in scanner(self, env, path)]
- result = scanner(self, env, path)
- result = map(lambda N: N.disambiguate(), result)
- else:
- result = []
-
- memo_dict[memo_key] = result
-
- return result
-
- def _createDir(self):
- # ensure that the directories for this node are
- # created.
- self.dir._create()
-
- def push_to_cache(self):
- """Try to push the node into a cache
- """
- # This should get called before the Nodes' .built() method is
- # called, which would clear the build signature if the file has
- # a source scanner.
- #
- # We have to clear the local memoized values *before* we push
- # the node to cache so that the memoization of the self.exists()
- # return value doesn't interfere.
- if self.nocache:
- return
- self.clear_memoized_values()
- if self.exists():
- self.get_build_env().get_CacheDir().push(self)
-
- def retrieve_from_cache(self):
- """Try to retrieve the node's content from a cache
-
- This method is called from multiple threads in a parallel build,
- so only do thread safe stuff here. Do thread unsafe stuff in
- built().
-
- Returns true iff the node was successfully retrieved.
- """
- if self.nocache:
- return None
- if not self.is_derived():
- return None
- return self.get_build_env().get_CacheDir().retrieve(self)
-
- def visited(self):
- if self.exists():
- self.get_build_env().get_CacheDir().push_if_forced(self)
-
- ninfo = self.get_ninfo()
-
- csig = self.get_max_drift_csig()
- if csig:
- ninfo.csig = csig
-
- ninfo.timestamp = self.get_timestamp()
- ninfo.size = self.get_size()
-
- if not self.has_builder():
- # This is a source file, but it might have been a target file
- # in another build that included more of the DAG. Copy
- # any build information that's stored in the .sconsign file
- # into our binfo object so it doesn't get lost.
- old = self.get_stored_info()
- self.get_binfo().__dict__.update(old.binfo.__dict__)
-
- self.store_info()
-
- def find_src_builder(self):
- if self.rexists():
- return None
- scb = self.dir.src_builder()
- if scb is _null:
- if diskcheck_sccs(self.dir, self.name):
- scb = get_DefaultSCCSBuilder()
- elif diskcheck_rcs(self.dir, self.name):
- scb = get_DefaultRCSBuilder()
- else:
- scb = None
- if scb is not None:
- try:
- b = self.builder
- except AttributeError:
- b = None
- if b is None:
- self.builder_set(scb)
- return scb
-
- def has_src_builder(self):
- """Return whether this Node has a source builder or not.
-
- If this Node doesn't have an explicit source code builder, this
- is where we figure out, on the fly, if there's a transparent
- source code builder for it.
-
- Note that if we found a source builder, we also set the
- self.builder attribute, so that all of the methods that actually
- *build* this file don't have to do anything different.
- """
- try:
- scb = self.sbuilder
- except AttributeError:
- scb = self.sbuilder = self.find_src_builder()
- return scb is not None
-
- def alter_targets(self):
- """Return any corresponding targets in a variant directory.
- """
- if self.is_derived():
- return [], None
- return self.fs.variant_dir_target_climb(self, self.dir, [self.name])
-
- def _rmv_existing(self):
- self.clear_memoized_values()
- e = Unlink(self, [], None)
- if isinstance(e, SCons.Errors.BuildError):
- raise e
-
- #
- # Taskmaster interface subsystem
- #
-
- def make_ready(self):
- self.has_src_builder()
- self.get_binfo()
-
- def prepare(self):
- """Prepare for this file to be created."""
- SCons.Node.Node.prepare(self)
-
- if self.get_state() != SCons.Node.up_to_date:
- if self.exists():
- if self.is_derived() and not self.precious:
- self._rmv_existing()
- else:
- try:
- self._createDir()
- except SCons.Errors.StopError, drive:
- desc = "No drive `%s' for target `%s'." % (drive, self)
- raise SCons.Errors.StopError, desc
-
- #
- #
- #
-
- def remove(self):
- """Remove this file."""
- if self.exists() or self.islink():
- self.fs.unlink(self.path)
- return 1
- return None
-
- def do_duplicate(self, src):
- self._createDir()
- Unlink(self, None, None)
- e = Link(self, src, None)
- if isinstance(e, SCons.Errors.BuildError):
- desc = "Cannot duplicate `%s' in `%s': %s." % (src.path, self.dir.path, e.errstr)
- raise SCons.Errors.StopError, desc
- self.linked = 1
- # The Link() action may or may not have actually
- # created the file, depending on whether the -n
- # option was used or not. Delete the _exists and
- # _rexists attributes so they can be reevaluated.
- self.clear()
-
- memoizer_counters.append(SCons.Memoize.CountValue('exists'))
-
- def exists(self):
- try:
- return self._memo['exists']
- except KeyError:
- pass
- # Duplicate from source path if we are set up to do this.
- if self.duplicate and not self.is_derived() and not self.linked:
- src = self.srcnode()
- if src is not self:
- # At this point, src is meant to be copied in a variant directory.
- src = src.rfile()
- if src.abspath != self.abspath:
- if src.exists():
- self.do_duplicate(src)
- # Can't return 1 here because the duplication might
- # not actually occur if the -n option is being used.
- else:
- # The source file does not exist. Make sure no old
- # copy remains in the variant directory.
- if Base.exists(self) or self.islink():
- self.fs.unlink(self.path)
- # Return None explicitly because the Base.exists() call
- # above will have cached its value if the file existed.
- self._memo['exists'] = None
- return None
- result = Base.exists(self)
- self._memo['exists'] = result
- return result
-
- #
- # SIGNATURE SUBSYSTEM
- #
-
- def get_max_drift_csig(self):
- """
- Returns the content signature currently stored for this node
- if it's been unmodified longer than the max_drift value, or the
- max_drift value is 0. Returns None otherwise.
- """
- old = self.get_stored_info()
- mtime = self.get_timestamp()
-
- max_drift = self.fs.max_drift
- if max_drift > 0:
- if (time.time() - mtime) > max_drift:
- try:
- n = old.ninfo
- if n.timestamp and n.csig and n.timestamp == mtime:
- return n.csig
- except AttributeError:
- pass
- elif max_drift == 0:
- try:
- return old.ninfo.csig
- except AttributeError:
- pass
-
- return None
-
- def get_csig(self):
- """
- Generate a node's content signature, the digested signature
- of its content.
-
- node - the node
- cache - alternate node to use for the signature cache
- returns - the content signature
- """
- ninfo = self.get_ninfo()
- try:
- return ninfo.csig
- except AttributeError:
- pass
-
- csig = self.get_max_drift_csig()
- if csig is None:
-
- try:
- if self.get_size() < SCons.Node.FS.File.md5_chunksize:
- contents = self.get_contents()
- else:
- csig = self.get_content_hash()
- except IOError:
- # This can happen if there's actually a directory on-disk,
- # which can be the case if they've disabled disk checks,
- # or if an action with a File target actually happens to
- # create a same-named directory by mistake.
- csig = ''
- else:
- if not csig:
- csig = SCons.Util.MD5signature(contents)
-
- ninfo.csig = csig
-
- return csig
-
- #
- # DECISION SUBSYSTEM
- #
-
- def builder_set(self, builder):
- SCons.Node.Node.builder_set(self, builder)
- self.changed_since_last_build = self.decide_target
-
- def changed_content(self, target, prev_ni):
- cur_csig = self.get_csig()
- try:
- return cur_csig != prev_ni.csig
- except AttributeError:
- return 1
-
- def changed_state(self, target, prev_ni):
- return self.state != SCons.Node.up_to_date
-
- def changed_timestamp_then_content(self, target, prev_ni):
- if not self.changed_timestamp_match(target, prev_ni):
- try:
- self.get_ninfo().csig = prev_ni.csig
- except AttributeError:
- pass
- return False
- return self.changed_content(target, prev_ni)
-
- def changed_timestamp_newer(self, target, prev_ni):
- try:
- return self.get_timestamp() > target.get_timestamp()
- except AttributeError:
- return 1
-
- def changed_timestamp_match(self, target, prev_ni):
- try:
- return self.get_timestamp() != prev_ni.timestamp
- except AttributeError:
- return 1
-
- def decide_source(self, target, prev_ni):
- return target.get_build_env().decide_source(self, target, prev_ni)
-
- def decide_target(self, target, prev_ni):
- return target.get_build_env().decide_target(self, target, prev_ni)
-
- # Initialize this Node's decider function to decide_source() because
- # every file is a source file until it has a Builder attached...
- changed_since_last_build = decide_source
-
- def is_up_to_date(self):
- T = 0
- if T: Trace('is_up_to_date(%s):' % self)
- if not self.exists():
- if T: Trace(' not self.exists():')
- # The file doesn't exist locally...
- r = self.rfile()
- if r != self:
- # ...but there is one in a Repository...
- if not self.changed(r):
- if T: Trace(' changed(%s):' % r)
- # ...and it's even up-to-date...
- if self._local:
- # ...and they'd like a local copy.
- e = LocalCopy(self, r, None)
- if isinstance(e, SCons.Errors.BuildError):
- raise
- self.store_info()
- if T: Trace(' 1\n')
- return 1
- self.changed()
- if T: Trace(' None\n')
- return None
- else:
- r = self.changed()
- if T: Trace(' self.exists(): %s\n' % r)
- return not r
-
- memoizer_counters.append(SCons.Memoize.CountValue('rfile'))
-
- def rfile(self):
- try:
- return self._memo['rfile']
- except KeyError:
- pass
- result = self
- if not self.exists():
- norm_name = _my_normcase(self.name)
- for dir in self.dir.get_all_rdirs():
- try: node = dir.entries[norm_name]
- except KeyError: node = dir.file_on_disk(self.name)
- if node and node.exists() and \
- (isinstance(node, File) or isinstance(node, Entry) \
- or not node.is_derived()):
- result = node
- # Copy over our local attributes to the repository
- # Node so we identify shared object files in the
- # repository and don't assume they're static.
- #
- # This isn't perfect; the attribute would ideally
- # be attached to the object in the repository in
- # case it was built statically in the repository
- # and we changed it to shared locally, but that's
- # rarely the case and would only occur if you
- # intentionally used the same suffix for both
- # shared and static objects anyway. So this
- # should work well in practice.
- result.attributes = self.attributes
- break
- self._memo['rfile'] = result
- return result
-
- def rstr(self):
- return str(self.rfile())
-
- def get_cachedir_csig(self):
- """
- Fetch a Node's content signature for purposes of computing
- another Node's cachesig.
-
- This is a wrapper around the normal get_csig() method that handles
- the somewhat obscure case of using CacheDir with the -n option.
- Any files that don't exist would normally be "built" by fetching
- them from the cache, but the normal get_csig() method will try
- to open up the local file, which doesn't exist because the -n
- option meant we didn't actually pull the file from cachedir.
- But since the file *does* actually exist in the cachedir, we
- can use its contents for the csig.
- """
- try:
- return self.cachedir_csig
- except AttributeError:
- pass
-
- cachedir, cachefile = self.get_build_env().get_CacheDir().cachepath(self)
- if not self.exists() and cachefile and os.path.exists(cachefile):
- self.cachedir_csig = SCons.Util.MD5filesignature(cachefile, \
- SCons.Node.FS.File.md5_chunksize * 1024)
- else:
- self.cachedir_csig = self.get_csig()
- return self.cachedir_csig
-
- def get_cachedir_bsig(self):
- try:
- return self.cachesig
- except AttributeError:
- pass
-
- # Add the path to the cache signature, because multiple
- # targets built by the same action will all have the same
- # build signature, and we have to differentiate them somehow.
- children = self.children()
- executor = self.get_executor()
- # sigs = [n.get_cachedir_csig() for n in children]
- sigs = map(lambda n: n.get_cachedir_csig(), children)
- sigs.append(SCons.Util.MD5signature(executor.get_contents()))
- sigs.append(self.path)
- result = self.cachesig = SCons.Util.MD5collect(sigs)
- return result
-
-
-default_fs = None
-
-def get_default_fs():
- global default_fs
- if not default_fs:
- default_fs = FS()
- return default_fs
-
-class FileFinder:
- """
- """
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- memoizer_counters = []
-
- def __init__(self):
- self._memo = {}
-
- def filedir_lookup(self, p, fd=None):
- """
- A helper method for find_file() that looks up a directory for
- a file we're trying to find. This only creates the Dir Node if
- it exists on-disk, since if the directory doesn't exist we know
- we won't find any files in it... :-)
-
- It would be more compact to just use this as a nested function
- with a default keyword argument (see the commented-out version
- below), but that doesn't work unless you have nested scopes,
- so we define it here just so this work under Python 1.5.2.
- """
- if fd is None:
- fd = self.default_filedir
- dir, name = os.path.split(fd)
- drive, d = os.path.splitdrive(dir)
- if not name and d[:1] in ('/', os.sep):
- #return p.fs.get_root(drive).dir_on_disk(name)
- return p.fs.get_root(drive)
- if dir:
- p = self.filedir_lookup(p, dir)
- if not p:
- return None
- norm_name = _my_normcase(name)
- try:
- node = p.entries[norm_name]
- except KeyError:
- return p.dir_on_disk(name)
- if isinstance(node, Dir):
- return node
- if isinstance(node, Entry):
- node.must_be_same(Dir)
- return node
- return None
-
- def _find_file_key(self, filename, paths, verbose=None):
- return (filename, paths)
-
- memoizer_counters.append(SCons.Memoize.CountDict('find_file', _find_file_key))
-
- def find_file(self, filename, paths, verbose=None):
- """
- find_file(str, [Dir()]) -> [nodes]
-
- filename - a filename to find
- paths - a list of directory path *nodes* to search in. Can be
- represented as a list, a tuple, or a callable that is
- called with no arguments and returns the list or tuple.
-
- returns - the node created from the found file.
-
- Find a node corresponding to either a derived file or a file
- that exists already.
-
- Only the first file found is returned, and none is returned
- if no file is found.
- """
- memo_key = self._find_file_key(filename, paths)
- try:
- memo_dict = self._memo['find_file']
- except KeyError:
- memo_dict = {}
- self._memo['find_file'] = memo_dict
- else:
- try:
- return memo_dict[memo_key]
- except KeyError:
- pass
-
- if verbose and not callable(verbose):
- if not SCons.Util.is_String(verbose):
- verbose = "find_file"
- verbose = ' %s: ' % verbose
- verbose = lambda s, v=verbose: sys.stdout.write(v + s)
-
- filedir, filename = os.path.split(filename)
- if filedir:
- # More compact code that we can't use until we drop
- # support for Python 1.5.2:
- #
- #def filedir_lookup(p, fd=filedir):
- # """
- # A helper function that looks up a directory for a file
- # we're trying to find. This only creates the Dir Node
- # if it exists on-disk, since if the directory doesn't
- # exist we know we won't find any files in it... :-)
- # """
- # dir, name = os.path.split(fd)
- # if dir:
- # p = filedir_lookup(p, dir)
- # if not p:
- # return None
- # norm_name = _my_normcase(name)
- # try:
- # node = p.entries[norm_name]
- # except KeyError:
- # return p.dir_on_disk(name)
- # if isinstance(node, Dir):
- # return node
- # if isinstance(node, Entry):
- # node.must_be_same(Dir)
- # return node
- # if isinstance(node, Dir) or isinstance(node, Entry):
- # return node
- # return None
- #paths = filter(None, map(filedir_lookup, paths))
-
- self.default_filedir = filedir
- paths = filter(None, map(self.filedir_lookup, paths))
-
- result = None
- for dir in paths:
- if verbose:
- verbose("looking for '%s' in '%s' ...\n" % (filename, dir))
- node, d = dir.srcdir_find_file(filename)
- if node:
- if verbose:
- verbose("... FOUND '%s' in '%s'\n" % (filename, d))
- result = node
- break
-
- memo_dict[memo_key] = result
-
- return result
-
-find_file = FileFinder().find_file
-
-
-def invalidate_node_memos(targets):
- """
- Invalidate the memoized values of all Nodes (files or directories)
- that are associated with the given entries. Has been added to
- clear the cache of nodes affected by a direct execution of an
- action (e.g. Delete/Copy/Chmod). Existing Node caches become
- inconsistent if the action is run through Execute(). The argument
- `targets` can be a single Node object or filename, or a sequence
- of Nodes/filenames.
- """
- from traceback import extract_stack
-
- # First check if the cache really needs to be flushed. Only
- # actions run in the SConscript with Execute() seem to be
- # affected. XXX The way to check if Execute() is in the stacktrace
- # is a very dirty hack and should be replaced by a more sensible
- # solution.
- for f in extract_stack():
- if f[2] == 'Execute' and f[0][-14:] == 'Environment.py':
- break
- else:
- # Dont have to invalidate, so return
- return
-
- if not SCons.Util.is_List(targets):
- targets = [targets]
-
- for entry in targets:
- # If the target is a Node object, clear the cache. If it is a
- # filename, look up potentially existing Node object first.
- try:
- entry.clear_memoized_values()
- except AttributeError:
- # Not a Node object, try to look up Node by filename. XXX
- # This creates Node objects even for those filenames which
- # do not correspond to an existing Node object.
- node = get_default_fs().Entry(entry)
- if node:
- node.clear_memoized_values()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Node/Python.py b/3rdParty/SCons/scons-local/SCons/Node/Python.py
deleted file mode 100644
index 9a22f42..0000000
--- a/3rdParty/SCons/scons-local/SCons/Node/Python.py
+++ /dev/null
@@ -1,125 +0,0 @@
-"""scons.Node.Python
-
-Python nodes.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Node/Python.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Node
-
-class ValueNodeInfo(SCons.Node.NodeInfoBase):
- current_version_id = 1
-
- field_list = ['csig']
-
- def str_to_node(self, s):
- return Value(s)
-
-class ValueBuildInfo(SCons.Node.BuildInfoBase):
- current_version_id = 1
-
-class Value(SCons.Node.Node):
- """A class for Python variables, typically passed on the command line
- or generated by a script, but not from a file or some other source.
- """
-
- NodeInfo = ValueNodeInfo
- BuildInfo = ValueBuildInfo
-
- def __init__(self, value, built_value=None):
- SCons.Node.Node.__init__(self)
- self.value = value
- if not built_value is None:
- self.built_value = built_value
-
- def str_for_display(self):
- return repr(self.value)
-
- def __str__(self):
- return str(self.value)
-
- def make_ready(self):
- self.get_csig()
-
- def build(self, **kw):
- if not hasattr(self, 'built_value'):
- apply (SCons.Node.Node.build, (self,), kw)
-
- is_up_to_date = SCons.Node.Node.children_are_up_to_date
-
- def is_under(self, dir):
- # Make Value nodes get built regardless of
- # what directory scons was run from. Value nodes
- # are outside the filesystem:
- return 1
-
- def write(self, built_value):
- """Set the value of the node."""
- self.built_value = built_value
-
- def read(self):
- """Return the value. If necessary, the value is built."""
- self.build()
- if not hasattr(self, 'built_value'):
- self.built_value = self.value
- return self.built_value
-
- def get_contents(self):
- """By the assumption that the node.built_value is a
- deterministic product of the sources, the contents of a Value
- are the concatenation of all the contents of its sources. As
- the value need not be built when get_contents() is called, we
- cannot use the actual node.built_value."""
- contents = str(self.value)
- for kid in self.children(None):
- contents = contents + kid.get_contents()
- return contents
-
- def changed_since_last_build(self, target, prev_ni):
- cur_csig = self.get_csig()
- try:
- return cur_csig != prev_ni.csig
- except AttributeError:
- return 1
-
- def get_csig(self, calc=None):
- """Because we're a Python value node and don't have a real
- timestamp, we get to ignore the calculator and just use the
- value contents."""
- try:
- return self.ninfo.csig
- except AttributeError:
- pass
- contents = self.get_contents()
- self.get_ninfo().csig = contents
- return contents
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Node/__init__.py b/3rdParty/SCons/scons-local/SCons/Node/__init__.py
deleted file mode 100644
index abb746e..0000000
--- a/3rdParty/SCons/scons-local/SCons/Node/__init__.py
+++ /dev/null
@@ -1,1341 +0,0 @@
-"""SCons.Node
-
-The Node package for the SCons software construction utility.
-
-This is, in many ways, the heart of SCons.
-
-A Node is where we encapsulate all of the dependency information about
-any thing that SCons can build, or about any thing which SCons can use
-to build some other thing. The canonical "thing," of course, is a file,
-but a Node can also represent something remote (like a web page) or
-something completely abstract (like an Alias).
-
-Each specific type of "thing" is specifically represented by a subclass
-of the Node base class: Node.FS.File for files, Node.Alias for aliases,
-etc. Dependency information is kept here in the base class, and
-information specific to files/aliases/etc. is in the subclass. The
-goal, if we've done this correctly, is that any type of "thing" should
-be able to depend on any other type of "thing."
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Node/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-import copy
-from itertools import chain, izip
-import string
-import UserList
-
-from SCons.Debug import logInstanceCreation
-import SCons.Executor
-import SCons.Memoize
-import SCons.Util
-
-from SCons.Debug import Trace
-
-def classname(obj):
- return string.split(str(obj.__class__), '.')[-1]
-
-# Node states
-#
-# These are in "priority" order, so that the maximum value for any
-# child/dependency of a node represents the state of that node if
-# it has no builder of its own. The canonical example is a file
-# system directory, which is only up to date if all of its children
-# were up to date.
-no_state = 0
-pending = 1
-executing = 2
-up_to_date = 3
-executed = 4
-failed = 5
-
-StateString = {
- 0 : "no_state",
- 1 : "pending",
- 2 : "executing",
- 3 : "up_to_date",
- 4 : "executed",
- 5 : "failed",
-}
-
-# controls whether implicit dependencies are cached:
-implicit_cache = 0
-
-# controls whether implicit dep changes are ignored:
-implicit_deps_unchanged = 0
-
-# controls whether the cached implicit deps are ignored:
-implicit_deps_changed = 0
-
-# A variable that can be set to an interface-specific function be called
-# to annotate a Node with information about its creation.
-def do_nothing(node): pass
-
-Annotate = do_nothing
-
-# Classes for signature info for Nodes.
-
-class NodeInfoBase:
- """
- The generic base class for signature information for a Node.
-
- Node subclasses should subclass NodeInfoBase to provide their own
- logic for dealing with their own Node-specific signature information.
- """
- current_version_id = 1
- def __init__(self, node):
- # Create an object attribute from the class attribute so it ends up
- # in the pickled data in the .sconsign file.
- self._version_id = self.current_version_id
- def update(self, node):
- try:
- field_list = self.field_list
- except AttributeError:
- return
- for f in field_list:
- try:
- delattr(self, f)
- except AttributeError:
- pass
- try:
- func = getattr(node, 'get_' + f)
- except AttributeError:
- pass
- else:
- setattr(self, f, func())
- def convert(self, node, val):
- pass
- def merge(self, other):
- self.__dict__.update(other.__dict__)
- def format(self, field_list=None, names=0):
- if field_list is None:
- try:
- field_list = self.field_list
- except AttributeError:
- field_list = self.__dict__.keys()
- field_list.sort()
- fields = []
- for field in field_list:
- try:
- f = getattr(self, field)
- except AttributeError:
- f = None
- f = str(f)
- if names:
- f = field + ': ' + f
- fields.append(f)
- return fields
-
-class BuildInfoBase:
- """
- The generic base class for build information for a Node.
-
- This is what gets stored in a .sconsign file for each target file.
- It contains a NodeInfo instance for this node (signature information
- that's specific to the type of Node) and direct attributes for the
- generic build stuff we have to track: sources, explicit dependencies,
- implicit dependencies, and action information.
- """
- current_version_id = 1
- def __init__(self, node):
- # Create an object attribute from the class attribute so it ends up
- # in the pickled data in the .sconsign file.
- self._version_id = self.current_version_id
- self.bsourcesigs = []
- self.bdependsigs = []
- self.bimplicitsigs = []
- self.bactsig = None
- def merge(self, other):
- self.__dict__.update(other.__dict__)
-
-class Node:
- """The base Node class, for entities that we know how to
- build, or use to build other Nodes.
- """
-
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- memoizer_counters = []
-
- class Attrs:
- pass
-
- def __init__(self):
- if __debug__: logInstanceCreation(self, 'Node.Node')
- # Note that we no longer explicitly initialize a self.builder
- # attribute to None here. That's because the self.builder
- # attribute may be created on-the-fly later by a subclass (the
- # canonical example being a builder to fetch a file from a
- # source code system like CVS or Subversion).
-
- # Each list of children that we maintain is accompanied by a
- # dictionary used to look up quickly whether a node is already
- # present in the list. Empirical tests showed that it was
- # fastest to maintain them as side-by-side Node attributes in
- # this way, instead of wrapping up each list+dictionary pair in
- # a class. (Of course, we could always still do that in the
- # future if we had a good reason to...).
- self.sources = [] # source files used to build node
- self.sources_set = set()
- self._specific_sources = False
- self.depends = [] # explicit dependencies (from Depends)
- self.depends_set = set()
- self.ignore = [] # dependencies to ignore
- self.ignore_set = set()
- self.prerequisites = SCons.Util.UniqueList()
- self.implicit = None # implicit (scanned) dependencies (None means not scanned yet)
- self.waiting_parents = set()
- self.waiting_s_e = set()
- self.ref_count = 0
- self.wkids = None # Kids yet to walk, when it's an array
-
- self.env = None
- self.state = no_state
- self.precious = None
- self.noclean = 0
- self.nocache = 0
- self.always_build = None
- self.includes = None
- self.attributes = self.Attrs() # Generic place to stick information about the Node.
- self.side_effect = 0 # true iff this node is a side effect
- self.side_effects = [] # the side effects of building this target
- self.linked = 0 # is this node linked to the variant directory?
-
- self.clear_memoized_values()
-
- # Let the interface in which the build engine is embedded
- # annotate this Node with its own info (like a description of
- # what line in what file created the node, for example).
- Annotate(self)
-
- def disambiguate(self, must_exist=None):
- return self
-
- def get_suffix(self):
- return ''
-
- memoizer_counters.append(SCons.Memoize.CountValue('get_build_env'))
-
- def get_build_env(self):
- """Fetch the appropriate Environment to build this node.
- """
- try:
- return self._memo['get_build_env']
- except KeyError:
- pass
- result = self.get_executor().get_build_env()
- self._memo['get_build_env'] = result
- return result
-
- def get_build_scanner_path(self, scanner):
- """Fetch the appropriate scanner path for this node."""
- return self.get_executor().get_build_scanner_path(scanner)
-
- def set_executor(self, executor):
- """Set the action executor for this node."""
- self.executor = executor
-
- def get_executor(self, create=1):
- """Fetch the action executor for this node. Create one if
- there isn't already one, and requested to do so."""
- try:
- executor = self.executor
- except AttributeError:
- if not create:
- raise
- try:
- act = self.builder.action
- except AttributeError:
- executor = SCons.Executor.Null(targets=[self])
- else:
- executor = SCons.Executor.Executor(act,
- self.env or self.builder.env,
- [self.builder.overrides],
- [self],
- self.sources)
- self.executor = executor
- return executor
-
- def executor_cleanup(self):
- """Let the executor clean up any cached information."""
- try:
- executor = self.get_executor(create=None)
- except AttributeError:
- pass
- else:
- executor.cleanup()
-
- def reset_executor(self):
- "Remove cached executor; forces recompute when needed."
- try:
- delattr(self, 'executor')
- except AttributeError:
- pass
-
- def push_to_cache(self):
- """Try to push a node into a cache
- """
- pass
-
- def retrieve_from_cache(self):
- """Try to retrieve the node's content from a cache
-
- This method is called from multiple threads in a parallel build,
- so only do thread safe stuff here. Do thread unsafe stuff in
- built().
-
- Returns true iff the node was successfully retrieved.
- """
- return 0
-
- #
- # Taskmaster interface subsystem
- #
-
- def make_ready(self):
- """Get a Node ready for evaluation.
-
- This is called before the Taskmaster decides if the Node is
- up-to-date or not. Overriding this method allows for a Node
- subclass to be disambiguated if necessary, or for an implicit
- source builder to be attached.
- """
- pass
-
- def prepare(self):
- """Prepare for this Node to be built.
-
- This is called after the Taskmaster has decided that the Node
- is out-of-date and must be rebuilt, but before actually calling
- the method to build the Node.
-
- This default implementation checks that explicit or implicit
- dependencies either exist or are derived, and initializes the
- BuildInfo structure that will hold the information about how
- this node is, uh, built.
-
- (The existence of source files is checked separately by the
- Executor, which aggregates checks for all of the targets built
- by a specific action.)
-
- Overriding this method allows for for a Node subclass to remove
- the underlying file from the file system. Note that subclass
- methods should call this base class method to get the child
- check and the BuildInfo structure.
- """
- for d in self.depends:
- if d.missing():
- msg = "Explicit dependency `%s' not found, needed by target `%s'."
- raise SCons.Errors.StopError, msg % (d, self)
- if not self.implicit is None:
- for i in self.implicit:
- if i.missing():
- msg = "Implicit dependency `%s' not found, needed by target `%s'."
- raise SCons.Errors.StopError, msg % (i, self)
- self.binfo = self.get_binfo()
-
- def build(self, **kw):
- """Actually build the node.
-
- This is called by the Taskmaster after it's decided that the
- Node is out-of-date and must be rebuilt, and after the prepare()
- method has gotten everything, uh, prepared.
-
- This method is called from multiple threads in a parallel build,
- so only do thread safe stuff here. Do thread unsafe stuff
- in built().
-
- """
- try:
- apply(self.get_executor(), (self,), kw)
- except SCons.Errors.BuildError, e:
- e.node = self
- raise
-
- def built(self):
- """Called just after this node is successfully built."""
-
- # Clear the implicit dependency caches of any Nodes
- # waiting for this Node to be built.
- for parent in self.waiting_parents:
- parent.implicit = None
-
- self.clear()
-
- self.ninfo.update(self)
-
- def visited(self):
- """Called just after this node has been visited (with or
- without a build)."""
- try:
- binfo = self.binfo
- except AttributeError:
- # Apparently this node doesn't need build info, so
- # don't bother calculating or storing it.
- pass
- else:
- self.ninfo.update(self)
- self.store_info()
-
- #
- #
- #
-
- def add_to_waiting_s_e(self, node):
- self.waiting_s_e.add(node)
-
- def add_to_waiting_parents(self, node):
- """
- Returns the number of nodes added to our waiting parents list:
- 1 if we add a unique waiting parent, 0 if not. (Note that the
- returned values are intended to be used to increment a reference
- count, so don't think you can "clean up" this function by using
- True and False instead...)
- """
- wp = self.waiting_parents
- if node in wp:
- return 0
- wp.add(node)
- return 1
-
- def postprocess(self):
- """Clean up anything we don't need to hang onto after we've
- been built."""
- self.executor_cleanup()
- self.waiting_parents = set()
-
- def clear(self):
- """Completely clear a Node of all its cached state (so that it
- can be re-evaluated by interfaces that do continuous integration
- builds).
- """
- # The del_binfo() call here isn't necessary for normal execution,
- # but is for interactive mode, where we might rebuild the same
- # target and need to start from scratch.
- self.del_binfo()
- self.clear_memoized_values()
- self.ninfo = self.new_ninfo()
- self.executor_cleanup()
- try:
- delattr(self, '_calculated_sig')
- except AttributeError:
- pass
- self.includes = None
-
- def clear_memoized_values(self):
- self._memo = {}
-
- def builder_set(self, builder):
- self.builder = builder
- try:
- del self.executor
- except AttributeError:
- pass
-
- def has_builder(self):
- """Return whether this Node has a builder or not.
-
- In Boolean tests, this turns out to be a *lot* more efficient
- than simply examining the builder attribute directly ("if
- node.builder: ..."). When the builder attribute is examined
- directly, it ends up calling __getattr__ for both the __len__
- and __nonzero__ attributes on instances of our Builder Proxy
- class(es), generating a bazillion extra calls and slowing
- things down immensely.
- """
- try:
- b = self.builder
- except AttributeError:
- # There was no explicit builder for this Node, so initialize
- # the self.builder attribute to None now.
- b = self.builder = None
- return not b is None
-
- def set_explicit(self, is_explicit):
- self.is_explicit = is_explicit
-
- def has_explicit_builder(self):
- """Return whether this Node has an explicit builder
-
- This allows an internal Builder created by SCons to be marked
- non-explicit, so that it can be overridden by an explicit
- builder that the user supplies (the canonical example being
- directories)."""
- try:
- return self.is_explicit
- except AttributeError:
- self.is_explicit = None
- return self.is_explicit
-
- def get_builder(self, default_builder=None):
- """Return the set builder, or a specified default value"""
- try:
- return self.builder
- except AttributeError:
- return default_builder
-
- multiple_side_effect_has_builder = has_builder
-
- def is_derived(self):
- """
- Returns true iff this node is derived (i.e. built).
-
- This should return true only for nodes whose path should be in
- the variant directory when duplicate=0 and should contribute their build
- signatures when they are used as source files to other derived files. For
- example: source with source builders are not derived in this sense,
- and hence should not return true.
- """
- return self.has_builder() or self.side_effect
-
- def alter_targets(self):
- """Return a list of alternate targets for this Node.
- """
- return [], None
-
- def get_found_includes(self, env, scanner, path):
- """Return the scanned include lines (implicit dependencies)
- found in this node.
-
- The default is no implicit dependencies. We expect this method
- to be overridden by any subclass that can be scanned for
- implicit dependencies.
- """
- return []
-
- def get_implicit_deps(self, env, scanner, path):
- """Return a list of implicit dependencies for this node.
-
- This method exists to handle recursive invocation of the scanner
- on the implicit dependencies returned by the scanner, if the
- scanner's recursive flag says that we should.
- """
- if not scanner:
- return []
-
- # Give the scanner a chance to select a more specific scanner
- # for this Node.
- #scanner = scanner.select(self)
-
- nodes = [self]
- seen = {}
- seen[self] = 1
- deps = []
- while nodes:
- n = nodes.pop(0)
- d = filter(lambda x, seen=seen: not seen.has_key(x),
- n.get_found_includes(env, scanner, path))
- if d:
- deps.extend(d)
- for n in d:
- seen[n] = 1
- nodes.extend(scanner.recurse_nodes(d))
-
- return deps
-
- def get_env_scanner(self, env, kw={}):
- return env.get_scanner(self.scanner_key())
-
- def get_target_scanner(self):
- return self.builder.target_scanner
-
- def get_source_scanner(self, node):
- """Fetch the source scanner for the specified node
-
- NOTE: "self" is the target being built, "node" is
- the source file for which we want to fetch the scanner.
-
- Implies self.has_builder() is true; again, expect to only be
- called from locations where this is already verified.
-
- This function may be called very often; it attempts to cache
- the scanner found to improve performance.
- """
- scanner = None
- try:
- scanner = self.builder.source_scanner
- except AttributeError:
- pass
- if not scanner:
- # The builder didn't have an explicit scanner, so go look up
- # a scanner from env['SCANNERS'] based on the node's scanner
- # key (usually the file extension).
- scanner = self.get_env_scanner(self.get_build_env())
- if scanner:
- scanner = scanner.select(node)
- return scanner
-
- def add_to_implicit(self, deps):
- if not hasattr(self, 'implicit') or self.implicit is None:
- self.implicit = []
- self.implicit_set = set()
- self._children_reset()
- self._add_child(self.implicit, self.implicit_set, deps)
-
- def scan(self):
- """Scan this node's dependents for implicit dependencies."""
- # Don't bother scanning non-derived files, because we don't
- # care what their dependencies are.
- # Don't scan again, if we already have scanned.
- if not self.implicit is None:
- return
- self.implicit = []
- self.implicit_set = set()
- self._children_reset()
- if not self.has_builder():
- return
-
- build_env = self.get_build_env()
- executor = self.get_executor()
-
- # Here's where we implement --implicit-cache.
- if implicit_cache and not implicit_deps_changed:
- implicit = self.get_stored_implicit()
- if implicit is not None:
- # We now add the implicit dependencies returned from the
- # stored .sconsign entry to have already been converted
- # to Nodes for us. (We used to run them through a
- # source_factory function here.)
-
- # Update all of the targets with them. This
- # essentially short-circuits an N*M scan of the
- # sources for each individual target, which is a hell
- # of a lot more efficient.
- for tgt in executor.get_all_targets():
- tgt.add_to_implicit(implicit)
-
- if implicit_deps_unchanged or self.is_up_to_date():
- return
- # one of this node's sources has changed,
- # so we must recalculate the implicit deps:
- self.implicit = []
- self.implicit_set = set()
-
- # Have the executor scan the sources.
- executor.scan_sources(self.builder.source_scanner)
-
- # If there's a target scanner, have the executor scan the target
- # node itself and associated targets that might be built.
- scanner = self.get_target_scanner()
- if scanner:
- executor.scan_targets(scanner)
-
- def scanner_key(self):
- return None
-
- def select_scanner(self, scanner):
- """Selects a scanner for this Node.
-
- This is a separate method so it can be overridden by Node
- subclasses (specifically, Node.FS.Dir) that *must* use their
- own Scanner and don't select one the Scanner.Selector that's
- configured for the target.
- """
- return scanner.select(self)
-
- def env_set(self, env, safe=0):
- if safe and self.env:
- return
- self.env = env
-
- #
- # SIGNATURE SUBSYSTEM
- #
-
- NodeInfo = NodeInfoBase
- BuildInfo = BuildInfoBase
-
- def new_ninfo(self):
- ninfo = self.NodeInfo(self)
- return ninfo
-
- def get_ninfo(self):
- try:
- return self.ninfo
- except AttributeError:
- self.ninfo = self.new_ninfo()
- return self.ninfo
-
- def new_binfo(self):
- binfo = self.BuildInfo(self)
- return binfo
-
- def get_binfo(self):
- """
- Fetch a node's build information.
-
- node - the node whose sources will be collected
- cache - alternate node to use for the signature cache
- returns - the build signature
-
- This no longer handles the recursive descent of the
- node's children's signatures. We expect that they're
- already built and updated by someone else, if that's
- what's wanted.
- """
- try:
- return self.binfo
- except AttributeError:
- pass
-
- binfo = self.new_binfo()
- self.binfo = binfo
-
- executor = self.get_executor()
- ignore_set = self.ignore_set
-
- if self.has_builder():
- binfo.bact = str(executor)
- binfo.bactsig = SCons.Util.MD5signature(executor.get_contents())
-
- if self._specific_sources:
- sources = []
- for s in self.sources:
- if s not in ignore_set:
- sources.append(s)
- else:
- sources = executor.get_unignored_sources(self, self.ignore)
- seen = set()
- bsources = []
- bsourcesigs = []
- for s in sources:
- if not s in seen:
- seen.add(s)
- bsources.append(s)
- bsourcesigs.append(s.get_ninfo())
- binfo.bsources = bsources
- binfo.bsourcesigs = bsourcesigs
-
- depends = self.depends
- dependsigs = []
- for d in depends:
- if d not in ignore_set:
- dependsigs.append(d.get_ninfo())
- binfo.bdepends = depends
- binfo.bdependsigs = dependsigs
-
- implicit = self.implicit or []
- implicitsigs = []
- for i in implicit:
- if i not in ignore_set:
- implicitsigs.append(i.get_ninfo())
- binfo.bimplicit = implicit
- binfo.bimplicitsigs = implicitsigs
-
- return binfo
-
- def del_binfo(self):
- """Delete the build info from this node."""
- try:
- delattr(self, 'binfo')
- except AttributeError:
- pass
-
- def get_csig(self):
- try:
- return self.ninfo.csig
- except AttributeError:
- ninfo = self.get_ninfo()
- ninfo.csig = SCons.Util.MD5signature(self.get_contents())
- return self.ninfo.csig
-
- def get_cachedir_csig(self):
- return self.get_csig()
-
- def store_info(self):
- """Make the build signature permanent (that is, store it in the
- .sconsign file or equivalent)."""
- pass
-
- def do_not_store_info(self):
- pass
-
- def get_stored_info(self):
- return None
-
- def get_stored_implicit(self):
- """Fetch the stored implicit dependencies"""
- return None
-
- #
- #
- #
-
- def set_precious(self, precious = 1):
- """Set the Node's precious value."""
- self.precious = precious
-
- def set_noclean(self, noclean = 1):
- """Set the Node's noclean value."""
- # Make sure noclean is an integer so the --debug=stree
- # output in Util.py can use it as an index.
- self.noclean = noclean and 1 or 0
-
- def set_nocache(self, nocache = 1):
- """Set the Node's nocache value."""
- # Make sure nocache is an integer so the --debug=stree
- # output in Util.py can use it as an index.
- self.nocache = nocache and 1 or 0
-
- def set_always_build(self, always_build = 1):
- """Set the Node's always_build value."""
- self.always_build = always_build
-
- def exists(self):
- """Does this node exists?"""
- # All node exist by default:
- return 1
-
- def rexists(self):
- """Does this node exist locally or in a repositiory?"""
- # There are no repositories by default:
- return self.exists()
-
- def missing(self):
- return not self.is_derived() and \
- not self.linked and \
- not self.rexists()
-
- def remove(self):
- """Remove this Node: no-op by default."""
- return None
-
- def add_dependency(self, depend):
- """Adds dependencies."""
- try:
- self._add_child(self.depends, self.depends_set, depend)
- except TypeError, e:
- e = e.args[0]
- if SCons.Util.is_List(e):
- s = map(str, e)
- else:
- s = str(e)
- raise SCons.Errors.UserError("attempted to add a non-Node dependency to %s:\n\t%s is a %s, not a Node" % (str(self), s, type(e)))
-
- def add_prerequisite(self, prerequisite):
- """Adds prerequisites"""
- self.prerequisites.extend(prerequisite)
- self._children_reset()
-
- def add_ignore(self, depend):
- """Adds dependencies to ignore."""
- try:
- self._add_child(self.ignore, self.ignore_set, depend)
- except TypeError, e:
- e = e.args[0]
- if SCons.Util.is_List(e):
- s = map(str, e)
- else:
- s = str(e)
- raise SCons.Errors.UserError("attempted to ignore a non-Node dependency of %s:\n\t%s is a %s, not a Node" % (str(self), s, type(e)))
-
- def add_source(self, source):
- """Adds sources."""
- if self._specific_sources:
- return
- try:
- self._add_child(self.sources, self.sources_set, source)
- except TypeError, e:
- e = e.args[0]
- if SCons.Util.is_List(e):
- s = map(str, e)
- else:
- s = str(e)
- raise SCons.Errors.UserError("attempted to add a non-Node as source of %s:\n\t%s is a %s, not a Node" % (str(self), s, type(e)))
-
- def _add_child(self, collection, set, child):
- """Adds 'child' to 'collection', first checking 'set' to see if it's
- already present."""
- #if type(child) is not type([]):
- # child = [child]
- #for c in child:
- # if not isinstance(c, Node):
- # raise TypeError, c
- added = None
- for c in child:
- if c not in set:
- set.add(c)
- collection.append(c)
- added = 1
- if added:
- self._children_reset()
-
- def set_specific_source(self, source):
- self.add_source(source)
- self._specific_sources = True
-
- def add_wkid(self, wkid):
- """Add a node to the list of kids waiting to be evaluated"""
- if self.wkids != None:
- self.wkids.append(wkid)
-
- def _children_reset(self):
- self.clear_memoized_values()
- # We need to let the Executor clear out any calculated
- # build info that it's cached so we can re-calculate it.
- self.executor_cleanup()
-
- memoizer_counters.append(SCons.Memoize.CountValue('_children_get'))
-
- def _children_get(self):
- try:
- return self._memo['children_get']
- except KeyError:
- pass
-
- # The return list may contain duplicate Nodes, especially in
- # source trees where there are a lot of repeated #includes
- # of a tangle of .h files. Profiling shows, however, that
- # eliminating the duplicates with a brute-force approach that
- # preserves the order (that is, something like:
- #
- # u = []
- # for n in list:
- # if n not in u:
- # u.append(n)"
- #
- # takes more cycles than just letting the underlying methods
- # hand back cached values if a Node's information is requested
- # multiple times. (Other methods of removing duplicates, like
- # using dictionary keys, lose the order, and the only ordered
- # dictionary patterns I found all ended up using "not in"
- # internally anyway...)
- if self.ignore_set:
- if self.implicit is None:
- iter = chain(self.sources,self.depends)
- else:
- iter = chain(self.sources, self.depends, self.implicit)
-
- children = []
- for i in iter:
- if i not in self.ignore_set:
- children.append(i)
- else:
- if self.implicit is None:
- children = self.sources + self.depends
- else:
- children = self.sources + self.depends + self.implicit
-
- self._memo['children_get'] = children
- return children
-
- def all_children(self, scan=1):
- """Return a list of all the node's direct children."""
- if scan:
- self.scan()
-
- # The return list may contain duplicate Nodes, especially in
- # source trees where there are a lot of repeated #includes
- # of a tangle of .h files. Profiling shows, however, that
- # eliminating the duplicates with a brute-force approach that
- # preserves the order (that is, something like:
- #
- # u = []
- # for n in list:
- # if n not in u:
- # u.append(n)"
- #
- # takes more cycles than just letting the underlying methods
- # hand back cached values if a Node's information is requested
- # multiple times. (Other methods of removing duplicates, like
- # using dictionary keys, lose the order, and the only ordered
- # dictionary patterns I found all ended up using "not in"
- # internally anyway...)
- if self.implicit is None:
- return self.sources + self.depends
- else:
- return self.sources + self.depends + self.implicit
-
- def children(self, scan=1):
- """Return a list of the node's direct children, minus those
- that are ignored by this node."""
- if scan:
- self.scan()
- return self._children_get()
-
- def set_state(self, state):
- self.state = state
-
- def get_state(self):
- return self.state
-
- def state_has_changed(self, target, prev_ni):
- return (self.state != SCons.Node.up_to_date)
-
- def get_env(self):
- env = self.env
- if not env:
- import SCons.Defaults
- env = SCons.Defaults.DefaultEnvironment()
- return env
-
- def changed_since_last_build(self, target, prev_ni):
- """
-
- Must be overridden in a specific subclass to return True if this
- Node (a dependency) has changed since the last time it was used
- to build the specified target. prev_ni is this Node's state (for
- example, its file timestamp, length, maybe content signature)
- as of the last time the target was built.
-
- Note that this method is called through the dependency, not the
- target, because a dependency Node must be able to use its own
- logic to decide if it changed. For example, File Nodes need to
- obey if we're configured to use timestamps, but Python Value Nodes
- never use timestamps and always use the content. If this method
- were called through the target, then each Node's implementation
- of this method would have to have more complicated logic to
- handle all the different Node types on which it might depend.
- """
- raise NotImplementedError
-
- def Decider(self, function):
- SCons.Util.AddMethod(self, function, 'changed_since_last_build')
-
- def changed(self, node=None):
- """
- Returns if the node is up-to-date with respect to the BuildInfo
- stored last time it was built. The default behavior is to compare
- it against our own previously stored BuildInfo, but the stored
- BuildInfo from another Node (typically one in a Repository)
- can be used instead.
-
- Note that we now *always* check every dependency. We used to
- short-circuit the check by returning as soon as we detected
- any difference, but we now rely on checking every dependency
- to make sure that any necessary Node information (for example,
- the content signature of an #included .h file) is updated.
- """
- t = 0
- if t: Trace('changed(%s [%s], %s)' % (self, classname(self), node))
- if node is None:
- node = self
-
- result = False
-
- bi = node.get_stored_info().binfo
- then = bi.bsourcesigs + bi.bdependsigs + bi.bimplicitsigs
- children = self.children()
-
- diff = len(children) - len(then)
- if diff:
- # The old and new dependency lists are different lengths.
- # This always indicates that the Node must be rebuilt.
- # We also extend the old dependency list with enough None
- # entries to equal the new dependency list, for the benefit
- # of the loop below that updates node information.
- then.extend([None] * diff)
- if t: Trace(': old %s new %s' % (len(then), len(children)))
- result = True
-
- for child, prev_ni in izip(children, then):
- if child.changed_since_last_build(self, prev_ni):
- if t: Trace(': %s changed' % child)
- result = True
-
- contents = self.get_executor().get_contents()
- if self.has_builder():
- import SCons.Util
- newsig = SCons.Util.MD5signature(contents)
- if bi.bactsig != newsig:
- if t: Trace(': bactsig %s != newsig %s' % (bi.bactsig, newsig))
- result = True
-
- if not result:
- if t: Trace(': up to date')
-
- if t: Trace('\n')
-
- return result
-
- def is_up_to_date(self):
- """Default check for whether the Node is current: unknown Node
- subtypes are always out of date, so they will always get built."""
- return None
-
- def children_are_up_to_date(self):
- """Alternate check for whether the Node is current: If all of
- our children were up-to-date, then this Node was up-to-date, too.
-
- The SCons.Node.Alias and SCons.Node.Python.Value subclasses
- rebind their current() method to this method."""
- # Allow the children to calculate their signatures.
- self.binfo = self.get_binfo()
- if self.always_build:
- return None
- state = 0
- for kid in self.children(None):
- s = kid.get_state()
- if s and (not state or s > state):
- state = s
- return (state == 0 or state == SCons.Node.up_to_date)
-
- def is_literal(self):
- """Always pass the string representation of a Node to
- the command interpreter literally."""
- return 1
-
- def render_include_tree(self):
- """
- Return a text representation, suitable for displaying to the
- user, of the include tree for the sources of this node.
- """
- if self.is_derived() and self.env:
- env = self.get_build_env()
- for s in self.sources:
- scanner = self.get_source_scanner(s)
- if scanner:
- path = self.get_build_scanner_path(scanner)
- else:
- path = None
- def f(node, env=env, scanner=scanner, path=path):
- return node.get_found_includes(env, scanner, path)
- return SCons.Util.render_tree(s, f, 1)
- else:
- return None
-
- def get_abspath(self):
- """
- Return an absolute path to the Node. This will return simply
- str(Node) by default, but for Node types that have a concept of
- relative path, this might return something different.
- """
- return str(self)
-
- def for_signature(self):
- """
- Return a string representation of the Node that will always
- be the same for this particular Node, no matter what. This
- is by contrast to the __str__() method, which might, for
- instance, return a relative path for a file Node. The purpose
- of this method is to generate a value to be used in signature
- calculation for the command line used to build a target, and
- we use this method instead of str() to avoid unnecessary
- rebuilds. This method does not need to return something that
- would actually work in a command line; it can return any kind of
- nonsense, so long as it does not change.
- """
- return str(self)
-
- def get_string(self, for_signature):
- """This is a convenience function designed primarily to be
- used in command generators (i.e., CommandGeneratorActions or
- Environment variables that are callable), which are called
- with a for_signature argument that is nonzero if the command
- generator is being called to generate a signature for the
- command line, which determines if we should rebuild or not.
-
- Such command generators should use this method in preference
- to str(Node) when converting a Node to a string, passing
- in the for_signature parameter, such that we will call
- Node.for_signature() or str(Node) properly, depending on whether
- we are calculating a signature or actually constructing a
- command line."""
- if for_signature:
- return self.for_signature()
- return str(self)
-
- def get_subst_proxy(self):
- """
- This method is expected to return an object that will function
- exactly like this Node, except that it implements any additional
- special features that we would like to be in effect for
- Environment variable substitution. The principle use is that
- some Nodes would like to implement a __getattr__() method,
- but putting that in the Node type itself has a tendency to kill
- performance. We instead put it in a proxy and return it from
- this method. It is legal for this method to return self
- if no new functionality is needed for Environment substitution.
- """
- return self
-
- def explain(self):
- if not self.exists():
- return "building `%s' because it doesn't exist\n" % self
-
- if self.always_build:
- return "rebuilding `%s' because AlwaysBuild() is specified\n" % self
-
- old = self.get_stored_info()
- if old is None:
- return None
-
- old = old.binfo
- old.prepare_dependencies()
-
- try:
- old_bkids = old.bsources + old.bdepends + old.bimplicit
- old_bkidsigs = old.bsourcesigs + old.bdependsigs + old.bimplicitsigs
- except AttributeError:
- return "Cannot explain why `%s' is being rebuilt: No previous build information found\n" % self
-
- new = self.get_binfo()
-
- new_bkids = new.bsources + new.bdepends + new.bimplicit
- new_bkidsigs = new.bsourcesigs + new.bdependsigs + new.bimplicitsigs
-
- osig = dict(izip(old_bkids, old_bkidsigs))
- nsig = dict(izip(new_bkids, new_bkidsigs))
-
- # The sources and dependencies we'll want to report are all stored
- # as relative paths to this target's directory, but we want to
- # report them relative to the top-level SConstruct directory,
- # so we only print them after running them through this lambda
- # to turn them into the right relative Node and then return
- # its string.
- def stringify( s, E=self.dir.Entry ) :
- if hasattr( s, 'dir' ) :
- return str(E(s))
- return str(s)
-
- lines = []
-
- removed = filter(lambda x, nk=new_bkids: not x in nk, old_bkids)
- if removed:
- removed = map(stringify, removed)
- fmt = "`%s' is no longer a dependency\n"
- lines.extend(map(lambda s, fmt=fmt: fmt % s, removed))
-
- for k in new_bkids:
- if not k in old_bkids:
- lines.append("`%s' is a new dependency\n" % stringify(k))
- elif k.changed_since_last_build(self, osig[k]):
- lines.append("`%s' changed\n" % stringify(k))
-
- if len(lines) == 0 and old_bkids != new_bkids:
- lines.append("the dependency order changed:\n" +
- "%sold: %s\n" % (' '*15, map(stringify, old_bkids)) +
- "%snew: %s\n" % (' '*15, map(stringify, new_bkids)))
-
- if len(lines) == 0:
- def fmt_with_title(title, strlines):
- lines = string.split(strlines, '\n')
- sep = '\n' + ' '*(15 + len(title))
- return ' '*15 + title + string.join(lines, sep) + '\n'
- if old.bactsig != new.bactsig:
- if old.bact == new.bact:
- lines.append("the contents of the build action changed\n" +
- fmt_with_title('action: ', new.bact))
- else:
- lines.append("the build action changed:\n" +
- fmt_with_title('old: ', old.bact) +
- fmt_with_title('new: ', new.bact))
-
- if len(lines) == 0:
- return "rebuilding `%s' for unknown reasons\n" % self
-
- preamble = "rebuilding `%s' because" % self
- if len(lines) == 1:
- return "%s %s" % (preamble, lines[0])
- else:
- lines = ["%s:\n" % preamble] + lines
- return string.join(lines, ' '*11)
-
-try:
- [].extend(UserList.UserList([]))
-except TypeError:
- # Python 1.5.2 doesn't allow a list to be extended by list-like
- # objects (such as UserList instances), so just punt and use
- # real lists.
- def NodeList(l):
- return l
-else:
- class NodeList(UserList.UserList):
- def __str__(self):
- return str(map(str, self.data))
-
-def get_children(node, parent): return node.children()
-def ignore_cycle(node, stack): pass
-def do_nothing(node, parent): pass
-
-class Walker:
- """An iterator for walking a Node tree.
-
- This is depth-first, children are visited before the parent.
- The Walker object can be initialized with any node, and
- returns the next node on the descent with each next() call.
- 'kids_func' is an optional function that will be called to
- get the children of a node instead of calling 'children'.
- 'cycle_func' is an optional function that will be called
- when a cycle is detected.
-
- This class does not get caught in node cycles caused, for example,
- by C header file include loops.
- """
- def __init__(self, node, kids_func=get_children,
- cycle_func=ignore_cycle,
- eval_func=do_nothing):
- self.kids_func = kids_func
- self.cycle_func = cycle_func
- self.eval_func = eval_func
- node.wkids = copy.copy(kids_func(node, None))
- self.stack = [node]
- self.history = {} # used to efficiently detect and avoid cycles
- self.history[node] = None
-
- def next(self):
- """Return the next node for this walk of the tree.
-
- This function is intentionally iterative, not recursive,
- to sidestep any issues of stack size limitations.
- """
-
- while self.stack:
- if self.stack[-1].wkids:
- node = self.stack[-1].wkids.pop(0)
- if not self.stack[-1].wkids:
- self.stack[-1].wkids = None
- if self.history.has_key(node):
- self.cycle_func(node, self.stack)
- else:
- node.wkids = copy.copy(self.kids_func(node, self.stack[-1]))
- self.stack.append(node)
- self.history[node] = None
- else:
- node = self.stack.pop()
- del self.history[node]
- if node:
- if self.stack:
- parent = self.stack[-1]
- else:
- parent = None
- self.eval_func(node, parent)
- return node
- return None
-
- def is_done(self):
- return not self.stack
-
-
-arg2nodes_lookups = []
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Options/BoolOption.py b/3rdParty/SCons/scons-local/SCons/Options/BoolOption.py
deleted file mode 100644
index f74854a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Options/BoolOption.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Options/BoolOption.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Place-holder for the old SCons.Options module hierarchy
-
-This is for backwards compatibility. The new equivalent is the Variables/
-class hierarchy. These will have deprecation warnings added (some day),
-and will then be removed entirely (some day).
-"""
-
-import SCons.Variables
-import SCons.Warnings
-
-warned = False
-
-def BoolOption(*args, **kw):
- global warned
- if not warned:
- msg = "The BoolOption() function is deprecated; use the BoolVariable() function instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg)
- warned = True
- return apply(SCons.Variables.BoolVariable, args, kw)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Options/EnumOption.py b/3rdParty/SCons/scons-local/SCons/Options/EnumOption.py
deleted file mode 100644
index 1546ec9..0000000
--- a/3rdParty/SCons/scons-local/SCons/Options/EnumOption.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Options/EnumOption.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Place-holder for the old SCons.Options module hierarchy
-
-This is for backwards compatibility. The new equivalent is the Variables/
-class hierarchy. These will have deprecation warnings added (some day),
-and will then be removed entirely (some day).
-"""
-
-import SCons.Variables
-import SCons.Warnings
-
-warned = False
-
-def EnumOption(*args, **kw):
- global warned
- if not warned:
- msg = "The EnumOption() function is deprecated; use the EnumVariable() function instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg)
- warned = True
- return apply(SCons.Variables.EnumVariable, args, kw)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Options/ListOption.py b/3rdParty/SCons/scons-local/SCons/Options/ListOption.py
deleted file mode 100644
index fbc7160..0000000
--- a/3rdParty/SCons/scons-local/SCons/Options/ListOption.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Options/ListOption.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Place-holder for the old SCons.Options module hierarchy
-
-This is for backwards compatibility. The new equivalent is the Variables/
-class hierarchy. These will have deprecation warnings added (some day),
-and will then be removed entirely (some day).
-"""
-
-import SCons.Variables
-import SCons.Warnings
-
-warned = False
-
-def ListOption(*args, **kw):
- global warned
- if not warned:
- msg = "The ListOption() function is deprecated; use the ListVariable() function instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg)
- warned = True
- return apply(SCons.Variables.ListVariable, args, kw)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Options/PackageOption.py b/3rdParty/SCons/scons-local/SCons/Options/PackageOption.py
deleted file mode 100644
index 656c87b..0000000
--- a/3rdParty/SCons/scons-local/SCons/Options/PackageOption.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Options/PackageOption.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Place-holder for the old SCons.Options module hierarchy
-
-This is for backwards compatibility. The new equivalent is the Variables/
-class hierarchy. These will have deprecation warnings added (some day),
-and will then be removed entirely (some day).
-"""
-
-import SCons.Variables
-import SCons.Warnings
-
-warned = False
-
-def PackageOption(*args, **kw):
- global warned
- if not warned:
- msg = "The PackageOption() function is deprecated; use the PackageVariable() function instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg)
- warned = True
- return apply(SCons.Variables.PackageVariable, args, kw)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Options/PathOption.py b/3rdParty/SCons/scons-local/SCons/Options/PathOption.py
deleted file mode 100644
index afcf919..0000000
--- a/3rdParty/SCons/scons-local/SCons/Options/PathOption.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Options/PathOption.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Place-holder for the old SCons.Options module hierarchy
-
-This is for backwards compatibility. The new equivalent is the Variables/
-class hierarchy. These will have deprecation warnings added (some day),
-and will then be removed entirely (some day).
-"""
-
-import SCons.Variables
-import SCons.Warnings
-
-warned = False
-
-class _PathOptionClass:
- def warn(self):
- global warned
- if not warned:
- msg = "The PathOption() function is deprecated; use the PathVariable() function instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg)
- warned = True
-
- def __call__(self, *args, **kw):
- self.warn()
- return apply(SCons.Variables.PathVariable, args, kw)
-
- def PathAccept(self, *args, **kw):
- self.warn()
- return apply(SCons.Variables.PathVariable.PathAccept, args, kw)
-
- def PathIsDir(self, *args, **kw):
- self.warn()
- return apply(SCons.Variables.PathVariable.PathIsDir, args, kw)
-
- def PathIsDirCreate(self, *args, **kw):
- self.warn()
- return apply(SCons.Variables.PathVariable.PathIsDirCreate, args, kw)
-
- def PathIsFile(self, *args, **kw):
- self.warn()
- return apply(SCons.Variables.PathVariable.PathIsFile, args, kw)
-
- def PathExists(self, *args, **kw):
- self.warn()
- return apply(SCons.Variables.PathVariable.PathExists, args, kw)
-
-PathOption = _PathOptionClass()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Options/__init__.py b/3rdParty/SCons/scons-local/SCons/Options/__init__.py
deleted file mode 100644
index 053b565..0000000
--- a/3rdParty/SCons/scons-local/SCons/Options/__init__.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Options/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Place-holder for the old SCons.Options module hierarchy
-
-This is for backwards compatibility. The new equivalent is the Variables/
-class hierarchy. These will have deprecation warnings added (some day),
-and will then be removed entirely (some day).
-"""
-
-import SCons.Variables
-import SCons.Warnings
-
-from BoolOption import BoolOption # okay
-from EnumOption import EnumOption # okay
-from ListOption import ListOption # naja
-from PackageOption import PackageOption # naja
-from PathOption import PathOption # okay
-
-warned = False
-
-class Options(SCons.Variables.Variables):
- def __init__(self, *args, **kw):
- global warned
- if not warned:
- msg = "The Options class is deprecated; use the Variables class instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedOptionsWarning, msg)
- warned = True
- apply(SCons.Variables.Variables.__init__,
- (self,) + args,
- kw)
-
- def AddOptions(self, *args, **kw):
- return apply(SCons.Variables.Variables.AddVariables,
- (self,) + args,
- kw)
-
- def UnknownOptions(self, *args, **kw):
- return apply(SCons.Variables.Variables.UnknownVariables,
- (self,) + args,
- kw)
-
- def FormatOptionHelpText(self, *args, **kw):
- return apply(SCons.Variables.Variables.FormatVariableHelpText,
- (self,) + args,
- kw)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/PathList.py b/3rdParty/SCons/scons-local/SCons/PathList.py
deleted file mode 100644
index 78aafe1..0000000
--- a/3rdParty/SCons/scons-local/SCons/PathList.py
+++ /dev/null
@@ -1,232 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/PathList.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """SCons.PathList
-
-A module for handling lists of directory paths (the sort of things
-that get set as CPPPATH, LIBPATH, etc.) with as much caching of data and
-efficiency as we can while still keeping the evaluation delayed so that we
-Do the Right Thing (almost) regardless of how the variable is specified.
-
-"""
-
-import os
-import string
-
-import SCons.Memoize
-import SCons.Node
-import SCons.Util
-
-#
-# Variables to specify the different types of entries in a PathList object:
-#
-
-TYPE_STRING_NO_SUBST = 0 # string with no '$'
-TYPE_STRING_SUBST = 1 # string containing '$'
-TYPE_OBJECT = 2 # other object
-
-def node_conv(obj):
- """
- This is the "string conversion" routine that we have our substitutions
- use to return Nodes, not strings. This relies on the fact that an
- EntryProxy object has a get() method that returns the underlying
- Node that it wraps, which is a bit of architectural dependence
- that we might need to break or modify in the future in response to
- additional requirements.
- """
- try:
- get = obj.get
- except AttributeError:
- if isinstance(obj, SCons.Node.Node) or SCons.Util.is_Sequence( obj ):
- result = obj
- else:
- result = str(obj)
- else:
- result = get()
- return result
-
-class _PathList:
- """
- An actual PathList object.
- """
- def __init__(self, pathlist):
- """
- Initializes a PathList object, canonicalizing the input and
- pre-processing it for quicker substitution later.
-
- The stored representation of the PathList is a list of tuples
- containing (type, value), where the "type" is one of the TYPE_*
- variables defined above. We distinguish between:
-
- strings that contain no '$' and therefore need no
- delayed-evaluation string substitution (we expect that there
- will be many of these and that we therefore get a pretty
- big win from avoiding string substitution)
-
- strings that contain '$' and therefore need substitution
- (the hard case is things like '${TARGET.dir}/include',
- which require re-evaluation for every target + source)
-
- other objects (which may be something like an EntryProxy
- that needs a method called to return a Node)
-
- Pre-identifying the type of each element in the PathList up-front
- and storing the type in the list of tuples is intended to reduce
- the amount of calculation when we actually do the substitution
- over and over for each target.
- """
- if SCons.Util.is_String(pathlist):
- pathlist = string.split(pathlist, os.pathsep)
- elif not SCons.Util.is_Sequence(pathlist):
- pathlist = [pathlist]
-
- pl = []
- for p in pathlist:
- try:
- index = string.find(p, '$')
- except (AttributeError, TypeError):
- type = TYPE_OBJECT
- else:
- if index == -1:
- type = TYPE_STRING_NO_SUBST
- else:
- type = TYPE_STRING_SUBST
- pl.append((type, p))
-
- self.pathlist = tuple(pl)
-
- def __len__(self): return len(self.pathlist)
-
- def __getitem__(self, i): return self.pathlist[i]
-
- def subst_path(self, env, target, source):
- """
- Performs construction variable substitution on a pre-digested
- PathList for a specific target and source.
- """
- result = []
- for type, value in self.pathlist:
- if type == TYPE_STRING_SUBST:
- value = env.subst(value, target=target, source=source,
- conv=node_conv)
- if SCons.Util.is_Sequence(value):
- result.extend(value)
- continue
-
- elif type == TYPE_OBJECT:
- value = node_conv(value)
- if value:
- result.append(value)
- return tuple(result)
-
-
-class PathListCache:
- """
- A class to handle caching of PathList lookups.
-
- This class gets instantiated once and then deleted from the namespace,
- so it's used as a Singleton (although we don't enforce that in the
- usual Pythonic ways). We could have just made the cache a dictionary
- in the module namespace, but putting it in this class allows us to
- use the same Memoizer pattern that we use elsewhere to count cache
- hits and misses, which is very valuable.
-
- Lookup keys in the cache are computed by the _PathList_key() method.
- Cache lookup should be quick, so we don't spend cycles canonicalizing
- all forms of the same lookup key. For example, 'x:y' and ['x',
- 'y'] logically represent the same list, but we don't bother to
- split string representations and treat those two equivalently.
- (Note, however, that we do, treat lists and tuples the same.)
-
- The main type of duplication we're trying to catch will come from
- looking up the same path list from two different clones of the
- same construction environment. That is, given
-
- env2 = env1.Clone()
-
- both env1 and env2 will have the same CPPPATH value, and we can
- cheaply avoid re-parsing both values of CPPPATH by using the
- common value from this cache.
- """
- if SCons.Memoize.use_memoizer:
- __metaclass__ = SCons.Memoize.Memoized_Metaclass
-
- memoizer_counters = []
-
- def __init__(self):
- self._memo = {}
-
- def _PathList_key(self, pathlist):
- """
- Returns the key for memoization of PathLists.
-
- Note that we want this to be pretty quick, so we don't completely
- canonicalize all forms of the same list. For example,
- 'dir1:$ROOT/dir2' and ['$ROOT/dir1', 'dir'] may logically
- represent the same list if you're executing from $ROOT, but
- we're not going to bother splitting strings into path elements,
- or massaging strings into Nodes, to identify that equivalence.
- We just want to eliminate obvious redundancy from the normal
- case of re-using exactly the same cloned value for a path.
- """
- if SCons.Util.is_Sequence(pathlist):
- pathlist = tuple(SCons.Util.flatten(pathlist))
- return pathlist
-
- memoizer_counters.append(SCons.Memoize.CountDict('PathList', _PathList_key))
-
- def PathList(self, pathlist):
- """
- Returns the cached _PathList object for the specified pathlist,
- creating and caching a new object as necessary.
- """
- pathlist = self._PathList_key(pathlist)
- try:
- memo_dict = self._memo['PathList']
- except KeyError:
- memo_dict = {}
- self._memo['PathList'] = memo_dict
- else:
- try:
- return memo_dict[pathlist]
- except KeyError:
- pass
-
- result = _PathList(pathlist)
-
- memo_dict[pathlist] = result
-
- return result
-
-PathList = PathListCache().PathList
-
-
-del PathListCache
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/__init__.py b/3rdParty/SCons/scons-local/SCons/Platform/__init__.py
deleted file mode 100644
index 9c23554..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/__init__.py
+++ /dev/null
@@ -1,233 +0,0 @@
-"""SCons.Platform
-
-SCons platform selection.
-
-This looks for modules that define a callable object that can modify a
-construction environment as appropriate for a given platform.
-
-Note that we take a more simplistic view of "platform" than Python does.
-We're looking for a single string that determines a set of
-tool-independent variables with which to initialize a construction
-environment. Consequently, we'll examine both sys.platform and os.name
-(and anything else that might come in to play) in order to return some
-specification which is unique enough for our purposes.
-
-Note that because this subsysem just *selects* a callable that can
-modify a construction environment, it's possible for people to define
-their own "platform specification" in an arbitrary callable function.
-No one needs to use or tie in to this subsystem in order to roll
-their own platform definition.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-import imp
-import os
-import string
-import sys
-import tempfile
-
-import SCons.Errors
-import SCons.Subst
-import SCons.Tool
-
-def platform_default():
- """Return the platform string for our execution environment.
-
- The returned value should map to one of the SCons/Platform/*.py
- files. Since we're architecture independent, though, we don't
- care about the machine architecture.
- """
- osname = os.name
- if osname == 'java':
- osname = os._osType
- if osname == 'posix':
- if sys.platform == 'cygwin':
- return 'cygwin'
- elif string.find(sys.platform, 'irix') != -1:
- return 'irix'
- elif string.find(sys.platform, 'sunos') != -1:
- return 'sunos'
- elif string.find(sys.platform, 'hp-ux') != -1:
- return 'hpux'
- elif string.find(sys.platform, 'aix') != -1:
- return 'aix'
- elif string.find(sys.platform, 'darwin') != -1:
- return 'darwin'
- else:
- return 'posix'
- elif os.name == 'os2':
- return 'os2'
- else:
- return sys.platform
-
-def platform_module(name = platform_default()):
- """Return the imported module for the platform.
-
- This looks for a module name that matches the specified argument.
- If the name is unspecified, we fetch the appropriate default for
- our execution environment.
- """
- full_name = 'SCons.Platform.' + name
- if not sys.modules.has_key(full_name):
- if os.name == 'java':
- eval(full_name)
- else:
- try:
- file, path, desc = imp.find_module(name,
- sys.modules['SCons.Platform'].__path__)
- try:
- mod = imp.load_module(full_name, file, path, desc)
- finally:
- if file:
- file.close()
- except ImportError:
- try:
- import zipimport
- importer = zipimport.zipimporter( sys.modules['SCons.Platform'].__path__[0] )
- mod = importer.load_module(full_name)
- except ImportError:
- raise SCons.Errors.UserError, "No platform named '%s'" % name
- setattr(SCons.Platform, name, mod)
- return sys.modules[full_name]
-
-def DefaultToolList(platform, env):
- """Select a default tool list for the specified platform.
- """
- return SCons.Tool.tool_list(platform, env)
-
-class PlatformSpec:
- def __init__(self, name):
- self.name = name
-
- def __str__(self):
- return self.name
-
-class TempFileMunge:
- """A callable class. You can set an Environment variable to this,
- then call it with a string argument, then it will perform temporary
- file substitution on it. This is used to circumvent the long command
- line limitation.
-
- Example usage:
- env["TEMPFILE"] = TempFileMunge
- env["LINKCOM"] = "${TEMPFILE('$LINK $TARGET $SOURCES')}"
-
- By default, the name of the temporary file used begins with a
- prefix of '@'. This may be configred for other tool chains by
- setting '$TEMPFILEPREFIX'.
-
- env["TEMPFILEPREFIX"] = '-@' # diab compiler
- env["TEMPFILEPREFIX"] = '-via' # arm tool chain
- """
- def __init__(self, cmd):
- self.cmd = cmd
-
- def __call__(self, target, source, env, for_signature):
- if for_signature:
- # If we're being called for signature calculation, it's
- # because we're being called by the string expansion in
- # Subst.py, which has the logic to strip any $( $) that
- # may be in the command line we squirreled away. So we
- # just return the raw command line and let the upper
- # string substitution layers do their thing.
- return self.cmd
-
- # Now we're actually being called because someone is actually
- # going to try to execute the command, so we have to do our
- # own expansion.
- cmd = env.subst_list(self.cmd, SCons.Subst.SUBST_CMD, target, source)[0]
- try:
- maxline = int(env.subst('$MAXLINELENGTH'))
- except ValueError:
- maxline = 2048
-
- if (reduce(lambda x, y: x + len(y), cmd, 0) + len(cmd)) <= maxline:
- return self.cmd
-
- # We do a normpath because mktemp() has what appears to be
- # a bug in Windows that will use a forward slash as a path
- # delimiter. Windows's link mistakes that for a command line
- # switch and barfs.
- #
- # We use the .lnk suffix for the benefit of the Phar Lap
- # linkloc linker, which likes to append an .lnk suffix if
- # none is given.
- tmp = os.path.normpath(tempfile.mktemp('.lnk'))
- native_tmp = SCons.Util.get_native_path(tmp)
-
- if env['SHELL'] and env['SHELL'] == 'sh':
- # The sh shell will try to escape the backslashes in the
- # path, so unescape them.
- native_tmp = string.replace(native_tmp, '\\', r'\\\\')
- # In Cygwin, we want to use rm to delete the temporary
- # file, because del does not exist in the sh shell.
- rm = env.Detect('rm') or 'del'
- else:
- # Don't use 'rm' if the shell is not sh, because rm won't
- # work with the Windows shells (cmd.exe or command.com) or
- # Windows path names.
- rm = 'del'
-
- prefix = env.subst('$TEMPFILEPREFIX')
- if not prefix:
- prefix = '@'
-
- args = map(SCons.Subst.quote_spaces, cmd[1:])
- open(tmp, 'w').write(string.join(args, " ") + "\n")
- # XXX Using the SCons.Action.print_actions value directly
- # like this is bogus, but expedient. This class should
- # really be rewritten as an Action that defines the
- # __call__() and strfunction() methods and lets the
- # normal action-execution logic handle whether or not to
- # print/execute the action. The problem, though, is all
- # of that is decided before we execute this method as
- # part of expanding the $TEMPFILE construction variable.
- # Consequently, refactoring this will have to wait until
- # we get more flexible with allowing Actions to exist
- # independently and get strung together arbitrarily like
- # Ant tasks. In the meantime, it's going to be more
- # user-friendly to not let obsession with architectural
- # purity get in the way of just being helpful, so we'll
- # reach into SCons.Action directly.
- if SCons.Action.print_actions:
- print("Using tempfile "+native_tmp+" for command line:\n"+
- str(cmd[0]) + " " + string.join(args," "))
- return [ cmd[0], prefix + native_tmp + '\n' + rm, native_tmp ]
-
-def Platform(name = platform_default()):
- """Select a canned Platform specification.
- """
- module = platform_module(name)
- spec = PlatformSpec(name)
- spec.__call__ = module.generate
- return spec
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/aix.py b/3rdParty/SCons/scons-local/SCons/Platform/aix.py
deleted file mode 100644
index c3f5d0f..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/aix.py
+++ /dev/null
@@ -1,70 +0,0 @@
-"""engine.SCons.Platform.aix
-
-Platform-specific initialization for IBM AIX systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/aix.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import string
-
-import posix
-
-def get_xlc(env, xlc=None, xlc_r=None, packages=[]):
- # Use the AIX package installer tool lslpp to figure out where a
- # given xl* compiler is installed and what version it is.
- xlcPath = None
- xlcVersion = None
-
- if xlc is None:
- xlc = env.get('CC', 'xlc')
- if xlc_r is None:
- xlc_r = xlc + '_r'
- for package in packages:
- cmd = "lslpp -fc " + package + " 2>/dev/null | egrep '" + xlc + "([^-_a-zA-Z0-9].*)?$'"
- line = os.popen(cmd).readline()
- if line:
- v, p = string.split(line, ':')[1:3]
- xlcVersion = string.split(v)[1]
- xlcPath = string.split(p)[0]
- xlcPath = xlcPath[:xlcPath.rindex('/')]
- break
- return (xlcPath, xlc, xlc_r, xlcVersion)
-
-def generate(env):
- posix.generate(env)
- #Based on AIX 5.2: ARG_MAX=24576 - 3000 for environment expansion
- env['MAXLINELENGTH'] = 21576
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/cygwin.py b/3rdParty/SCons/scons-local/SCons/Platform/cygwin.py
deleted file mode 100644
index cdc516d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/cygwin.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""SCons.Platform.cygwin
-
-Platform-specific initialization for Cygwin systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/cygwin.py 4043 2009/02/23 09:06:45 scons"
-
-import posix
-from SCons.Platform import TempFileMunge
-
-def generate(env):
- posix.generate(env)
-
- env['PROGPREFIX'] = ''
- env['PROGSUFFIX'] = '.exe'
- env['SHLIBPREFIX'] = ''
- env['SHLIBSUFFIX'] = '.dll'
- env['LIBPREFIXES'] = [ '$LIBPREFIX', '$SHLIBPREFIX' ]
- env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX' ]
- env['TEMPFILE'] = TempFileMunge
- env['TEMPFILEPREFIX'] = '@'
- env['MAXLINELENGTH'] = 2048
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/darwin.py b/3rdParty/SCons/scons-local/SCons/Platform/darwin.py
deleted file mode 100644
index a92b2f1..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/darwin.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""engine.SCons.Platform.darwin
-
-Platform-specific initialization for Mac OS X systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/darwin.py 4043 2009/02/23 09:06:45 scons"
-
-import posix
-
-def generate(env):
- posix.generate(env)
- env['SHLIBSUFFIX'] = '.dylib'
- env['ENV']['PATH'] = env['ENV']['PATH'] + ':/sw/bin'
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/hpux.py b/3rdParty/SCons/scons-local/SCons/Platform/hpux.py
deleted file mode 100644
index aa90e71..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/hpux.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""engine.SCons.Platform.hpux
-
-Platform-specific initialization for HP-UX systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/hpux.py 4043 2009/02/23 09:06:45 scons"
-
-import posix
-
-def generate(env):
- posix.generate(env)
- #Based on HP-UX11i: ARG_MAX=2048000 - 3000 for environment expansion
- env['MAXLINELENGTH'] = 2045000
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/irix.py b/3rdParty/SCons/scons-local/SCons/Platform/irix.py
deleted file mode 100644
index a20a7de..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/irix.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""SCons.Platform.irix
-
-Platform-specific initialization for SGI IRIX systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/irix.py 4043 2009/02/23 09:06:45 scons"
-
-import posix
-
-def generate(env):
- posix.generate(env)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/os2.py b/3rdParty/SCons/scons-local/SCons/Platform/os2.py
deleted file mode 100644
index f8fa379..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/os2.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""SCons.Platform.os2
-
-Platform-specific initialization for OS/2 systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/os2.py 4043 2009/02/23 09:06:45 scons"
-
-def generate(env):
- if not env.has_key('ENV'):
- env['ENV'] = {}
- env['OBJPREFIX'] = ''
- env['OBJSUFFIX'] = '.obj'
- env['SHOBJPREFIX'] = '$OBJPREFIX'
- env['SHOBJSUFFIX'] = '$OBJSUFFIX'
- env['PROGPREFIX'] = ''
- env['PROGSUFFIX'] = '.exe'
- env['LIBPREFIX'] = ''
- env['LIBSUFFIX'] = '.lib'
- env['SHLIBPREFIX'] = ''
- env['SHLIBSUFFIX'] = '.dll'
- env['LIBPREFIXES'] = '$LIBPREFIX'
- env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX' ]
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/posix.py b/3rdParty/SCons/scons-local/SCons/Platform/posix.py
deleted file mode 100644
index 0a31dd6..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/posix.py
+++ /dev/null
@@ -1,264 +0,0 @@
-"""SCons.Platform.posix
-
-Platform-specific initialization for POSIX (Linux, UNIX, etc.) systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/posix.py 4043 2009/02/23 09:06:45 scons"
-
-import errno
-import os
-import os.path
-import string
-import subprocess
-import sys
-import select
-
-import SCons.Util
-from SCons.Platform import TempFileMunge
-
-exitvalmap = {
- 2 : 127,
- 13 : 126,
-}
-
-def escape(arg):
- "escape shell special characters"
- slash = '\\'
- special = '"$()'
-
- arg = string.replace(arg, slash, slash+slash)
- for c in special:
- arg = string.replace(arg, c, slash+c)
-
- return '"' + arg + '"'
-
-def exec_system(l, env):
- stat = os.system(string.join(l))
- if stat & 0xff:
- return stat | 0x80
- return stat >> 8
-
-def exec_spawnvpe(l, env):
- stat = os.spawnvpe(os.P_WAIT, l[0], l, env)
- # os.spawnvpe() returns the actual exit code, not the encoding
- # returned by os.waitpid() or os.system().
- return stat
-
-def exec_fork(l, env):
- pid = os.fork()
- if not pid:
- # Child process.
- exitval = 127
- try:
- os.execvpe(l[0], l, env)
- except OSError, e:
- exitval = exitvalmap.get(e[0], e[0])
- sys.stderr.write("scons: %s: %s\n" % (l[0], e[1]))
- os._exit(exitval)
- else:
- # Parent process.
- pid, stat = os.waitpid(pid, 0)
- if stat & 0xff:
- return stat | 0x80
- return stat >> 8
-
-def _get_env_command(sh, escape, cmd, args, env):
- s = string.join(args)
- if env:
- l = ['env', '-'] + \
- map(lambda t, e=escape: e(t[0])+'='+e(t[1]), env.items()) + \
- [sh, '-c', escape(s)]
- s = string.join(l)
- return s
-
-def env_spawn(sh, escape, cmd, args, env):
- return exec_system([_get_env_command( sh, escape, cmd, args, env)], env)
-
-def spawnvpe_spawn(sh, escape, cmd, args, env):
- return exec_spawnvpe([sh, '-c', string.join(args)], env)
-
-def fork_spawn(sh, escape, cmd, args, env):
- return exec_fork([sh, '-c', string.join(args)], env)
-
-def process_cmd_output(cmd_stdout, cmd_stderr, stdout, stderr):
- stdout_eof = stderr_eof = 0
- while not (stdout_eof and stderr_eof):
- try:
- (i,o,e) = select.select([cmd_stdout, cmd_stderr], [], [])
- if cmd_stdout in i:
- str = cmd_stdout.read()
- if len(str) == 0:
- stdout_eof = 1
- elif stdout != None:
- stdout.write(str)
- if cmd_stderr in i:
- str = cmd_stderr.read()
- if len(str) == 0:
- #sys.__stderr__.write( "stderr_eof=1\n" )
- stderr_eof = 1
- else:
- #sys.__stderr__.write( "str(stderr) = %s\n" % str )
- stderr.write(str)
- except select.error, (_errno, _strerror):
- if _errno != errno.EINTR:
- raise
-
-def exec_popen3(l, env, stdout, stderr):
- proc = subprocess.Popen(string.join(l),
- stdout=stdout,
- stderr=stderr,
- shell=True)
- stat = proc.wait()
- if stat & 0xff:
- return stat | 0x80
- return stat >> 8
-
-def exec_piped_fork(l, env, stdout, stderr):
- # spawn using fork / exec and providing a pipe for the command's
- # stdout / stderr stream
- if stdout != stderr:
- (rFdOut, wFdOut) = os.pipe()
- (rFdErr, wFdErr) = os.pipe()
- else:
- (rFdOut, wFdOut) = os.pipe()
- rFdErr = rFdOut
- wFdErr = wFdOut
- # do the fork
- pid = os.fork()
- if not pid:
- # Child process
- os.close( rFdOut )
- if rFdOut != rFdErr:
- os.close( rFdErr )
- os.dup2( wFdOut, 1 ) # is there some symbolic way to do that ?
- os.dup2( wFdErr, 2 )
- os.close( wFdOut )
- if stdout != stderr:
- os.close( wFdErr )
- exitval = 127
- try:
- os.execvpe(l[0], l, env)
- except OSError, e:
- exitval = exitvalmap.get(e[0], e[0])
- stderr.write("scons: %s: %s\n" % (l[0], e[1]))
- os._exit(exitval)
- else:
- # Parent process
- pid, stat = os.waitpid(pid, 0)
- os.close( wFdOut )
- if stdout != stderr:
- os.close( wFdErr )
- childOut = os.fdopen( rFdOut )
- if stdout != stderr:
- childErr = os.fdopen( rFdErr )
- else:
- childErr = childOut
- process_cmd_output(childOut, childErr, stdout, stderr)
- os.close( rFdOut )
- if stdout != stderr:
- os.close( rFdErr )
- if stat & 0xff:
- return stat | 0x80
- return stat >> 8
-
-def piped_env_spawn(sh, escape, cmd, args, env, stdout, stderr):
- # spawn using Popen3 combined with the env command
- # the command name and the command's stdout is written to stdout
- # the command's stderr is written to stderr
- return exec_popen3([_get_env_command(sh, escape, cmd, args, env)],
- env, stdout, stderr)
-
-def piped_fork_spawn(sh, escape, cmd, args, env, stdout, stderr):
- # spawn using fork / exec and providing a pipe for the command's
- # stdout / stderr stream
- return exec_piped_fork([sh, '-c', string.join(args)],
- env, stdout, stderr)
-
-
-
-def generate(env):
- # If os.spawnvpe() exists, we use it to spawn commands. Otherwise
- # if the env utility exists, we use os.system() to spawn commands,
- # finally we fall back on os.fork()/os.exec().
- #
- # os.spawnvpe() is prefered because it is the most efficient. But
- # for Python versions without it, os.system() is prefered because it
- # is claimed that it works better with threads (i.e. -j) and is more
- # efficient than forking Python.
- #
- # NB: Other people on the scons-users mailing list have claimed that
- # os.fork()/os.exec() works better than os.system(). There may just
- # not be a default that works best for all users.
-
- if os.__dict__.has_key('spawnvpe'):
- spawn = spawnvpe_spawn
- elif env.Detect('env'):
- spawn = env_spawn
- else:
- spawn = fork_spawn
-
- if env.Detect('env'):
- pspawn = piped_env_spawn
- else:
- pspawn = piped_fork_spawn
-
- if not env.has_key('ENV'):
- env['ENV'] = {}
- env['ENV']['PATH'] = '/usr/local/bin:/opt/bin:/bin:/usr/bin'
- env['OBJPREFIX'] = ''
- env['OBJSUFFIX'] = '.o'
- env['SHOBJPREFIX'] = '$OBJPREFIX'
- env['SHOBJSUFFIX'] = '$OBJSUFFIX'
- env['PROGPREFIX'] = ''
- env['PROGSUFFIX'] = ''
- env['LIBPREFIX'] = 'lib'
- env['LIBSUFFIX'] = '.a'
- env['SHLIBPREFIX'] = '$LIBPREFIX'
- env['SHLIBSUFFIX'] = '.so'
- env['LIBPREFIXES'] = [ '$LIBPREFIX' ]
- env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX' ]
- env['PSPAWN'] = pspawn
- env['SPAWN'] = spawn
- env['SHELL'] = 'sh'
- env['ESCAPE'] = escape
- env['TEMPFILE'] = TempFileMunge
- env['TEMPFILEPREFIX'] = '@'
- #Based on LINUX: ARG_MAX=ARG_MAX=131072 - 3000 for environment expansion
- #Note: specific platforms might rise or lower this value
- env['MAXLINELENGTH'] = 128072
-
- # This platform supports RPATH specifications.
- env['__RPATH'] = '$_RPATH'
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/sunos.py b/3rdParty/SCons/scons-local/SCons/Platform/sunos.py
deleted file mode 100644
index 74f298a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/sunos.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""engine.SCons.Platform.sunos
-
-Platform-specific initialization for Sun systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/sunos.py 4043 2009/02/23 09:06:45 scons"
-
-import posix
-
-def generate(env):
- posix.generate(env)
- # Based on sunSparc 8:32bit
- # ARG_MAX=1048320 - 3000 for environment expansion
- env['MAXLINELENGTH'] = 1045320
- env['PKGINFO'] = 'pkginfo'
- env['PKGCHK'] = '/usr/sbin/pkgchk'
- env['ENV']['PATH'] = env['ENV']['PATH'] + ':/opt/SUNWspro/bin:/usr/ccs/bin'
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Platform/win32.py b/3rdParty/SCons/scons-local/SCons/Platform/win32.py
deleted file mode 100644
index 64b83a7..0000000
--- a/3rdParty/SCons/scons-local/SCons/Platform/win32.py
+++ /dev/null
@@ -1,337 +0,0 @@
-"""SCons.Platform.win32
-
-Platform-specific initialization for Win32 systems.
-
-There normally shouldn't be any need to import this module directly. It
-will usually be imported through the generic SCons.Platform.Platform()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Platform/win32.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-import string
-import sys
-import tempfile
-
-from SCons.Platform.posix import exitvalmap
-from SCons.Platform import TempFileMunge
-import SCons.Util
-
-
-
-try:
- import msvcrt
- import win32api
- import win32con
-
- msvcrt.get_osfhandle
- win32api.SetHandleInformation
- win32con.HANDLE_FLAG_INHERIT
-except ImportError:
- parallel_msg = \
- "you do not seem to have the pywin32 extensions installed;\n" + \
- "\tparallel (-j) builds may not work reliably with open Python files."
-except AttributeError:
- parallel_msg = \
- "your pywin32 extensions do not support file handle operations;\n" + \
- "\tparallel (-j) builds may not work reliably with open Python files."
-else:
- parallel_msg = None
-
- import __builtin__
-
- _builtin_file = __builtin__.file
- _builtin_open = __builtin__.open
-
- def _scons_file(*args, **kw):
- fp = apply(_builtin_file, args, kw)
- win32api.SetHandleInformation(msvcrt.get_osfhandle(fp.fileno()),
- win32con.HANDLE_FLAG_INHERIT,
- 0)
- return fp
-
- def _scons_open(*args, **kw):
- fp = apply(_builtin_open, args, kw)
- win32api.SetHandleInformation(msvcrt.get_osfhandle(fp.fileno()),
- win32con.HANDLE_FLAG_INHERIT,
- 0)
- return fp
-
- __builtin__.file = _scons_file
- __builtin__.open = _scons_open
-
-
-
-# The upshot of all this is that, if you are using Python 1.5.2,
-# you had better have cmd or command.com in your PATH when you run
-# scons.
-
-def piped_spawn(sh, escape, cmd, args, env, stdout, stderr):
- # There is no direct way to do that in python. What we do
- # here should work for most cases:
- # In case stdout (stderr) is not redirected to a file,
- # we redirect it into a temporary file tmpFileStdout
- # (tmpFileStderr) and copy the contents of this file
- # to stdout (stderr) given in the argument
- if not sh:
- sys.stderr.write("scons: Could not find command interpreter, is it in your PATH?\n")
- return 127
- else:
- # one temporary file for stdout and stderr
- tmpFileStdout = os.path.normpath(tempfile.mktemp())
- tmpFileStderr = os.path.normpath(tempfile.mktemp())
-
- # check if output is redirected
- stdoutRedirected = 0
- stderrRedirected = 0
- for arg in args:
- # are there more possibilities to redirect stdout ?
- if (string.find( arg, ">", 0, 1 ) != -1 or
- string.find( arg, "1>", 0, 2 ) != -1):
- stdoutRedirected = 1
- # are there more possibilities to redirect stderr ?
- if string.find( arg, "2>", 0, 2 ) != -1:
- stderrRedirected = 1
-
- # redirect output of non-redirected streams to our tempfiles
- if stdoutRedirected == 0:
- args.append(">" + str(tmpFileStdout))
- if stderrRedirected == 0:
- args.append("2>" + str(tmpFileStderr))
-
- # actually do the spawn
- try:
- args = [sh, '/C', escape(string.join(args)) ]
- ret = os.spawnve(os.P_WAIT, sh, args, env)
- except OSError, e:
- # catch any error
- try:
- ret = exitvalmap[e[0]]
- except KeyError:
- sys.stderr.write("scons: unknown OSError exception code %d - %s: %s\n" % (e[0], cmd, e[1]))
- if stderr != None:
- stderr.write("scons: %s: %s\n" % (cmd, e[1]))
- # copy child output from tempfiles to our streams
- # and do clean up stuff
- if stdout != None and stdoutRedirected == 0:
- try:
- stdout.write(open( tmpFileStdout, "r" ).read())
- os.remove( tmpFileStdout )
- except (IOError, OSError):
- pass
-
- if stderr != None and stderrRedirected == 0:
- try:
- stderr.write(open( tmpFileStderr, "r" ).read())
- os.remove( tmpFileStderr )
- except (IOError, OSError):
- pass
- return ret
-
-def exec_spawn(l, env):
- try:
- result = os.spawnve(os.P_WAIT, l[0], l, env)
- except OSError, e:
- try:
- result = exitvalmap[e[0]]
- sys.stderr.write("scons: %s: %s\n" % (l[0], e[1]))
- except KeyError:
- result = 127
- if len(l) > 2:
- if len(l[2]) < 1000:
- command = string.join(l[0:3])
- else:
- command = l[0]
- else:
- command = l[0]
- sys.stderr.write("scons: unknown OSError exception code %d - '%s': %s\n" % (e[0], command, e[1]))
- return result
-
-def spawn(sh, escape, cmd, args, env):
- if not sh:
- sys.stderr.write("scons: Could not find command interpreter, is it in your PATH?\n")
- return 127
- return exec_spawn([sh, '/C', escape(string.join(args))], env)
-
-# Windows does not allow special characters in file names anyway, so no
-# need for a complex escape function, we will just quote the arg, except
-# that "cmd /c" requires that if an argument ends with a backslash it
-# needs to be escaped so as not to interfere with closing double quote
-# that we add.
-def escape(x):
- if x[-1] == '\\':
- x = x + '\\'
- return '"' + x + '"'
-
-# Get the windows system directory name
-_system_root = None
-
-def get_system_root():
- global _system_root
- if _system_root is not None:
- return _system_root
-
- # A resonable default if we can't read the registry
- val = os.environ.get('SystemRoot', "C:/WINDOWS")
-
- if SCons.Util.can_read_reg:
- try:
- # Look for Windows NT system root
- k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
- 'Software\\Microsoft\\Windows NT\\CurrentVersion')
- val, tok = SCons.Util.RegQueryValueEx(k, 'SystemRoot')
- except SCons.Util.RegError:
- try:
- # Okay, try the Windows 9x system root
- k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
- 'Software\\Microsoft\\Windows\\CurrentVersion')
- val, tok = SCons.Util.RegQueryValueEx(k, 'SystemRoot')
- except KeyboardInterrupt:
- raise
- except:
- pass
- _system_root = val
- return val
-
-# Get the location of the program files directory
-def get_program_files_dir():
- # Now see if we can look in the registry...
- val = ''
- if SCons.Util.can_read_reg:
- try:
- # Look for Windows Program Files directory
- k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
- 'Software\\Microsoft\\Windows\\CurrentVersion')
- val, tok = SCons.Util.RegQueryValueEx(k, 'ProgramFilesDir')
- except SCons.Util.RegError:
- val = ''
- pass
-
- if val == '':
- # A reasonable default if we can't read the registry
- # (Actually, it's pretty reasonable even if we can :-)
- val = os.path.join(os.path.dirname(get_system_root()),"Program Files")
-
- return val
-
-def generate(env):
- # Attempt to find cmd.exe (for WinNT/2k/XP) or
- # command.com for Win9x
- cmd_interp = ''
- # First see if we can look in the registry...
- if SCons.Util.can_read_reg:
- try:
- # Look for Windows NT system root
- k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
- 'Software\\Microsoft\\Windows NT\\CurrentVersion')
- val, tok = SCons.Util.RegQueryValueEx(k, 'SystemRoot')
- cmd_interp = os.path.join(val, 'System32\\cmd.exe')
- except SCons.Util.RegError:
- try:
- # Okay, try the Windows 9x system root
- k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
- 'Software\\Microsoft\\Windows\\CurrentVersion')
- val, tok = SCons.Util.RegQueryValueEx(k, 'SystemRoot')
- cmd_interp = os.path.join(val, 'command.com')
- except KeyboardInterrupt:
- raise
- except:
- pass
-
- # For the special case of not having access to the registry, we
- # use a temporary path and pathext to attempt to find the command
- # interpreter. If we fail, we try to find the interpreter through
- # the env's PATH. The problem with that is that it might not
- # contain an ENV and a PATH.
- if not cmd_interp:
- systemroot = get_system_root()
- tmp_path = systemroot + os.pathsep + \
- os.path.join(systemroot,'System32')
- tmp_pathext = '.com;.exe;.bat;.cmd'
- if os.environ.has_key('PATHEXT'):
- tmp_pathext = os.environ['PATHEXT']
- cmd_interp = SCons.Util.WhereIs('cmd', tmp_path, tmp_pathext)
- if not cmd_interp:
- cmd_interp = SCons.Util.WhereIs('command', tmp_path, tmp_pathext)
-
- if not cmd_interp:
- cmd_interp = env.Detect('cmd')
- if not cmd_interp:
- cmd_interp = env.Detect('command')
-
-
- if not env.has_key('ENV'):
- env['ENV'] = {}
-
- # Import things from the external environment to the construction
- # environment's ENV. This is a potential slippery slope, because we
- # *don't* want to make builds dependent on the user's environment by
- # default. We're doing this for SystemRoot, though, because it's
- # needed for anything that uses sockets, and seldom changes, and
- # for SystemDrive because it's related.
- #
- # Weigh the impact carefully before adding other variables to this list.
- import_env = [ 'SystemDrive', 'SystemRoot', 'TEMP', 'TMP' ]
- for var in import_env:
- v = os.environ.get(var)
- if v:
- env['ENV'][var] = v
-
- if not env['ENV'].has_key('COMSPEC'):
- v = os.environ.get("COMSPEC")
- if v:
- env['ENV']['COMSPEC'] = v
-
- env.AppendENVPath('PATH', get_system_root() + '\System32')
-
- env['ENV']['PATHEXT'] = '.COM;.EXE;.BAT;.CMD'
- env['OBJPREFIX'] = ''
- env['OBJSUFFIX'] = '.obj'
- env['SHOBJPREFIX'] = '$OBJPREFIX'
- env['SHOBJSUFFIX'] = '$OBJSUFFIX'
- env['PROGPREFIX'] = ''
- env['PROGSUFFIX'] = '.exe'
- env['LIBPREFIX'] = ''
- env['LIBSUFFIX'] = '.lib'
- env['SHLIBPREFIX'] = ''
- env['SHLIBSUFFIX'] = '.dll'
- env['LIBPREFIXES'] = [ '$LIBPREFIX' ]
- env['LIBSUFFIXES'] = [ '$LIBSUFFIX' ]
- env['PSPAWN'] = piped_spawn
- env['SPAWN'] = spawn
- env['SHELL'] = cmd_interp
- env['TEMPFILE'] = TempFileMunge
- env['TEMPFILEPREFIX'] = '@'
- env['MAXLINELENGTH'] = 2048
- env['ESCAPE'] = escape
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/SConf.py b/3rdParty/SCons/scons-local/SCons/SConf.py
deleted file mode 100644
index 923247c8..0000000
--- a/3rdParty/SCons/scons-local/SCons/SConf.py
+++ /dev/null
@@ -1,1029 +0,0 @@
-"""SCons.SConf
-
-Autoconf-like configuration support.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/SConf.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import re
-import string
-import StringIO
-import sys
-import traceback
-import types
-
-import SCons.Action
-import SCons.Builder
-import SCons.Errors
-import SCons.Job
-import SCons.Node.FS
-import SCons.Taskmaster
-import SCons.Util
-import SCons.Warnings
-import SCons.Conftest
-
-from SCons.Debug import Trace
-
-# Turn off the Conftest error logging
-SCons.Conftest.LogInputFiles = 0
-SCons.Conftest.LogErrorMessages = 0
-
-# Set
-build_type = None
-build_types = ['clean', 'help']
-
-def SetBuildType(type):
- global build_type
- build_type = type
-
-# to be set, if we are in dry-run mode
-dryrun = 0
-
-AUTO=0 # use SCons dependency scanning for up-to-date checks
-FORCE=1 # force all tests to be rebuilt
-CACHE=2 # force all tests to be taken from cache (raise an error, if necessary)
-cache_mode = AUTO
-
-def SetCacheMode(mode):
- """Set the Configure cache mode. mode must be one of "auto", "force",
- or "cache"."""
- global cache_mode
- if mode == "auto":
- cache_mode = AUTO
- elif mode == "force":
- cache_mode = FORCE
- elif mode == "cache":
- cache_mode = CACHE
- else:
- raise ValueError, "SCons.SConf.SetCacheMode: Unknown mode " + mode
-
-progress_display = SCons.Util.display # will be overwritten by SCons.Script
-def SetProgressDisplay(display):
- """Set the progress display to use (called from SCons.Script)"""
- global progress_display
- progress_display = display
-
-SConfFS = None
-
-_ac_build_counter = 0 # incremented, whenever TryBuild is called
-_ac_config_logs = {} # all config.log files created in this build
-_ac_config_hs = {} # all config.h files created in this build
-sconf_global = None # current sconf object
-
-def _createConfigH(target, source, env):
- t = open(str(target[0]), "w")
- defname = re.sub('[^A-Za-z0-9_]', '_', string.upper(str(target[0])))
- t.write("""#ifndef %(DEFNAME)s_SEEN
-#define %(DEFNAME)s_SEEN
-
-""" % {'DEFNAME' : defname})
- t.write(source[0].get_contents())
- t.write("""
-#endif /* %(DEFNAME)s_SEEN */
-""" % {'DEFNAME' : defname})
- t.close()
-
-def _stringConfigH(target, source, env):
- return "scons: Configure: creating " + str(target[0])
-
-def CreateConfigHBuilder(env):
- """Called just before the building targets phase begins."""
- if len(_ac_config_hs) == 0:
- return
- action = SCons.Action.Action(_createConfigH,
- _stringConfigH)
- sconfigHBld = SCons.Builder.Builder(action=action)
- env.Append( BUILDERS={'SConfigHBuilder':sconfigHBld} )
- for k in _ac_config_hs.keys():
- env.SConfigHBuilder(k, env.Value(_ac_config_hs[k]))
-
-class SConfWarning(SCons.Warnings.Warning):
- pass
-SCons.Warnings.enableWarningClass(SConfWarning)
-
-# some error definitions
-class SConfError(SCons.Errors.UserError):
- def __init__(self,msg):
- SCons.Errors.UserError.__init__(self,msg)
-
-class ConfigureDryRunError(SConfError):
- """Raised when a file or directory needs to be updated during a Configure
- process, but the user requested a dry-run"""
- def __init__(self,target):
- if not isinstance(target, SCons.Node.FS.File):
- msg = 'Cannot create configure directory "%s" within a dry-run.' % str(target)
- else:
- msg = 'Cannot update configure test "%s" within a dry-run.' % str(target)
- SConfError.__init__(self,msg)
-
-class ConfigureCacheError(SConfError):
- """Raised when a use explicitely requested the cache feature, but the test
- is run the first time."""
- def __init__(self,target):
- SConfError.__init__(self, '"%s" is not yet built and cache is forced.' % str(target))
-
-# define actions for building text files
-def _createSource( target, source, env ):
- fd = open(str(target[0]), "w")
- fd.write(source[0].get_contents())
- fd.close()
-def _stringSource( target, source, env ):
- return (str(target[0]) + ' <-\n |' +
- string.replace( source[0].get_contents(),
- '\n', "\n |" ) )
-
-# python 2.2 introduces types.BooleanType
-BooleanTypes = [types.IntType]
-if hasattr(types, 'BooleanType'): BooleanTypes.append(types.BooleanType)
-
-class SConfBuildInfo(SCons.Node.FS.FileBuildInfo):
- """
- Special build info for targets of configure tests. Additional members
- are result (did the builder succeed last time?) and string, which
- contains messages of the original build phase.
- """
- result = None # -> 0/None -> no error, != 0 error
- string = None # the stdout / stderr output when building the target
-
- def set_build_result(self, result, string):
- self.result = result
- self.string = string
-
-
-class Streamer:
- """
- 'Sniffer' for a file-like writable object. Similar to the unix tool tee.
- """
- def __init__(self, orig):
- self.orig = orig
- self.s = StringIO.StringIO()
-
- def write(self, str):
- if self.orig:
- self.orig.write(str)
- self.s.write(str)
-
- def writelines(self, lines):
- for l in lines:
- self.write(l + '\n')
-
- def getvalue(self):
- """
- Return everything written to orig since the Streamer was created.
- """
- return self.s.getvalue()
-
- def flush(self):
- if self.orig:
- self.orig.flush()
- self.s.flush()
-
-
-class SConfBuildTask(SCons.Taskmaster.AlwaysTask):
- """
- This is almost the same as SCons.Script.BuildTask. Handles SConfErrors
- correctly and knows about the current cache_mode.
- """
- def display(self, message):
- if sconf_global.logstream:
- sconf_global.logstream.write("scons: Configure: " + message + "\n")
-
- def display_cached_string(self, bi):
- """
- Logs the original builder messages, given the SConfBuildInfo instance
- bi.
- """
- if not isinstance(bi, SConfBuildInfo):
- SCons.Warnings.warn(SConfWarning,
- "The stored build information has an unexpected class: %s" % bi.__class__)
- else:
- self.display("The original builder output was:\n" +
- string.replace(" |" + str(bi.string),
- "\n", "\n |"))
-
- def failed(self):
- # check, if the reason was a ConfigureDryRunError or a
- # ConfigureCacheError and if yes, reraise the exception
- exc_type = self.exc_info()[0]
- if issubclass(exc_type, SConfError):
- raise
- elif issubclass(exc_type, SCons.Errors.BuildError):
- # we ignore Build Errors (occurs, when a test doesn't pass)
- # Clear the exception to prevent the contained traceback
- # to build a reference cycle.
- self.exc_clear()
- else:
- self.display('Caught exception while building "%s":\n' %
- self.targets[0])
- try:
- excepthook = sys.excepthook
- except AttributeError:
- # Earlier versions of Python don't have sys.excepthook...
- def excepthook(type, value, tb):
- traceback.print_tb(tb)
- print type, value
- apply(excepthook, self.exc_info())
- return SCons.Taskmaster.Task.failed(self)
-
- def collect_node_states(self):
- # returns (is_up_to_date, cached_error, cachable)
- # where is_up_to_date is 1, if the node(s) are up_to_date
- # cached_error is 1, if the node(s) are up_to_date, but the
- # build will fail
- # cachable is 0, if some nodes are not in our cache
- T = 0
- changed = False
- cached_error = False
- cachable = True
- for t in self.targets:
- if T: Trace('%s' % (t))
- bi = t.get_stored_info().binfo
- if isinstance(bi, SConfBuildInfo):
- if T: Trace(': SConfBuildInfo')
- if cache_mode == CACHE:
- t.set_state(SCons.Node.up_to_date)
- if T: Trace(': set_state(up_to-date)')
- else:
- if T: Trace(': get_state() %s' % t.get_state())
- if T: Trace(': changed() %s' % t.changed())
- if (t.get_state() != SCons.Node.up_to_date and t.changed()):
- changed = True
- if T: Trace(': changed %s' % changed)
- cached_error = cached_error or bi.result
- else:
- if T: Trace(': else')
- # the node hasn't been built in a SConf context or doesn't
- # exist
- cachable = False
- changed = ( t.get_state() != SCons.Node.up_to_date )
- if T: Trace(': changed %s' % changed)
- if T: Trace('\n')
- return (not changed, cached_error, cachable)
-
- def execute(self):
- if not self.targets[0].has_builder():
- return
-
- sconf = sconf_global
-
- is_up_to_date, cached_error, cachable = self.collect_node_states()
-
- if cache_mode == CACHE and not cachable:
- raise ConfigureCacheError(self.targets[0])
- elif cache_mode == FORCE:
- is_up_to_date = 0
-
- if cached_error and is_up_to_date:
- self.display("Building \"%s\" failed in a previous run and all "
- "its sources are up to date." % str(self.targets[0]))
- binfo = self.targets[0].get_stored_info().binfo
- self.display_cached_string(binfo)
- raise SCons.Errors.BuildError # will be 'caught' in self.failed
- elif is_up_to_date:
- self.display("\"%s\" is up to date." % str(self.targets[0]))
- binfo = self.targets[0].get_stored_info().binfo
- self.display_cached_string(binfo)
- elif dryrun:
- raise ConfigureDryRunError(self.targets[0])
- else:
- # note stdout and stderr are the same here
- s = sys.stdout = sys.stderr = Streamer(sys.stdout)
- try:
- env = self.targets[0].get_build_env()
- if cache_mode == FORCE:
- # Set up the Decider() to force rebuilds by saying
- # that every source has changed. Note that we still
- # call the environment's underlying source decider so
- # that the correct .sconsign info will get calculated
- # and keep the build state consistent.
- def force_build(dependency, target, prev_ni,
- env_decider=env.decide_source):
- env_decider(dependency, target, prev_ni)
- return True
- env.Decider(force_build)
- env['PSTDOUT'] = env['PSTDERR'] = s
- try:
- sconf.cached = 0
- self.targets[0].build()
- finally:
- sys.stdout = sys.stderr = env['PSTDOUT'] = \
- env['PSTDERR'] = sconf.logstream
- except KeyboardInterrupt:
- raise
- except SystemExit:
- exc_value = sys.exc_info()[1]
- raise SCons.Errors.ExplicitExit(self.targets[0],exc_value.code)
- except Exception, e:
- for t in self.targets:
- binfo = t.get_binfo()
- binfo.__class__ = SConfBuildInfo
- binfo.set_build_result(1, s.getvalue())
- sconsign_entry = SCons.SConsign.SConsignEntry()
- sconsign_entry.binfo = binfo
- #sconsign_entry.ninfo = self.get_ninfo()
- # We'd like to do this as follows:
- # t.store_info(binfo)
- # However, we need to store it as an SConfBuildInfo
- # object, and store_info() will turn it into a
- # regular FileNodeInfo if the target is itself a
- # regular File.
- sconsign = t.dir.sconsign()
- sconsign.set_entry(t.name, sconsign_entry)
- sconsign.merge()
- raise e
- else:
- for t in self.targets:
- binfo = t.get_binfo()
- binfo.__class__ = SConfBuildInfo
- binfo.set_build_result(0, s.getvalue())
- sconsign_entry = SCons.SConsign.SConsignEntry()
- sconsign_entry.binfo = binfo
- #sconsign_entry.ninfo = self.get_ninfo()
- # We'd like to do this as follows:
- # t.store_info(binfo)
- # However, we need to store it as an SConfBuildInfo
- # object, and store_info() will turn it into a
- # regular FileNodeInfo if the target is itself a
- # regular File.
- sconsign = t.dir.sconsign()
- sconsign.set_entry(t.name, sconsign_entry)
- sconsign.merge()
-
-class SConfBase:
- """This is simply a class to represent a configure context. After
- creating a SConf object, you can call any tests. After finished with your
- tests, be sure to call the Finish() method, which returns the modified
- environment.
- Some words about caching: In most cases, it is not necessary to cache
- Test results explicitely. Instead, we use the scons dependency checking
- mechanism. For example, if one wants to compile a test program
- (SConf.TryLink), the compiler is only called, if the program dependencies
- have changed. However, if the program could not be compiled in a former
- SConf run, we need to explicitely cache this error.
- """
-
- def __init__(self, env, custom_tests = {}, conf_dir='$CONFIGUREDIR',
- log_file='$CONFIGURELOG', config_h = None, _depth = 0):
- """Constructor. Pass additional tests in the custom_tests-dictinary,
- e.g. custom_tests={'CheckPrivate':MyPrivateTest}, where MyPrivateTest
- defines a custom test.
- Note also the conf_dir and log_file arguments (you may want to
- build tests in the VariantDir, not in the SourceDir)
- """
- global SConfFS
- if not SConfFS:
- SConfFS = SCons.Node.FS.default_fs or \
- SCons.Node.FS.FS(env.fs.pathTop)
- if not sconf_global is None:
- raise (SCons.Errors.UserError,
- "Only one SConf object may be active at one time")
- self.env = env
- if log_file != None:
- log_file = SConfFS.File(env.subst(log_file))
- self.logfile = log_file
- self.logstream = None
- self.lastTarget = None
- self.depth = _depth
- self.cached = 0 # will be set, if all test results are cached
-
- # add default tests
- default_tests = {
- 'CheckCC' : CheckCC,
- 'CheckCXX' : CheckCXX,
- 'CheckSHCC' : CheckSHCC,
- 'CheckSHCXX' : CheckSHCXX,
- 'CheckFunc' : CheckFunc,
- 'CheckType' : CheckType,
- 'CheckTypeSize' : CheckTypeSize,
- 'CheckDeclaration' : CheckDeclaration,
- 'CheckHeader' : CheckHeader,
- 'CheckCHeader' : CheckCHeader,
- 'CheckCXXHeader' : CheckCXXHeader,
- 'CheckLib' : CheckLib,
- 'CheckLibWithHeader' : CheckLibWithHeader,
- }
- self.AddTests(default_tests)
- self.AddTests(custom_tests)
- self.confdir = SConfFS.Dir(env.subst(conf_dir))
- if not config_h is None:
- config_h = SConfFS.File(config_h)
- self.config_h = config_h
- self._startup()
-
- def Finish(self):
- """Call this method after finished with your tests:
- env = sconf.Finish()
- """
- self._shutdown()
- return self.env
-
- def Define(self, name, value = None, comment = None):
- """
- Define a pre processor symbol name, with the optional given value in the
- current config header.
-
- If value is None (default), then #define name is written. If value is not
- none, then #define name value is written.
-
- comment is a string which will be put as a C comment in the
- header, to explain the meaning of the value (appropriate C comments /* and
- */ will be put automatically."""
- lines = []
- if comment:
- comment_str = "/* %s */" % comment
- lines.append(comment_str)
-
- if value is not None:
- define_str = "#define %s %s" % (name, value)
- else:
- define_str = "#define %s" % name
- lines.append(define_str)
- lines.append('')
-
- self.config_h_text = self.config_h_text + string.join(lines, '\n')
-
- def BuildNodes(self, nodes):
- """
- Tries to build the given nodes immediately. Returns 1 on success,
- 0 on error.
- """
- if self.logstream != None:
- # override stdout / stderr to write in log file
- oldStdout = sys.stdout
- sys.stdout = self.logstream
- oldStderr = sys.stderr
- sys.stderr = self.logstream
-
- # the engine assumes the current path is the SConstruct directory ...
- old_fs_dir = SConfFS.getcwd()
- old_os_dir = os.getcwd()
- SConfFS.chdir(SConfFS.Top, change_os_dir=1)
-
- # Because we take responsibility here for writing out our
- # own .sconsign info (see SConfBuildTask.execute(), above),
- # we override the store_info() method with a null place-holder
- # so we really control how it gets written.
- for n in nodes:
- n.store_info = n.do_not_store_info
-
- ret = 1
-
- try:
- # ToDo: use user options for calc
- save_max_drift = SConfFS.get_max_drift()
- SConfFS.set_max_drift(0)
- tm = SCons.Taskmaster.Taskmaster(nodes, SConfBuildTask)
- # we don't want to build tests in parallel
- jobs = SCons.Job.Jobs(1, tm )
- jobs.run()
- for n in nodes:
- state = n.get_state()
- if (state != SCons.Node.executed and
- state != SCons.Node.up_to_date):
- # the node could not be built. we return 0 in this case
- ret = 0
- finally:
- SConfFS.set_max_drift(save_max_drift)
- os.chdir(old_os_dir)
- SConfFS.chdir(old_fs_dir, change_os_dir=0)
- if self.logstream != None:
- # restore stdout / stderr
- sys.stdout = oldStdout
- sys.stderr = oldStderr
- return ret
-
- def pspawn_wrapper(self, sh, escape, cmd, args, env):
- """Wrapper function for handling piped spawns.
-
- This looks to the calling interface (in Action.py) like a "normal"
- spawn, but associates the call with the PSPAWN variable from
- the construction environment and with the streams to which we
- want the output logged. This gets slid into the construction
- environment as the SPAWN variable so Action.py doesn't have to
- know or care whether it's spawning a piped command or not.
- """
- return self.pspawn(sh, escape, cmd, args, env, self.logstream, self.logstream)
-
-
- def TryBuild(self, builder, text = None, extension = ""):
- """Low level TryBuild implementation. Normally you don't need to
- call that - you can use TryCompile / TryLink / TryRun instead
- """
- global _ac_build_counter
-
- # Make sure we have a PSPAWN value, and save the current
- # SPAWN value.
- try:
- self.pspawn = self.env['PSPAWN']
- except KeyError:
- raise SCons.Errors.UserError('Missing PSPAWN construction variable.')
- try:
- save_spawn = self.env['SPAWN']
- except KeyError:
- raise SCons.Errors.UserError('Missing SPAWN construction variable.')
-
- nodesToBeBuilt = []
-
- f = "conftest_" + str(_ac_build_counter)
- pref = self.env.subst( builder.builder.prefix )
- suff = self.env.subst( builder.builder.suffix )
- target = self.confdir.File(pref + f + suff)
-
- try:
- # Slide our wrapper into the construction environment as
- # the SPAWN function.
- self.env['SPAWN'] = self.pspawn_wrapper
- sourcetext = self.env.Value(text)
-
- if text != None:
- textFile = self.confdir.File(f + extension)
- textFileNode = self.env.SConfSourceBuilder(target=textFile,
- source=sourcetext)
- nodesToBeBuilt.extend(textFileNode)
- source = textFileNode
- else:
- source = None
-
- nodes = builder(target = target, source = source)
- if not SCons.Util.is_List(nodes):
- nodes = [nodes]
- nodesToBeBuilt.extend(nodes)
- result = self.BuildNodes(nodesToBeBuilt)
-
- finally:
- self.env['SPAWN'] = save_spawn
-
- _ac_build_counter = _ac_build_counter + 1
- if result:
- self.lastTarget = nodes[0]
- else:
- self.lastTarget = None
-
- return result
-
- def TryAction(self, action, text = None, extension = ""):
- """Tries to execute the given action with optional source file
- contents <text> and optional source file extension <extension>,
- Returns the status (0 : failed, 1 : ok) and the contents of the
- output file.
- """
- builder = SCons.Builder.Builder(action=action)
- self.env.Append( BUILDERS = {'SConfActionBuilder' : builder} )
- ok = self.TryBuild(self.env.SConfActionBuilder, text, extension)
- del self.env['BUILDERS']['SConfActionBuilder']
- if ok:
- outputStr = self.lastTarget.get_contents()
- return (1, outputStr)
- return (0, "")
-
- def TryCompile( self, text, extension):
- """Compiles the program given in text to an env.Object, using extension
- as file extension (e.g. '.c'). Returns 1, if compilation was
- successful, 0 otherwise. The target is saved in self.lastTarget (for
- further processing).
- """
- return self.TryBuild(self.env.Object, text, extension)
-
- def TryLink( self, text, extension ):
- """Compiles the program given in text to an executable env.Program,
- using extension as file extension (e.g. '.c'). Returns 1, if
- compilation was successful, 0 otherwise. The target is saved in
- self.lastTarget (for further processing).
- """
- return self.TryBuild(self.env.Program, text, extension )
-
- def TryRun(self, text, extension ):
- """Compiles and runs the program given in text, using extension
- as file extension (e.g. '.c'). Returns (1, outputStr) on success,
- (0, '') otherwise. The target (a file containing the program's stdout)
- is saved in self.lastTarget (for further processing).
- """
- ok = self.TryLink(text, extension)
- if( ok ):
- prog = self.lastTarget
- pname = str(prog)
- output = SConfFS.File(pname+'.out')
- node = self.env.Command(output, prog, [ [ pname, ">", "${TARGET}"] ])
- ok = self.BuildNodes(node)
- if ok:
- outputStr = output.get_contents()
- return( 1, outputStr)
- return (0, "")
-
- class TestWrapper:
- """A wrapper around Tests (to ensure sanity)"""
- def __init__(self, test, sconf):
- self.test = test
- self.sconf = sconf
- def __call__(self, *args, **kw):
- if not self.sconf.active:
- raise (SCons.Errors.UserError,
- "Test called after sconf.Finish()")
- context = CheckContext(self.sconf)
- ret = apply(self.test, (context,) + args, kw)
- if not self.sconf.config_h is None:
- self.sconf.config_h_text = self.sconf.config_h_text + context.config_h
- context.Result("error: no result")
- return ret
-
- def AddTest(self, test_name, test_instance):
- """Adds test_class to this SConf instance. It can be called with
- self.test_name(...)"""
- setattr(self, test_name, SConfBase.TestWrapper(test_instance, self))
-
- def AddTests(self, tests):
- """Adds all the tests given in the tests dictionary to this SConf
- instance
- """
- for name in tests.keys():
- self.AddTest(name, tests[name])
-
- def _createDir( self, node ):
- dirName = str(node)
- if dryrun:
- if not os.path.isdir( dirName ):
- raise ConfigureDryRunError(dirName)
- else:
- if not os.path.isdir( dirName ):
- os.makedirs( dirName )
- node._exists = 1
-
- def _startup(self):
- """Private method. Set up logstream, and set the environment
- variables necessary for a piped build
- """
- global _ac_config_logs
- global sconf_global
- global SConfFS
-
- self.lastEnvFs = self.env.fs
- self.env.fs = SConfFS
- self._createDir(self.confdir)
- self.confdir.up().add_ignore( [self.confdir] )
-
- if self.logfile != None and not dryrun:
- # truncate logfile, if SConf.Configure is called for the first time
- # in a build
- if _ac_config_logs.has_key(self.logfile):
- log_mode = "a"
- else:
- _ac_config_logs[self.logfile] = None
- log_mode = "w"
- fp = open(str(self.logfile), log_mode)
- self.logstream = SCons.Util.Unbuffered(fp)
- # logfile may stay in a build directory, so we tell
- # the build system not to override it with a eventually
- # existing file with the same name in the source directory
- self.logfile.dir.add_ignore( [self.logfile] )
-
- tb = traceback.extract_stack()[-3-self.depth]
- old_fs_dir = SConfFS.getcwd()
- SConfFS.chdir(SConfFS.Top, change_os_dir=0)
- self.logstream.write('file %s,line %d:\n\tConfigure(confdir = %s)\n' %
- (tb[0], tb[1], str(self.confdir)) )
- SConfFS.chdir(old_fs_dir)
- else:
- self.logstream = None
- # we use a special builder to create source files from TEXT
- action = SCons.Action.Action(_createSource,
- _stringSource)
- sconfSrcBld = SCons.Builder.Builder(action=action)
- self.env.Append( BUILDERS={'SConfSourceBuilder':sconfSrcBld} )
- self.config_h_text = _ac_config_hs.get(self.config_h, "")
- self.active = 1
- # only one SConf instance should be active at a time ...
- sconf_global = self
-
- def _shutdown(self):
- """Private method. Reset to non-piped spawn"""
- global sconf_global, _ac_config_hs
-
- if not self.active:
- raise SCons.Errors.UserError, "Finish may be called only once!"
- if self.logstream != None and not dryrun:
- self.logstream.write("\n")
- self.logstream.close()
- self.logstream = None
- # remove the SConfSourceBuilder from the environment
- blds = self.env['BUILDERS']
- del blds['SConfSourceBuilder']
- self.env.Replace( BUILDERS=blds )
- self.active = 0
- sconf_global = None
- if not self.config_h is None:
- _ac_config_hs[self.config_h] = self.config_h_text
- self.env.fs = self.lastEnvFs
-
-class CheckContext:
- """Provides a context for configure tests. Defines how a test writes to the
- screen and log file.
-
- A typical test is just a callable with an instance of CheckContext as
- first argument:
-
- def CheckCustom(context, ...)
- context.Message('Checking my weird test ... ')
- ret = myWeirdTestFunction(...)
- context.Result(ret)
-
- Often, myWeirdTestFunction will be one of
- context.TryCompile/context.TryLink/context.TryRun. The results of
- those are cached, for they are only rebuild, if the dependencies have
- changed.
- """
-
- def __init__(self, sconf):
- """Constructor. Pass the corresponding SConf instance."""
- self.sconf = sconf
- self.did_show_result = 0
-
- # for Conftest.py:
- self.vardict = {}
- self.havedict = {}
- self.headerfilename = None
- self.config_h = "" # config_h text will be stored here
- # we don't regenerate the config.h file after each test. That means,
- # that tests won't be able to include the config.h file, and so
- # they can't do an #ifdef HAVE_XXX_H. This shouldn't be a major
- # issue, though. If it turns out, that we need to include config.h
- # in tests, we must ensure, that the dependencies are worked out
- # correctly. Note that we can't use Conftest.py's support for config.h,
- # cause we will need to specify a builder for the config.h file ...
-
- def Message(self, text):
- """Inform about what we are doing right now, e.g.
- 'Checking for SOMETHING ... '
- """
- self.Display(text)
- self.sconf.cached = 1
- self.did_show_result = 0
-
- def Result(self, res):
- """Inform about the result of the test. res may be an integer or a
- string. In case of an integer, the written text will be 'ok' or
- 'failed'.
- The result is only displayed when self.did_show_result is not set.
- """
- if type(res) in BooleanTypes:
- if res:
- text = "yes"
- else:
- text = "no"
- elif type(res) == types.StringType:
- text = res
- else:
- raise TypeError, "Expected string, int or bool, got " + str(type(res))
-
- if self.did_show_result == 0:
- # Didn't show result yet, do it now.
- self.Display(text + "\n")
- self.did_show_result = 1
-
- def TryBuild(self, *args, **kw):
- return apply(self.sconf.TryBuild, args, kw)
-
- def TryAction(self, *args, **kw):
- return apply(self.sconf.TryAction, args, kw)
-
- def TryCompile(self, *args, **kw):
- return apply(self.sconf.TryCompile, args, kw)
-
- def TryLink(self, *args, **kw):
- return apply(self.sconf.TryLink, args, kw)
-
- def TryRun(self, *args, **kw):
- return apply(self.sconf.TryRun, args, kw)
-
- def __getattr__( self, attr ):
- if( attr == 'env' ):
- return self.sconf.env
- elif( attr == 'lastTarget' ):
- return self.sconf.lastTarget
- else:
- raise AttributeError, "CheckContext instance has no attribute '%s'" % attr
-
- #### Stuff used by Conftest.py (look there for explanations).
-
- def BuildProg(self, text, ext):
- self.sconf.cached = 1
- # TODO: should use self.vardict for $CC, $CPPFLAGS, etc.
- return not self.TryBuild(self.env.Program, text, ext)
-
- def CompileProg(self, text, ext):
- self.sconf.cached = 1
- # TODO: should use self.vardict for $CC, $CPPFLAGS, etc.
- return not self.TryBuild(self.env.Object, text, ext)
-
- def CompileSharedObject(self, text, ext):
- self.sconf.cached = 1
- # TODO: should use self.vardict for $SHCC, $CPPFLAGS, etc.
- return not self.TryBuild(self.env.SharedObject, text, ext)
-
- def RunProg(self, text, ext):
- self.sconf.cached = 1
- # TODO: should use self.vardict for $CC, $CPPFLAGS, etc.
- st, out = self.TryRun(text, ext)
- return not st, out
-
- def AppendLIBS(self, lib_name_list):
- oldLIBS = self.env.get( 'LIBS', [] )
- self.env.Append(LIBS = lib_name_list)
- return oldLIBS
-
- def SetLIBS(self, val):
- oldLIBS = self.env.get( 'LIBS', [] )
- self.env.Replace(LIBS = val)
- return oldLIBS
-
- def Display(self, msg):
- if self.sconf.cached:
- # We assume that Display is called twice for each test here
- # once for the Checking for ... message and once for the result.
- # The self.sconf.cached flag can only be set between those calls
- msg = "(cached) " + msg
- self.sconf.cached = 0
- progress_display(msg, append_newline=0)
- self.Log("scons: Configure: " + msg + "\n")
-
- def Log(self, msg):
- if self.sconf.logstream != None:
- self.sconf.logstream.write(msg)
-
- #### End of stuff used by Conftest.py.
-
-
-def SConf(*args, **kw):
- if kw.get(build_type, True):
- kw['_depth'] = kw.get('_depth', 0) + 1
- for bt in build_types:
- try:
- del kw[bt]
- except KeyError:
- pass
- return apply(SConfBase, args, kw)
- else:
- return SCons.Util.Null()
-
-
-def CheckFunc(context, function_name, header = None, language = None):
- res = SCons.Conftest.CheckFunc(context, function_name, header = header, language = language)
- context.did_show_result = 1
- return not res
-
-def CheckType(context, type_name, includes = "", language = None):
- res = SCons.Conftest.CheckType(context, type_name,
- header = includes, language = language)
- context.did_show_result = 1
- return not res
-
-def CheckTypeSize(context, type_name, includes = "", language = None, expect = None):
- res = SCons.Conftest.CheckTypeSize(context, type_name,
- header = includes, language = language,
- expect = expect)
- context.did_show_result = 1
- return res
-
-def CheckDeclaration(context, declaration, includes = "", language = None):
- res = SCons.Conftest.CheckDeclaration(context, declaration,
- includes = includes,
- language = language)
- context.did_show_result = 1
- return not res
-
-def createIncludesFromHeaders(headers, leaveLast, include_quotes = '""'):
- # used by CheckHeader and CheckLibWithHeader to produce C - #include
- # statements from the specified header (list)
- if not SCons.Util.is_List(headers):
- headers = [headers]
- l = []
- if leaveLast:
- lastHeader = headers[-1]
- headers = headers[:-1]
- else:
- lastHeader = None
- for s in headers:
- l.append("#include %s%s%s\n"
- % (include_quotes[0], s, include_quotes[1]))
- return string.join(l, ''), lastHeader
-
-def CheckHeader(context, header, include_quotes = '<>', language = None):
- """
- A test for a C or C++ header file.
- """
- prog_prefix, hdr_to_check = \
- createIncludesFromHeaders(header, 1, include_quotes)
- res = SCons.Conftest.CheckHeader(context, hdr_to_check, prog_prefix,
- language = language,
- include_quotes = include_quotes)
- context.did_show_result = 1
- return not res
-
-def CheckCC(context):
- res = SCons.Conftest.CheckCC(context)
- return not res
-
-def CheckCXX(context):
- res = SCons.Conftest.CheckCXX(context)
- return not res
-
-def CheckSHCC(context):
- res = SCons.Conftest.CheckSHCC(context)
- return not res
-
-def CheckSHCXX(context):
- res = SCons.Conftest.CheckSHCXX(context)
- return not res
-
-# Bram: Make this function obsolete? CheckHeader() is more generic.
-
-def CheckCHeader(context, header, include_quotes = '""'):
- """
- A test for a C header file.
- """
- return CheckHeader(context, header, include_quotes, language = "C")
-
-
-# Bram: Make this function obsolete? CheckHeader() is more generic.
-
-def CheckCXXHeader(context, header, include_quotes = '""'):
- """
- A test for a C++ header file.
- """
- return CheckHeader(context, header, include_quotes, language = "C++")
-
-
-def CheckLib(context, library = None, symbol = "main",
- header = None, language = None, autoadd = 1):
- """
- A test for a library. See also CheckLibWithHeader.
- Note that library may also be None to test whether the given symbol
- compiles without flags.
- """
-
- if library == []:
- library = [None]
-
- if not SCons.Util.is_List(library):
- library = [library]
-
- # ToDo: accept path for the library
- res = SCons.Conftest.CheckLib(context, library, symbol, header = header,
- language = language, autoadd = autoadd)
- context.did_show_result = 1
- return not res
-
-# XXX
-# Bram: Can only include one header and can't use #ifdef HAVE_HEADER_H.
-
-def CheckLibWithHeader(context, libs, header, language,
- call = None, autoadd = 1):
- # ToDo: accept path for library. Support system header files.
- """
- Another (more sophisticated) test for a library.
- Checks, if library and header is available for language (may be 'C'
- or 'CXX'). Call maybe be a valid expression _with_ a trailing ';'.
- As in CheckLib, we support library=None, to test if the call compiles
- without extra link flags.
- """
- prog_prefix, dummy = \
- createIncludesFromHeaders(header, 0)
- if libs == []:
- libs = [None]
-
- if not SCons.Util.is_List(libs):
- libs = [libs]
-
- res = SCons.Conftest.CheckLib(context, libs, None, prog_prefix,
- call = call, language = language, autoadd = autoadd)
- context.did_show_result = 1
- return not res
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/SConsign.py b/3rdParty/SCons/scons-local/SCons/SConsign.py
deleted file mode 100644
index d7a8ab2..0000000
--- a/3rdParty/SCons/scons-local/SCons/SConsign.py
+++ /dev/null
@@ -1,381 +0,0 @@
-"""SCons.SConsign
-
-Writing and reading information to the .sconsign file or files.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/SConsign.py 4043 2009/02/23 09:06:45 scons"
-
-import cPickle
-import os
-import os.path
-
-import SCons.dblite
-import SCons.Warnings
-
-def corrupt_dblite_warning(filename):
- SCons.Warnings.warn(SCons.Warnings.CorruptSConsignWarning,
- "Ignoring corrupt .sconsign file: %s"%filename)
-
-SCons.dblite.ignore_corrupt_dbfiles = 1
-SCons.dblite.corruption_warning = corrupt_dblite_warning
-
-#XXX Get rid of the global array so this becomes re-entrant.
-sig_files = []
-
-# Info for the database SConsign implementation (now the default):
-# "DataBase" is a dictionary that maps top-level SConstruct directories
-# to open database handles.
-# "DB_Module" is the Python database module to create the handles.
-# "DB_Name" is the base name of the database file (minus any
-# extension the underlying DB module will add).
-DataBase = {}
-DB_Module = SCons.dblite
-DB_Name = ".sconsign"
-DB_sync_list = []
-
-def Get_DataBase(dir):
- global DataBase, DB_Module, DB_Name
- top = dir.fs.Top
- if not os.path.isabs(DB_Name) and top.repositories:
- mode = "c"
- for d in [top] + top.repositories:
- if dir.is_under(d):
- try:
- return DataBase[d], mode
- except KeyError:
- path = d.entry_abspath(DB_Name)
- try: db = DataBase[d] = DB_Module.open(path, mode)
- except (IOError, OSError): pass
- else:
- if mode != "r":
- DB_sync_list.append(db)
- return db, mode
- mode = "r"
- try:
- return DataBase[top], "c"
- except KeyError:
- db = DataBase[top] = DB_Module.open(DB_Name, "c")
- DB_sync_list.append(db)
- return db, "c"
- except TypeError:
- print "DataBase =", DataBase
- raise
-
-def Reset():
- """Reset global state. Used by unit tests that end up using
- SConsign multiple times to get a clean slate for each test."""
- global sig_files, DB_sync_list
- sig_files = []
- DB_sync_list = []
-
-normcase = os.path.normcase
-
-def write():
- global sig_files
- for sig_file in sig_files:
- sig_file.write(sync=0)
- for db in DB_sync_list:
- try:
- syncmethod = db.sync
- except AttributeError:
- pass # Not all anydbm modules have sync() methods.
- else:
- syncmethod()
-
-class SConsignEntry:
- """
- Wrapper class for the generic entry in a .sconsign file.
- The Node subclass populates it with attributes as it pleases.
-
- XXX As coded below, we do expect a '.binfo' attribute to be added,
- but we'll probably generalize this in the next refactorings.
- """
- current_version_id = 1
- def __init__(self):
- # Create an object attribute from the class attribute so it ends up
- # in the pickled data in the .sconsign file.
- _version_id = self.current_version_id
- def convert_to_sconsign(self):
- self.binfo.convert_to_sconsign()
- def convert_from_sconsign(self, dir, name):
- self.binfo.convert_from_sconsign(dir, name)
-
-class Base:
- """
- This is the controlling class for the signatures for the collection of
- entries associated with a specific directory. The actual directory
- association will be maintained by a subclass that is specific to
- the underlying storage method. This class provides a common set of
- methods for fetching and storing the individual bits of information
- that make up signature entry.
- """
- def __init__(self):
- self.entries = {}
- self.dirty = False
- self.to_be_merged = {}
-
- def get_entry(self, filename):
- """
- Fetch the specified entry attribute.
- """
- return self.entries[filename]
-
- def set_entry(self, filename, obj):
- """
- Set the entry.
- """
- self.entries[filename] = obj
- self.dirty = True
-
- def do_not_set_entry(self, filename, obj):
- pass
-
- def store_info(self, filename, node):
- entry = node.get_stored_info()
- entry.binfo.merge(node.get_binfo())
- self.to_be_merged[filename] = node
- self.dirty = True
-
- def do_not_store_info(self, filename, node):
- pass
-
- def merge(self):
- for key, node in self.to_be_merged.items():
- entry = node.get_stored_info()
- try:
- ninfo = entry.ninfo
- except AttributeError:
- # This happens with SConf Nodes, because the configuration
- # subsystem takes direct control over how the build decision
- # is made and its information stored.
- pass
- else:
- ninfo.merge(node.get_ninfo())
- self.entries[key] = entry
- self.to_be_merged = {}
-
-class DB(Base):
- """
- A Base subclass that reads and writes signature information
- from a global .sconsign.db* file--the actual file suffix is
- determined by the database module.
- """
- def __init__(self, dir):
- Base.__init__(self)
-
- self.dir = dir
-
- db, mode = Get_DataBase(dir)
-
- # Read using the path relative to the top of the Repository
- # (self.dir.tpath) from which we're fetching the signature
- # information.
- path = normcase(dir.tpath)
- try:
- rawentries = db[path]
- except KeyError:
- pass
- else:
- try:
- self.entries = cPickle.loads(rawentries)
- if type(self.entries) is not type({}):
- self.entries = {}
- raise TypeError
- except KeyboardInterrupt:
- raise
- except Exception, e:
- SCons.Warnings.warn(SCons.Warnings.CorruptSConsignWarning,
- "Ignoring corrupt sconsign entry : %s (%s)\n"%(self.dir.tpath, e))
- for key, entry in self.entries.items():
- entry.convert_from_sconsign(dir, key)
-
- if mode == "r":
- # This directory is actually under a repository, which means
- # likely they're reaching in directly for a dependency on
- # a file there. Don't actually set any entry info, so we
- # won't try to write to that .sconsign.dblite file.
- self.set_entry = self.do_not_set_entry
- self.store_info = self.do_not_store_info
-
- global sig_files
- sig_files.append(self)
-
- def write(self, sync=1):
- if not self.dirty:
- return
-
- self.merge()
-
- db, mode = Get_DataBase(self.dir)
-
- # Write using the path relative to the top of the SConstruct
- # directory (self.dir.path), not relative to the top of
- # the Repository; we only write to our own .sconsign file,
- # not to .sconsign files in Repositories.
- path = normcase(self.dir.path)
- for key, entry in self.entries.items():
- entry.convert_to_sconsign()
- db[path] = cPickle.dumps(self.entries, 1)
-
- if sync:
- try:
- syncmethod = db.sync
- except AttributeError:
- # Not all anydbm modules have sync() methods.
- pass
- else:
- syncmethod()
-
-class Dir(Base):
- def __init__(self, fp=None, dir=None):
- """
- fp - file pointer to read entries from
- """
- Base.__init__(self)
-
- if not fp:
- return
-
- self.entries = cPickle.load(fp)
- if type(self.entries) is not type({}):
- self.entries = {}
- raise TypeError
-
- if dir:
- for key, entry in self.entries.items():
- entry.convert_from_sconsign(dir, key)
-
-class DirFile(Dir):
- """
- Encapsulates reading and writing a per-directory .sconsign file.
- """
- def __init__(self, dir):
- """
- dir - the directory for the file
- """
-
- self.dir = dir
- self.sconsign = os.path.join(dir.path, '.sconsign')
-
- try:
- fp = open(self.sconsign, 'rb')
- except IOError:
- fp = None
-
- try:
- Dir.__init__(self, fp, dir)
- except KeyboardInterrupt:
- raise
- except:
- SCons.Warnings.warn(SCons.Warnings.CorruptSConsignWarning,
- "Ignoring corrupt .sconsign file: %s"%self.sconsign)
-
- global sig_files
- sig_files.append(self)
-
- def write(self, sync=1):
- """
- Write the .sconsign file to disk.
-
- Try to write to a temporary file first, and rename it if we
- succeed. If we can't write to the temporary file, it's
- probably because the directory isn't writable (and if so,
- how did we build anything in this directory, anyway?), so
- try to write directly to the .sconsign file as a backup.
- If we can't rename, try to copy the temporary contents back
- to the .sconsign file. Either way, always try to remove
- the temporary file at the end.
- """
- if not self.dirty:
- return
-
- self.merge()
-
- temp = os.path.join(self.dir.path, '.scons%d' % os.getpid())
- try:
- file = open(temp, 'wb')
- fname = temp
- except IOError:
- try:
- file = open(self.sconsign, 'wb')
- fname = self.sconsign
- except IOError:
- return
- for key, entry in self.entries.items():
- entry.convert_to_sconsign()
- cPickle.dump(self.entries, file, 1)
- file.close()
- if fname != self.sconsign:
- try:
- mode = os.stat(self.sconsign)[0]
- os.chmod(self.sconsign, 0666)
- os.unlink(self.sconsign)
- except (IOError, OSError):
- # Try to carry on in the face of either OSError
- # (things like permission issues) or IOError (disk
- # or network issues). If there's a really dangerous
- # issue, it should get re-raised by the calls below.
- pass
- try:
- os.rename(fname, self.sconsign)
- except OSError:
- # An OSError failure to rename may indicate something
- # like the directory has no write permission, but
- # the .sconsign file itself might still be writable,
- # so try writing on top of it directly. An IOError
- # here, or in any of the following calls, would get
- # raised, indicating something like a potentially
- # serious disk or network issue.
- open(self.sconsign, 'wb').write(open(fname, 'rb').read())
- os.chmod(self.sconsign, mode)
- try:
- os.unlink(temp)
- except (IOError, OSError):
- pass
-
-ForDirectory = DB
-
-def File(name, dbm_module=None):
- """
- Arrange for all signatures to be stored in a global .sconsign.db*
- file.
- """
- global ForDirectory, DB_Name, DB_Module
- if name is None:
- ForDirectory = DirFile
- DB_Module = None
- else:
- ForDirectory = DB
- DB_Name = name
- if not dbm_module is None:
- DB_Module = dbm_module
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/C.py b/3rdParty/SCons/scons-local/SCons/Scanner/C.py
deleted file mode 100644
index dccd3be..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/C.py
+++ /dev/null
@@ -1,132 +0,0 @@
-"""SCons.Scanner.C
-
-This module implements the depenency scanner for C/C++ code.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/C.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Node.FS
-import SCons.Scanner
-import SCons.Util
-
-import SCons.cpp
-
-class SConsCPPScanner(SCons.cpp.PreProcessor):
- """
- SCons-specific subclass of the cpp.py module's processing.
-
- We subclass this so that: 1) we can deal with files represented
- by Nodes, not strings; 2) we can keep track of the files that are
- missing.
- """
- def __init__(self, *args, **kw):
- apply(SCons.cpp.PreProcessor.__init__, (self,)+args, kw)
- self.missing = []
- def initialize_result(self, fname):
- self.result = SCons.Util.UniqueList([fname])
- def finalize_result(self, fname):
- return self.result[1:]
- def find_include_file(self, t):
- keyword, quote, fname = t
- result = SCons.Node.FS.find_file(fname, self.searchpath[quote])
- if not result:
- self.missing.append((fname, self.current_file))
- return result
- def read_file(self, file):
- try:
- fp = open(str(file.rfile()))
- except EnvironmentError, e:
- self.missing.append((file, self.current_file))
- return ''
- else:
- return fp.read()
-
-def dictify_CPPDEFINES(env):
- cppdefines = env.get('CPPDEFINES', {})
- if cppdefines is None:
- return {}
- if SCons.Util.is_Sequence(cppdefines):
- result = {}
- for c in cppdefines:
- if SCons.Util.is_Sequence(c):
- result[c[0]] = c[1]
- else:
- result[c] = None
- return result
- if not SCons.Util.is_Dict(cppdefines):
- return {cppdefines : None}
- return cppdefines
-
-class SConsCPPScannerWrapper:
- """
- The SCons wrapper around a cpp.py scanner.
-
- This is the actual glue between the calling conventions of generic
- SCons scanners, and the (subclass of) cpp.py class that knows how
- to look for #include lines with reasonably real C-preprocessor-like
- evaluation of #if/#ifdef/#else/#elif lines.
- """
- def __init__(self, name, variable):
- self.name = name
- self.path = SCons.Scanner.FindPathDirs(variable)
- def __call__(self, node, env, path = ()):
- cpp = SConsCPPScanner(current = node.get_dir(),
- cpppath = path,
- dict = dictify_CPPDEFINES(env))
- result = cpp(node)
- for included, includer in cpp.missing:
- fmt = "No dependency generated for file: %s (included from: %s) -- file not found"
- SCons.Warnings.warn(SCons.Warnings.DependencyWarning,
- fmt % (included, includer))
- return result
-
- def recurse_nodes(self, nodes):
- return nodes
- def select(self, node):
- return self
-
-def CScanner():
- """Return a prototype Scanner instance for scanning source files
- that use the C pre-processor"""
-
- # Here's how we would (or might) use the CPP scanner code above that
- # knows how to evaluate #if/#ifdef/#else/#elif lines when searching
- # for #includes. This is commented out for now until we add the
- # right configurability to let users pick between the scanners.
- #return SConsCPPScannerWrapper("CScanner", "CPPPATH")
-
- cs = SCons.Scanner.ClassicCPP("CScanner",
- "$CPPSUFFIXES",
- "CPPPATH",
- '^[ \t]*#[ \t]*(?:include|import)[ \t]*(<|")([^>"]+)(>|")')
- return cs
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/D.py b/3rdParty/SCons/scons-local/SCons/Scanner/D.py
deleted file mode 100644
index 311e1af..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/D.py
+++ /dev/null
@@ -1,74 +0,0 @@
-"""SCons.Scanner.D
-
-Scanner for the Digital Mars "D" programming language.
-
-Coded by Andy Friesen
-17 Nov 2003
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/D.py 4043 2009/02/23 09:06:45 scons"
-
-import re
-import string
-
-import SCons.Scanner
-
-def DScanner():
- """Return a prototype Scanner instance for scanning D source files"""
- ds = D()
- return ds
-
-class D(SCons.Scanner.Classic):
- def __init__ (self):
- SCons.Scanner.Classic.__init__ (self,
- name = "DScanner",
- suffixes = '$DSUFFIXES',
- path_variable = 'DPATH',
- regex = 'import\s+(?:[a-zA-Z0-9_.]+)\s*(?:,\s*(?:[a-zA-Z0-9_.]+)\s*)*;')
-
- self.cre2 = re.compile ('(?:import\s)?\s*([a-zA-Z0-9_.]+)\s*(?:,|;)', re.M)
-
- def find_include(self, include, source_dir, path):
- # translate dots (package separators) to slashes
- inc = string.replace(include, '.', '/')
-
- i = SCons.Node.FS.find_file(inc + '.d', (source_dir,) + path)
- if i is None:
- i = SCons.Node.FS.find_file (inc + '.di', (source_dir,) + path)
- return i, include
-
- def find_include_names(self, node):
- includes = []
- for i in self.cre.findall(node.get_text_contents()):
- includes = includes + self.cre2.findall(i)
- return includes
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/Dir.py b/3rdParty/SCons/scons-local/SCons/Scanner/Dir.py
deleted file mode 100644
index aaf92d6..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/Dir.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/Dir.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Node.FS
-import SCons.Scanner
-
-def only_dirs(nodes):
- is_Dir = lambda n: isinstance(n.disambiguate(), SCons.Node.FS.Dir)
- return filter(is_Dir, nodes)
-
-def DirScanner(**kw):
- """Return a prototype Scanner instance for scanning
- directories for on-disk files"""
- kw['node_factory'] = SCons.Node.FS.Entry
- kw['recursive'] = only_dirs
- return apply(SCons.Scanner.Base, (scan_on_disk, "DirScanner"), kw)
-
-def DirEntryScanner(**kw):
- """Return a prototype Scanner instance for "scanning"
- directory Nodes for their in-memory entries"""
- kw['node_factory'] = SCons.Node.FS.Entry
- kw['recursive'] = None
- return apply(SCons.Scanner.Base, (scan_in_memory, "DirEntryScanner"), kw)
-
-skip_entry = {}
-
-skip_entry_list = [
- '.',
- '..',
- '.sconsign',
- # Used by the native dblite.py module.
- '.sconsign.dblite',
- # Used by dbm and dumbdbm.
- '.sconsign.dir',
- # Used by dbm.
- '.sconsign.pag',
- # Used by dumbdbm.
- '.sconsign.dat',
- '.sconsign.bak',
- # Used by some dbm emulations using Berkeley DB.
- '.sconsign.db',
-]
-
-for skip in skip_entry_list:
- skip_entry[skip] = 1
- skip_entry[SCons.Node.FS._my_normcase(skip)] = 1
-
-do_not_scan = lambda k: not skip_entry.has_key(k)
-
-def scan_on_disk(node, env, path=()):
- """
- Scans a directory for on-disk files and directories therein.
-
- Looking up the entries will add these to the in-memory Node tree
- representation of the file system, so all we have to do is just
- that and then call the in-memory scanning function.
- """
- try:
- flist = node.fs.listdir(node.abspath)
- except (IOError, OSError):
- return []
- e = node.Entry
- for f in filter(do_not_scan, flist):
- # Add ./ to the beginning of the file name so if it begins with a
- # '#' we don't look it up relative to the top-level directory.
- e('./' + f)
- return scan_in_memory(node, env, path)
-
-def scan_in_memory(node, env, path=()):
- """
- "Scans" a Node.FS.Dir for its in-memory entries.
- """
- try:
- entries = node.entries
- except AttributeError:
- # It's not a Node.FS.Dir (or doesn't look enough like one for
- # our purposes), which can happen if a target list containing
- # mixed Node types (Dirs and Files, for example) has a Dir as
- # the first entry.
- return []
- entry_list = filter(do_not_scan, entries.keys())
- entry_list.sort()
- return map(lambda n, e=entries: e[n], entry_list)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/Fortran.py b/3rdParty/SCons/scons-local/SCons/Scanner/Fortran.py
deleted file mode 100644
index 92f511a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/Fortran.py
+++ /dev/null
@@ -1,320 +0,0 @@
-"""SCons.Scanner.Fortran
-
-This module implements the dependency scanner for Fortran code.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/Fortran.py 4043 2009/02/23 09:06:45 scons"
-
-import re
-import string
-
-import SCons.Node
-import SCons.Node.FS
-import SCons.Scanner
-import SCons.Util
-import SCons.Warnings
-
-class F90Scanner(SCons.Scanner.Classic):
- """
- A Classic Scanner subclass for Fortran source files which takes
- into account both USE and INCLUDE statements. This scanner will
- work for both F77 and F90 (and beyond) compilers.
-
- Currently, this scanner assumes that the include files do not contain
- USE statements. To enable the ability to deal with USE statements
- in include files, add logic right after the module names are found
- to loop over each include file, search for and locate each USE
- statement, and append each module name to the list of dependencies.
- Caching the search results in a common dictionary somewhere so that
- the same include file is not searched multiple times would be a
- smart thing to do.
- """
-
- def __init__(self, name, suffixes, path_variable,
- use_regex, incl_regex, def_regex, *args, **kw):
-
- self.cre_use = re.compile(use_regex, re.M)
- self.cre_incl = re.compile(incl_regex, re.M)
- self.cre_def = re.compile(def_regex, re.M)
-
- def _scan(node, env, path, self=self):
- node = node.rfile()
-
- if not node.exists():
- return []
-
- return self.scan(node, env, path)
-
- kw['function'] = _scan
- kw['path_function'] = SCons.Scanner.FindPathDirs(path_variable)
- kw['recursive'] = 1
- kw['skeys'] = suffixes
- kw['name'] = name
-
- apply(SCons.Scanner.Current.__init__, (self,) + args, kw)
-
- def scan(self, node, env, path=()):
-
- # cache the includes list in node so we only scan it once:
- if node.includes != None:
- mods_and_includes = node.includes
- else:
- # retrieve all included filenames
- includes = self.cre_incl.findall(node.get_text_contents())
- # retrieve all USE'd module names
- modules = self.cre_use.findall(node.get_text_contents())
- # retrieve all defined module names
- defmodules = self.cre_def.findall(node.get_text_contents())
-
- # Remove all USE'd module names that are defined in the same file
- d = {}
- for m in defmodules:
- d[m] = 1
- modules = filter(lambda m, d=d: not d.has_key(m), modules)
- #modules = self.undefinedModules(modules, defmodules)
-
- # Convert module name to a .mod filename
- suffix = env.subst('$FORTRANMODSUFFIX')
- modules = map(lambda x, s=suffix: string.lower(x) + s, modules)
- # Remove unique items from the list
- mods_and_includes = SCons.Util.unique(includes+modules)
- node.includes = mods_and_includes
-
- # This is a hand-coded DSU (decorate-sort-undecorate, or
- # Schwartzian transform) pattern. The sort key is the raw name
- # of the file as specifed on the USE or INCLUDE line, which lets
- # us keep the sort order constant regardless of whether the file
- # is actually found in a Repository or locally.
- nodes = []
- source_dir = node.get_dir()
- if callable(path):
- path = path()
- for dep in mods_and_includes:
- n, i = self.find_include(dep, source_dir, path)
-
- if n is None:
- SCons.Warnings.warn(SCons.Warnings.DependencyWarning,
- "No dependency generated for file: %s (referenced by: %s) -- file not found" % (i, node))
- else:
- sortkey = self.sort_key(dep)
- nodes.append((sortkey, n))
-
- nodes.sort()
- nodes = map(lambda pair: pair[1], nodes)
- return nodes
-
-def FortranScan(path_variable="FORTRANPATH"):
- """Return a prototype Scanner instance for scanning source files
- for Fortran USE & INCLUDE statements"""
-
-# The USE statement regex matches the following:
-#
-# USE module_name
-# USE :: module_name
-# USE, INTRINSIC :: module_name
-# USE, NON_INTRINSIC :: module_name
-#
-# Limitations
-#
-# -- While the regex can handle multiple USE statements on one line,
-# it cannot properly handle them if they are commented out.
-# In either of the following cases:
-#
-# ! USE mod_a ; USE mod_b [entire line is commented out]
-# USE mod_a ! ; USE mod_b [in-line comment of second USE statement]
-#
-# the second module name (mod_b) will be picked up as a dependency
-# even though it should be ignored. The only way I can see
-# to rectify this would be to modify the scanner to eliminate
-# the call to re.findall, read in the contents of the file,
-# treating the comment character as an end-of-line character
-# in addition to the normal linefeed, loop over each line,
-# weeding out the comments, and looking for the USE statements.
-# One advantage to this is that the regex passed to the scanner
-# would no longer need to match a semicolon.
-#
-# -- I question whether or not we need to detect dependencies to
-# INTRINSIC modules because these are built-in to the compiler.
-# If we consider them a dependency, will SCons look for them, not
-# find them, and kill the build? Or will we there be standard
-# compiler-specific directories we will need to point to so the
-# compiler and SCons can locate the proper object and mod files?
-
-# Here is a breakdown of the regex:
-#
-# (?i) : regex is case insensitive
-# ^ : start of line
-# (?: : group a collection of regex symbols without saving the match as a "group"
-# ^|; : matches either the start of the line or a semicolon - semicolon
-# ) : end the unsaved grouping
-# \s* : any amount of white space
-# USE : match the string USE, case insensitive
-# (?: : group a collection of regex symbols without saving the match as a "group"
-# \s+| : match one or more whitespace OR .... (the next entire grouped set of regex symbols)
-# (?: : group a collection of regex symbols without saving the match as a "group"
-# (?: : establish another unsaved grouping of regex symbols
-# \s* : any amount of white space
-# , : match a comma
-# \s* : any amount of white space
-# (?:NON_)? : optionally match the prefix NON_, case insensitive
-# INTRINSIC : match the string INTRINSIC, case insensitive
-# )? : optionally match the ", INTRINSIC/NON_INTRINSIC" grouped expression
-# \s* : any amount of white space
-# :: : match a double colon that must appear after the INTRINSIC/NON_INTRINSIC attribute
-# ) : end the unsaved grouping
-# ) : end the unsaved grouping
-# \s* : match any amount of white space
-# (\w+) : match the module name that is being USE'd
-#
-#
- use_regex = "(?i)(?:^|;)\s*USE(?:\s+|(?:(?:\s*,\s*(?:NON_)?INTRINSIC)?\s*::))\s*(\w+)"
-
-
-# The INCLUDE statement regex matches the following:
-#
-# INCLUDE 'some_Text'
-# INCLUDE "some_Text"
-# INCLUDE "some_Text" ; INCLUDE "some_Text"
-# INCLUDE kind_"some_Text"
-# INCLUDE kind_'some_Text"
-#
-# where some_Text can include any alphanumeric and/or special character
-# as defined by the Fortran 2003 standard.
-#
-# Limitations:
-#
-# -- The Fortran standard dictates that a " or ' in the INCLUDE'd
-# string must be represented as a "" or '', if the quotes that wrap
-# the entire string are either a ' or ", respectively. While the
-# regular expression below can detect the ' or " characters just fine,
-# the scanning logic, presently is unable to detect them and reduce
-# them to a single instance. This probably isn't an issue since,
-# in practice, ' or " are not generally used in filenames.
-#
-# -- This regex will not properly deal with multiple INCLUDE statements
-# when the entire line has been commented out, ala
-#
-# ! INCLUDE 'some_file' ; INCLUDE 'some_file'
-#
-# In such cases, it will properly ignore the first INCLUDE file,
-# but will actually still pick up the second. Interestingly enough,
-# the regex will properly deal with these cases:
-#
-# INCLUDE 'some_file'
-# INCLUDE 'some_file' !; INCLUDE 'some_file'
-#
-# To get around the above limitation, the FORTRAN programmer could
-# simply comment each INCLUDE statement separately, like this
-#
-# ! INCLUDE 'some_file' !; INCLUDE 'some_file'
-#
-# The way I see it, the only way to get around this limitation would
-# be to modify the scanning logic to replace the calls to re.findall
-# with a custom loop that processes each line separately, throwing
-# away fully commented out lines before attempting to match against
-# the INCLUDE syntax.
-#
-# Here is a breakdown of the regex:
-#
-# (?i) : regex is case insensitive
-# (?: : begin a non-saving group that matches the following:
-# ^ : either the start of the line
-# | : or
-# ['">]\s*; : a semicolon that follows a single quote,
-# double quote or greater than symbol (with any
-# amount of whitespace in between). This will
-# allow the regex to match multiple INCLUDE
-# statements per line (although it also requires
-# the positive lookahead assertion that is
-# used below). It will even properly deal with
-# (i.e. ignore) cases in which the additional
-# INCLUDES are part of an in-line comment, ala
-# " INCLUDE 'someFile' ! ; INCLUDE 'someFile2' "
-# ) : end of non-saving group
-# \s* : any amount of white space
-# INCLUDE : match the string INCLUDE, case insensitive
-# \s+ : match one or more white space characters
-# (?\w+_)? : match the optional "kind-param _" prefix allowed by the standard
-# [<"'] : match the include delimiter - an apostrophe, double quote, or less than symbol
-# (.+?) : match one or more characters that make up
-# the included path and file name and save it
-# in a group. The Fortran standard allows for
-# any non-control character to be used. The dot
-# operator will pick up any character, including
-# control codes, but I can't conceive of anyone
-# putting control codes in their file names.
-# The question mark indicates it is non-greedy so
-# that regex will match only up to the next quote,
-# double quote, or greater than symbol
-# (?=["'>]) : positive lookahead assertion to match the include
-# delimiter - an apostrophe, double quote, or
-# greater than symbol. This level of complexity
-# is required so that the include delimiter is
-# not consumed by the match, thus allowing the
-# sub-regex discussed above to uniquely match a
-# set of semicolon-separated INCLUDE statements
-# (as allowed by the F2003 standard)
-
- include_regex = """(?i)(?:^|['">]\s*;)\s*INCLUDE\s+(?:\w+_)?[<"'](.+?)(?=["'>])"""
-
-# The MODULE statement regex finds module definitions by matching
-# the following:
-#
-# MODULE module_name
-#
-# but *not* the following:
-#
-# MODULE PROCEDURE procedure_name
-#
-# Here is a breakdown of the regex:
-#
-# (?i) : regex is case insensitive
-# ^\s* : any amount of white space
-# MODULE : match the string MODULE, case insensitive
-# \s+ : match one or more white space characters
-# (?!PROCEDURE) : but *don't* match if the next word matches
-# PROCEDURE (negative lookahead assertion),
-# case insensitive
-# (\w+) : match one or more alphanumeric characters
-# that make up the defined module name and
-# save it in a group
-
- def_regex = """(?i)^\s*MODULE\s+(?!PROCEDURE)(\w+)"""
-
- scanner = F90Scanner("FortranScan",
- "$FORTRANSUFFIXES",
- path_variable,
- use_regex,
- include_regex,
- def_regex)
- return scanner
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/IDL.py b/3rdParty/SCons/scons-local/SCons/Scanner/IDL.py
deleted file mode 100644
index 57a8a6a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/IDL.py
+++ /dev/null
@@ -1,48 +0,0 @@
-"""SCons.Scanner.IDL
-
-This module implements the depenency scanner for IDL (Interface
-Definition Language) files.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/IDL.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Node.FS
-import SCons.Scanner
-
-def IDLScan():
- """Return a prototype Scanner instance for scanning IDL source files"""
- cs = SCons.Scanner.ClassicCPP("IDLScan",
- "$IDLSUFFIXES",
- "CPPPATH",
- '^[ \t]*(?:#[ \t]*include|[ \t]*import)[ \t]+(<|")([^>"]+)(>|")')
- return cs
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/LaTeX.py b/3rdParty/SCons/scons-local/SCons/Scanner/LaTeX.py
deleted file mode 100644
index fe6f7e1..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/LaTeX.py
+++ /dev/null
@@ -1,343 +0,0 @@
-"""SCons.Scanner.LaTeX
-
-This module implements the dependency scanner for LaTeX code.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/LaTeX.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import string
-import re
-
-import SCons.Scanner
-import SCons.Util
-
-# list of graphics file extensions for TeX and LaTeX
-TexGraphics = ['.eps', '.ps']
-LatexGraphics = ['.pdf', '.png', '.jpg', '.gif', '.tif']
-
-# Used as a return value of modify_env_var if the variable is not set.
-class _Null:
- pass
-_null = _Null
-
-# The user specifies the paths in env[variable], similar to other builders.
-# They may be relative and must be converted to absolute, as expected
-# by LaTeX and Co. The environment may already have some paths in
-# env['ENV'][var]. These paths are honored, but the env[var] paths have
-# higher precedence. All changes are un-done on exit.
-def modify_env_var(env, var, abspath):
- try:
- save = env['ENV'][var]
- except KeyError:
- save = _null
- env.PrependENVPath(var, abspath)
- try:
- if SCons.Util.is_List(env[var]):
- #TODO(1.5)
- #env.PrependENVPath(var, [os.path.abspath(str(p)) for p in env[var]])
- env.PrependENVPath(var, map(lambda p: os.path.abspath(str(p)), env[var]))
- else:
- # Split at os.pathsep to convert into absolute path
- #TODO(1.5) env.PrependENVPath(var, [os.path.abspath(p) for p in str(env[var]).split(os.pathsep)])
- env.PrependENVPath(var, map(lambda p: os.path.abspath(p), string.split(str(env[var]), os.pathsep)))
- except KeyError:
- pass
-
- # Convert into a string explicitly to append ":" (without which it won't search system
- # paths as well). The problem is that env.AppendENVPath(var, ":")
- # does not work, refuses to append ":" (os.pathsep).
-
- if SCons.Util.is_List(env['ENV'][var]):
- # TODO(1.5)
- #env['ENV'][var] = os.pathsep.join(env['ENV'][var])
- env['ENV'][var] = string.join(env['ENV'][var], os.pathsep)
- # Append the trailing os.pathsep character here to catch the case with no env[var]
- env['ENV'][var] = env['ENV'][var] + os.pathsep
-
- return save
-
-class FindENVPathDirs:
- """A class to bind a specific *PATH variable name to a function that
- will return all of the *path directories."""
- def __init__(self, variable):
- self.variable = variable
- def __call__(self, env, dir=None, target=None, source=None, argument=None):
- import SCons.PathList
- try:
- path = env['ENV'][self.variable]
- except KeyError:
- return ()
-
- dir = dir or env.fs._cwd
- path = SCons.PathList.PathList(path).subst_path(env, target, source)
- return tuple(dir.Rfindalldirs(path))
-
-
-
-def LaTeXScanner():
- """Return a prototype Scanner instance for scanning LaTeX source files
- when built with latex.
- """
- ds = LaTeX(name = "LaTeXScanner",
- suffixes = '$LATEXSUFFIXES',
- # in the search order, see below in LaTeX class docstring
- graphics_extensions = TexGraphics,
- recursive = 0)
- return ds
-
-def PDFLaTeXScanner():
- """Return a prototype Scanner instance for scanning LaTeX source files
- when built with pdflatex.
- """
- ds = LaTeX(name = "PDFLaTeXScanner",
- suffixes = '$LATEXSUFFIXES',
- # in the search order, see below in LaTeX class docstring
- graphics_extensions = LatexGraphics,
- recursive = 0)
- return ds
-
-class LaTeX(SCons.Scanner.Base):
- """Class for scanning LaTeX files for included files.
-
- Unlike most scanners, which use regular expressions that just
- return the included file name, this returns a tuple consisting
- of the keyword for the inclusion ("include", "includegraphics",
- "input", or "bibliography"), and then the file name itself.
- Based on a quick look at LaTeX documentation, it seems that we
- should append .tex suffix for the "include" keywords, append .tex if
- there is no extension for the "input" keyword, and need to add .bib
- for the "bibliography" keyword that does not accept extensions by itself.
-
- Finally, if there is no extension for an "includegraphics" keyword
- latex will append .ps or .eps to find the file, while pdftex may use .pdf,
- .jpg, .tif, .mps, or .png.
-
- The actual subset and search order may be altered by
- DeclareGraphicsExtensions command. This complication is ignored.
- The default order corresponds to experimentation with teTeX
- $ latex --version
- pdfeTeX 3.141592-1.21a-2.2 (Web2C 7.5.4)
- kpathsea version 3.5.4
- The order is:
- ['.eps', '.ps'] for latex
- ['.png', '.pdf', '.jpg', '.tif'].
-
- Another difference is that the search path is determined by the type
- of the file being searched:
- env['TEXINPUTS'] for "input" and "include" keywords
- env['TEXINPUTS'] for "includegraphics" keyword
- env['BIBINPUTS'] for "bibliography" keyword
- env['BSTINPUTS'] for "bibliographystyle" keyword
-
- FIXME: also look for the class or style in document[class|style]{}
- FIXME: also look for the argument of bibliographystyle{}
- """
- keyword_paths = {'include': 'TEXINPUTS',
- 'input': 'TEXINPUTS',
- 'includegraphics': 'TEXINPUTS',
- 'bibliography': 'BIBINPUTS',
- 'bibliographystyle': 'BSTINPUTS',
- 'usepackage': 'TEXINPUTS'}
- env_variables = SCons.Util.unique(keyword_paths.values())
-
- def __init__(self, name, suffixes, graphics_extensions, *args, **kw):
-
- # We have to include \n with the % we exclude from the first part
- # part of the regex because the expression is compiled with re.M.
- # Without the \n, the ^ could match the beginning of a *previous*
- # line followed by one or more newline characters (i.e. blank
- # lines), interfering with a match on the next line.
- regex = r'^[^%\n]*\\(include|includegraphics(?:\[[^\]]+\])?|input|bibliography|usepackage){([^}]*)}'
- self.cre = re.compile(regex, re.M)
- self.graphics_extensions = graphics_extensions
-
- def _scan(node, env, path=(), self=self):
- node = node.rfile()
- if not node.exists():
- return []
- return self.scan(node, path)
-
- class FindMultiPathDirs:
- """The stock FindPathDirs function has the wrong granularity:
- it is called once per target, while we need the path that depends
- on what kind of included files is being searched. This wrapper
- hides multiple instances of FindPathDirs, one per the LaTeX path
- variable in the environment. When invoked, the function calculates
- and returns all the required paths as a dictionary (converted into
- a tuple to become hashable). Then the scan function converts it
- back and uses a dictionary of tuples rather than a single tuple
- of paths.
- """
- def __init__(self, dictionary):
- self.dictionary = {}
- for k,n in dictionary.items():
- self.dictionary[k] = ( SCons.Scanner.FindPathDirs(n),
- FindENVPathDirs(n) )
-
- def __call__(self, env, dir=None, target=None, source=None,
- argument=None):
- di = {}
- for k,(c,cENV) in self.dictionary.items():
- di[k] = ( c(env, dir=None, target=None, source=None,
- argument=None) ,
- cENV(env, dir=None, target=None, source=None,
- argument=None) )
- # To prevent "dict is not hashable error"
- return tuple(di.items())
-
- class LaTeXScanCheck:
- """Skip all but LaTeX source files, i.e., do not scan *.eps,
- *.pdf, *.jpg, etc.
- """
- def __init__(self, suffixes):
- self.suffixes = suffixes
- def __call__(self, node, env):
- current = not node.has_builder() or node.is_up_to_date()
- scannable = node.get_suffix() in env.subst_list(self.suffixes)[0]
- # Returning false means that the file is not scanned.
- return scannable and current
-
- kw['function'] = _scan
- kw['path_function'] = FindMultiPathDirs(LaTeX.keyword_paths)
- kw['recursive'] = 1
- kw['skeys'] = suffixes
- kw['scan_check'] = LaTeXScanCheck(suffixes)
- kw['name'] = name
-
- apply(SCons.Scanner.Base.__init__, (self,) + args, kw)
-
- def _latex_names(self, include):
- filename = include[1]
- if include[0] == 'input':
- base, ext = os.path.splitext( filename )
- if ext == "":
- return [filename + '.tex']
- if (include[0] == 'include'):
- return [filename + '.tex']
- if include[0] == 'bibliography':
- base, ext = os.path.splitext( filename )
- if ext == "":
- return [filename + '.bib']
- if include[0] == 'usepackage':
- base, ext = os.path.splitext( filename )
- if ext == "":
- return [filename + '.sty']
- if include[0] == 'includegraphics':
- base, ext = os.path.splitext( filename )
- if ext == "":
- #TODO(1.5) return [filename + e for e in self.graphics_extensions]
- #return map(lambda e, f=filename: f+e, self.graphics_extensions + TexGraphics)
- # use the line above to find dependency for PDF builder when only .eps figure is present
- # Since it will be found if the user tell scons how to make the pdf figure leave it out for now.
- return map(lambda e, f=filename: f+e, self.graphics_extensions)
- return [filename]
-
- def sort_key(self, include):
- return SCons.Node.FS._my_normcase(str(include))
-
- def find_include(self, include, source_dir, path):
- try:
- sub_path = path[include[0]]
- except (IndexError, KeyError):
- sub_path = ()
- try_names = self._latex_names(include)
- for n in try_names:
- # see if we find it using the path in env[var]
- i = SCons.Node.FS.find_file(n, (source_dir,) + sub_path[0])
- if i:
- return i, include
- # see if we find it using the path in env['ENV'][var]
- i = SCons.Node.FS.find_file(n, (source_dir,) + sub_path[1])
- if i:
- return i, include
- return i, include
-
- def scan(self, node, path=()):
- # Modify the default scan function to allow for the regular
- # expression to return a comma separated list of file names
- # as can be the case with the bibliography keyword.
-
- # Cache the includes list in node so we only scan it once:
- path_dict = dict(list(path))
- noopt_cre = re.compile('\[.*$')
- if node.includes != None:
- includes = node.includes
- else:
- includes = self.cre.findall(node.get_text_contents())
- # 1. Split comma-separated lines, e.g.
- # ('bibliography', 'phys,comp')
- # should become two entries
- # ('bibliography', 'phys')
- # ('bibliography', 'comp')
- # 2. Remove the options, e.g., such as
- # ('includegraphics[clip,width=0.7\\linewidth]', 'picture.eps')
- # should become
- # ('includegraphics', 'picture.eps')
- split_includes = []
- for include in includes:
- inc_type = noopt_cre.sub('', include[0])
- inc_list = string.split(include[1],',')
- for j in range(len(inc_list)):
- split_includes.append( (inc_type, inc_list[j]) )
- #
- includes = split_includes
- node.includes = includes
-
- # This is a hand-coded DSU (decorate-sort-undecorate, or
- # Schwartzian transform) pattern. The sort key is the raw name
- # of the file as specifed on the \include, \input, etc. line.
- # TODO: what about the comment in the original Classic scanner:
- # """which lets
- # us keep the sort order constant regardless of whether the file
- # is actually found in a Repository or locally."""
- nodes = []
- source_dir = node.get_dir()
- for include in includes:
- #
- # Handle multiple filenames in include[1]
- #
- n, i = self.find_include(include, source_dir, path_dict)
- if n is None:
- # Do not bother with 'usepackage' warnings, as they most
- # likely refer to system-level files
- if include[0] != 'usepackage':
- SCons.Warnings.warn(SCons.Warnings.DependencyWarning,
- "No dependency generated for file: %s (included from: %s) -- file not found" % (i, node))
- else:
- sortkey = self.sort_key(n)
- nodes.append((sortkey, n))
- #
- nodes.sort()
- nodes = map(lambda pair: pair[1], nodes)
- return nodes
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/Prog.py b/3rdParty/SCons/scons-local/SCons/Scanner/Prog.py
deleted file mode 100644
index 47054a8..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/Prog.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/Prog.py 4043 2009/02/23 09:06:45 scons"
-
-import string
-
-import SCons.Node
-import SCons.Node.FS
-import SCons.Scanner
-import SCons.Util
-
-# global, set by --debug=findlibs
-print_find_libs = None
-
-def ProgramScanner(**kw):
- """Return a prototype Scanner instance for scanning executable
- files for static-lib dependencies"""
- kw['path_function'] = SCons.Scanner.FindPathDirs('LIBPATH')
- ps = apply(SCons.Scanner.Base, [scan, "ProgramScanner"], kw)
- return ps
-
-def scan(node, env, libpath = ()):
- """
- This scanner scans program files for static-library
- dependencies. It will search the LIBPATH environment variable
- for libraries specified in the LIBS variable, returning any
- files it finds as dependencies.
- """
- try:
- libs = env['LIBS']
- except KeyError:
- # There are no LIBS in this environment, so just return a null list:
- return []
- if SCons.Util.is_String(libs):
- libs = string.split(libs)
- else:
- libs = SCons.Util.flatten(libs)
-
- try:
- prefix = env['LIBPREFIXES']
- if not SCons.Util.is_List(prefix):
- prefix = [ prefix ]
- except KeyError:
- prefix = [ '' ]
-
- try:
- suffix = env['LIBSUFFIXES']
- if not SCons.Util.is_List(suffix):
- suffix = [ suffix ]
- except KeyError:
- suffix = [ '' ]
-
- pairs = []
- for suf in map(env.subst, suffix):
- for pref in map(env.subst, prefix):
- pairs.append((pref, suf))
-
- result = []
-
- if callable(libpath):
- libpath = libpath()
-
- find_file = SCons.Node.FS.find_file
- adjustixes = SCons.Util.adjustixes
- for lib in libs:
- if SCons.Util.is_String(lib):
- lib = env.subst(lib)
- for pref, suf in pairs:
- l = adjustixes(lib, pref, suf)
- l = find_file(l, libpath, verbose=print_find_libs)
- if l:
- result.append(l)
- else:
- result.append(lib)
-
- return result
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/RC.py b/3rdParty/SCons/scons-local/SCons/Scanner/RC.py
deleted file mode 100644
index e804a3f..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/RC.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""SCons.Scanner.RC
-
-This module implements the depenency scanner for RC (Interface
-Definition Language) files.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/RC.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Node.FS
-import SCons.Scanner
-import re
-
-def RCScan():
- """Return a prototype Scanner instance for scanning RC source files"""
-
- res_re= r'^(?:\s*#\s*(?:include)|' \
- '.*?\s+(?:ICON|BITMAP|CURSOR|HTML|FONT|MESSAGETABLE|TYPELIB|REGISTRY|D3DFX)' \
- '\s*.*?)' \
- '\s*(<|"| )([^>"\s]+)(?:[>" ])*$'
- resScanner = SCons.Scanner.ClassicCPP( "ResourceScanner",
- "$RCSUFFIXES",
- "CPPPATH",
- res_re )
-
- return resScanner
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Scanner/__init__.py b/3rdParty/SCons/scons-local/SCons/Scanner/__init__.py
deleted file mode 100644
index f5ce271..0000000
--- a/3rdParty/SCons/scons-local/SCons/Scanner/__init__.py
+++ /dev/null
@@ -1,417 +0,0 @@
-"""SCons.Scanner
-
-The Scanner package for the SCons software construction utility.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Scanner/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-import re
-import string
-
-import SCons.Node.FS
-import SCons.Util
-
-
-class _Null:
- pass
-
-# This is used instead of None as a default argument value so None can be
-# used as an actual argument value.
-_null = _Null
-
-def Scanner(function, *args, **kw):
- """
- Public interface factory function for creating different types
- of Scanners based on the different types of "functions" that may
- be supplied.
-
- TODO: Deprecate this some day. We've moved the functionality
- inside the Base class and really don't need this factory function
- any more. It was, however, used by some of our Tool modules, so
- the call probably ended up in various people's custom modules
- patterned on SCons code.
- """
- if SCons.Util.is_Dict(function):
- return apply(Selector, (function,) + args, kw)
- else:
- return apply(Base, (function,) + args, kw)
-
-
-
-class FindPathDirs:
- """A class to bind a specific *PATH variable name to a function that
- will return all of the *path directories."""
- def __init__(self, variable):
- self.variable = variable
- def __call__(self, env, dir=None, target=None, source=None, argument=None):
- import SCons.PathList
- try:
- path = env[self.variable]
- except KeyError:
- return ()
-
- dir = dir or env.fs._cwd
- path = SCons.PathList.PathList(path).subst_path(env, target, source)
- return tuple(dir.Rfindalldirs(path))
-
-
-
-class Base:
- """
- The base class for dependency scanners. This implements
- straightforward, single-pass scanning of a single file.
- """
-
- def __init__(self,
- function,
- name = "NONE",
- argument = _null,
- skeys = _null,
- path_function = None,
- node_class = SCons.Node.FS.Entry,
- node_factory = None,
- scan_check = None,
- recursive = None):
- """
- Construct a new scanner object given a scanner function.
-
- 'function' - a scanner function taking two or three
- arguments and returning a list of strings.
-
- 'name' - a name for identifying this scanner object.
-
- 'argument' - an optional argument that, if specified, will be
- passed to both the scanner function and the path_function.
-
- 'skeys' - an optional list argument that can be used to determine
- which scanner should be used for a given Node. In the case of File
- nodes, for example, the 'skeys' would be file suffixes.
-
- 'path_function' - a function that takes four or five arguments
- (a construction environment, Node for the directory containing
- the SConscript file that defined the primary target, list of
- target nodes, list of source nodes, and optional argument for
- this instance) and returns a tuple of the directories that can
- be searched for implicit dependency files. May also return a
- callable() which is called with no args and returns the tuple
- (supporting Bindable class).
-
- 'node_class' - the class of Nodes which this scan will return.
- If node_class is None, then this scanner will not enforce any
- Node conversion and will return the raw results from the
- underlying scanner function.
-
- 'node_factory' - the factory function to be called to translate
- the raw results returned by the scanner function into the
- expected node_class objects.
-
- 'scan_check' - a function to be called to first check whether
- this node really needs to be scanned.
-
- 'recursive' - specifies that this scanner should be invoked
- recursively on all of the implicit dependencies it returns
- (the canonical example being #include lines in C source files).
- May be a callable, which will be called to filter the list
- of nodes found to select a subset for recursive scanning
- (the canonical example being only recursively scanning
- subdirectories within a directory).
-
- The scanner function's first argument will be a Node that should
- be scanned for dependencies, the second argument will be an
- Environment object, the third argument will be the tuple of paths
- returned by the path_function, and the fourth argument will be
- the value passed into 'argument', and the returned list should
- contain the Nodes for all the direct dependencies of the file.
-
- Examples:
-
- s = Scanner(my_scanner_function)
-
- s = Scanner(function = my_scanner_function)
-
- s = Scanner(function = my_scanner_function, argument = 'foo')
-
- """
-
- # Note: this class could easily work with scanner functions that take
- # something other than a filename as an argument (e.g. a database
- # node) and a dependencies list that aren't file names. All that
- # would need to be changed is the documentation.
-
- self.function = function
- self.path_function = path_function
- self.name = name
- self.argument = argument
-
- if skeys is _null:
- if SCons.Util.is_Dict(function):
- skeys = function.keys()
- else:
- skeys = []
- self.skeys = skeys
-
- self.node_class = node_class
- self.node_factory = node_factory
- self.scan_check = scan_check
- if callable(recursive):
- self.recurse_nodes = recursive
- elif recursive:
- self.recurse_nodes = self._recurse_all_nodes
- else:
- self.recurse_nodes = self._recurse_no_nodes
-
- def path(self, env, dir=None, target=None, source=None):
- if not self.path_function:
- return ()
- if not self.argument is _null:
- return self.path_function(env, dir, target, source, self.argument)
- else:
- return self.path_function(env, dir, target, source)
-
- def __call__(self, node, env, path = ()):
- """
- This method scans a single object. 'node' is the node
- that will be passed to the scanner function, and 'env' is the
- environment that will be passed to the scanner function. A list of
- direct dependency nodes for the specified node will be returned.
- """
- if self.scan_check and not self.scan_check(node, env):
- return []
-
- self = self.select(node)
-
- if not self.argument is _null:
- list = self.function(node, env, path, self.argument)
- else:
- list = self.function(node, env, path)
-
- kw = {}
- if hasattr(node, 'dir'):
- kw['directory'] = node.dir
- node_factory = env.get_factory(self.node_factory)
- nodes = []
- for l in list:
- if self.node_class and not isinstance(l, self.node_class):
- l = apply(node_factory, (l,), kw)
- nodes.append(l)
- return nodes
-
- def __cmp__(self, other):
- try:
- return cmp(self.__dict__, other.__dict__)
- except AttributeError:
- # other probably doesn't have a __dict__
- return cmp(self.__dict__, other)
-
- def __hash__(self):
- return id(self)
-
- def __str__(self):
- return self.name
-
- def add_skey(self, skey):
- """Add a skey to the list of skeys"""
- self.skeys.append(skey)
-
- def get_skeys(self, env=None):
- if env and SCons.Util.is_String(self.skeys):
- return env.subst_list(self.skeys)[0]
- return self.skeys
-
- def select(self, node):
- if SCons.Util.is_Dict(self.function):
- key = node.scanner_key()
- try:
- return self.function[key]
- except KeyError:
- return None
- else:
- return self
-
- def _recurse_all_nodes(self, nodes):
- return nodes
-
- def _recurse_no_nodes(self, nodes):
- return []
-
- recurse_nodes = _recurse_no_nodes
-
- def add_scanner(self, skey, scanner):
- self.function[skey] = scanner
- self.add_skey(skey)
-
-
-class Selector(Base):
- """
- A class for selecting a more specific scanner based on the
- scanner_key() (suffix) for a specific Node.
-
- TODO: This functionality has been moved into the inner workings of
- the Base class, and this class will be deprecated at some point.
- (It was never exposed directly as part of the public interface,
- although it is used by the Scanner() factory function that was
- used by various Tool modules and therefore was likely a template
- for custom modules that may be out there.)
- """
- def __init__(self, dict, *args, **kw):
- apply(Base.__init__, (self, None,)+args, kw)
- self.dict = dict
- self.skeys = dict.keys()
-
- def __call__(self, node, env, path = ()):
- return self.select(node)(node, env, path)
-
- def select(self, node):
- try:
- return self.dict[node.scanner_key()]
- except KeyError:
- return None
-
- def add_scanner(self, skey, scanner):
- self.dict[skey] = scanner
- self.add_skey(skey)
-
-
-class Current(Base):
- """
- A class for scanning files that are source files (have no builder)
- or are derived files and are current (which implies that they exist,
- either locally or in a repository).
- """
-
- def __init__(self, *args, **kw):
- def current_check(node, env):
- return not node.has_builder() or node.is_up_to_date()
- kw['scan_check'] = current_check
- apply(Base.__init__, (self,) + args, kw)
-
-class Classic(Current):
- """
- A Scanner subclass to contain the common logic for classic CPP-style
- include scanning, but which can be customized to use different
- regular expressions to find the includes.
-
- Note that in order for this to work "out of the box" (without
- overriding the find_include() and sort_key() methods), the regular
- expression passed to the constructor must return the name of the
- include file in group 0.
- """
-
- def __init__(self, name, suffixes, path_variable, regex, *args, **kw):
-
- self.cre = re.compile(regex, re.M)
-
- def _scan(node, env, path=(), self=self):
- node = node.rfile()
- if not node.exists():
- return []
- return self.scan(node, path)
-
- kw['function'] = _scan
- kw['path_function'] = FindPathDirs(path_variable)
- kw['recursive'] = 1
- kw['skeys'] = suffixes
- kw['name'] = name
-
- apply(Current.__init__, (self,) + args, kw)
-
- def find_include(self, include, source_dir, path):
- n = SCons.Node.FS.find_file(include, (source_dir,) + tuple(path))
- return n, include
-
- def sort_key(self, include):
- return SCons.Node.FS._my_normcase(include)
-
- def find_include_names(self, node):
- return self.cre.findall(node.get_text_contents())
-
- def scan(self, node, path=()):
-
- # cache the includes list in node so we only scan it once:
- if node.includes != None:
- includes = node.includes
- else:
- includes = self.find_include_names (node)
- # Intern the names of the include files. Saves some memory
- # if the same header is included many times.
- try:
- node.includes = map(intern, includes)
- except TypeError:
- node.includes = includes
-
- # This is a hand-coded DSU (decorate-sort-undecorate, or
- # Schwartzian transform) pattern. The sort key is the raw name
- # of the file as specifed on the #include line (including the
- # " or <, since that may affect what file is found), which lets
- # us keep the sort order constant regardless of whether the file
- # is actually found in a Repository or locally.
- nodes = []
- source_dir = node.get_dir()
- if callable(path):
- path = path()
- for include in includes:
- n, i = self.find_include(include, source_dir, path)
-
- if n is None:
- SCons.Warnings.warn(SCons.Warnings.DependencyWarning,
- "No dependency generated for file: %s (included from: %s) -- file not found" % (i, node))
- else:
- sortkey = self.sort_key(include)
- nodes.append((sortkey, n))
-
- nodes.sort()
- nodes = map(lambda pair: pair[1], nodes)
- return nodes
-
-class ClassicCPP(Classic):
- """
- A Classic Scanner subclass which takes into account the type of
- bracketing used to include the file, and uses classic CPP rules
- for searching for the files based on the bracketing.
-
- Note that in order for this to work, the regular expression passed
- to the constructor must return the leading bracket in group 0, and
- the contained filename in group 1.
- """
- def find_include(self, include, source_dir, path):
- if include[0] == '"':
- paths = (source_dir,) + tuple(path)
- else:
- paths = tuple(path) + (source_dir,)
-
- n = SCons.Node.FS.find_file(include[1], paths)
-
- return n, intern(include[1])
-
- def sort_key(self, include):
- return SCons.Node.FS._my_normcase(string.join(include))
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Script/Interactive.py b/3rdParty/SCons/scons-local/SCons/Script/Interactive.py
deleted file mode 100644
index 75ca1c7..0000000
--- a/3rdParty/SCons/scons-local/SCons/Script/Interactive.py
+++ /dev/null
@@ -1,386 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Script/Interactive.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """
-SCons interactive mode
-"""
-
-# TODO:
-#
-# This has the potential to grow into something with a really big life
-# of its own, which might or might not be a good thing. Nevertheless,
-# here are some enhancements that will probably be requested some day
-# and are worth keeping in mind (assuming this takes off):
-#
-# - A command to re-read / re-load the SConscript files. This may
-# involve allowing people to specify command-line options (e.g. -f,
-# -I, --no-site-dir) that affect how the SConscript files are read.
-#
-# - Additional command-line options on the "build" command.
-#
-# Of the supported options that seemed to make sense (after a quick
-# pass through the list), the ones that seemed likely enough to be
-# used are listed in the man page and have explicit test scripts.
-#
-# These had code changed in Script/Main.py to support them, but didn't
-# seem likely to be used regularly, so had no test scripts added:
-#
-# build --diskcheck=*
-# build --implicit-cache=*
-# build --implicit-deps-changed=*
-# build --implicit-deps-unchanged=*
-#
-# These look like they should "just work" with no changes to the
-# existing code, but like those above, look unlikely to be used and
-# therefore had no test scripts added:
-#
-# build --random
-#
-# These I'm not sure about. They might be useful for individual
-# "build" commands, and may even work, but they seem unlikely enough
-# that we'll wait until they're requested before spending any time on
-# writing test scripts for them, or investigating whether they work.
-#
-# build -q [??? is there a useful analog to the exit status?]
-# build --duplicate=
-# build --profile=
-# build --max-drift=
-# build --warn=*
-# build --Y
-#
-# - Most of the SCons command-line options that the "build" command
-# supports should be settable as default options that apply to all
-# subsequent "build" commands. Maybe a "set {option}" command that
-# maps to "SetOption('{option}')".
-#
-# - Need something in the 'help' command that prints the -h output.
-#
-# - A command to run the configure subsystem separately (must see how
-# this interacts with the new automake model).
-#
-# - Command-line completion of target names; maybe even of SCons options?
-# Completion is something that's supported by the Python cmd module,
-# so this should be doable without too much trouble.
-#
-
-import cmd
-import copy
-import os
-import re
-import shlex
-import string
-import sys
-
-try:
- import readline
-except ImportError:
- pass
-
-class SConsInteractiveCmd(cmd.Cmd):
- """\
- build [TARGETS] Build the specified TARGETS and their dependencies.
- 'b' is a synonym.
- clean [TARGETS] Clean (remove) the specified TARGETS and their
- dependencies. 'c' is a synonym.
- exit Exit SCons interactive mode.
- help [COMMAND] Prints help for the specified COMMAND. 'h' and
- '?' are synonyms.
- shell [COMMANDLINE] Execute COMMANDLINE in a subshell. 'sh' and '!'
- are synonyms.
- version Prints SCons version information.
- """
-
- synonyms = {
- 'b' : 'build',
- 'c' : 'clean',
- 'h' : 'help',
- 'scons' : 'build',
- 'sh' : 'shell',
- }
-
- def __init__(self, **kw):
- cmd.Cmd.__init__(self)
- for key, val in kw.items():
- setattr(self, key, val)
-
- if sys.platform == 'win32':
- self.shell_variable = 'COMSPEC'
- else:
- self.shell_variable = 'SHELL'
-
- def default(self, argv):
- print "*** Unknown command: %s" % argv[0]
-
- def onecmd(self, line):
- line = string.strip(line)
- if not line:
- print self.lastcmd
- return self.emptyline()
- self.lastcmd = line
- if line[0] == '!':
- line = 'shell ' + line[1:]
- elif line[0] == '?':
- line = 'help ' + line[1:]
- if os.sep == '\\':
- line = string.replace(line, '\\', '\\\\')
- argv = shlex.split(line)
- argv[0] = self.synonyms.get(argv[0], argv[0])
- if not argv[0]:
- return self.default(line)
- else:
- try:
- func = getattr(self, 'do_' + argv[0])
- except AttributeError:
- return self.default(argv)
- return func(argv)
-
- def do_build(self, argv):
- """\
- build [TARGETS] Build the specified TARGETS and their
- dependencies. 'b' is a synonym.
- """
- import SCons.Node
- import SCons.SConsign
- import SCons.Script.Main
-
- options = copy.deepcopy(self.options)
-
- options, targets = self.parser.parse_args(argv[1:], values=options)
-
- SCons.Script.COMMAND_LINE_TARGETS = targets
-
- if targets:
- SCons.Script.BUILD_TARGETS = targets
- else:
- # If the user didn't specify any targets on the command line,
- # use the list of default targets.
- SCons.Script.BUILD_TARGETS = SCons.Script._build_plus_default
-
- nodes = SCons.Script.Main._build_targets(self.fs,
- options,
- targets,
- self.target_top)
-
- if not nodes:
- return
-
- # Call each of the Node's alter_targets() methods, which may
- # provide additional targets that ended up as part of the build
- # (the canonical example being a VariantDir() when we're building
- # from a source directory) and which we therefore need their
- # state cleared, too.
- x = []
- for n in nodes:
- x.extend(n.alter_targets()[0])
- nodes.extend(x)
-
- # Clean up so that we can perform the next build correctly.
- #
- # We do this by walking over all the children of the targets,
- # and clearing their state.
- #
- # We currently have to re-scan each node to find their
- # children, because built nodes have already been partially
- # cleared and don't remember their children. (In scons
- # 0.96.1 and earlier, this wasn't the case, and we didn't
- # have to re-scan the nodes.)
- #
- # Because we have to re-scan each node, we can't clear the
- # nodes as we walk over them, because we may end up rescanning
- # a cleared node as we scan a later node. Therefore, only
- # store the list of nodes that need to be cleared as we walk
- # the tree, and clear them in a separate pass.
- #
- # XXX: Someone more familiar with the inner workings of scons
- # may be able to point out a more efficient way to do this.
-
- SCons.Script.Main.progress_display("scons: Clearing cached node information ...")
-
- seen_nodes = {}
-
- def get_unseen_children(node, parent, seen_nodes=seen_nodes):
- def is_unseen(node, seen_nodes=seen_nodes):
- return not seen_nodes.has_key(node)
- return filter(is_unseen, node.children(scan=1))
-
- def add_to_seen_nodes(node, parent, seen_nodes=seen_nodes):
- seen_nodes[node] = 1
-
- # If this file is in a VariantDir and has a
- # corresponding source file in the source tree, remember the
- # node in the source tree, too. This is needed in
- # particular to clear cached implicit dependencies on the
- # source file, since the scanner will scan it if the
- # VariantDir was created with duplicate=0.
- try:
- rfile_method = node.rfile
- except AttributeError:
- return
- else:
- rfile = rfile_method()
- if rfile != node:
- seen_nodes[rfile] = 1
-
- for node in nodes:
- walker = SCons.Node.Walker(node,
- kids_func=get_unseen_children,
- eval_func=add_to_seen_nodes)
- n = walker.next()
- while n:
- n = walker.next()
-
- for node in seen_nodes.keys():
- # Call node.clear() to clear most of the state
- node.clear()
- # node.clear() doesn't reset node.state, so call
- # node.set_state() to reset it manually
- node.set_state(SCons.Node.no_state)
- node.implicit = None
-
- # Debug: Uncomment to verify that all Taskmaster reference
- # counts have been reset to zero.
- #if node.ref_count != 0:
- # from SCons.Debug import Trace
- # Trace('node %s, ref_count %s !!!\n' % (node, node.ref_count))
-
- SCons.SConsign.Reset()
- SCons.Script.Main.progress_display("scons: done clearing node information.")
-
- def do_clean(self, argv):
- """\
- clean [TARGETS] Clean (remove) the specified TARGETS
- and their dependencies. 'c' is a synonym.
- """
- return self.do_build(['build', '--clean'] + argv[1:])
-
- def do_EOF(self, argv):
- print
- self.do_exit(argv)
-
- def _do_one_help(self, arg):
- try:
- # If help_<arg>() exists, then call it.
- func = getattr(self, 'help_' + arg)
- except AttributeError:
- try:
- func = getattr(self, 'do_' + arg)
- except AttributeError:
- doc = None
- else:
- doc = self._doc_to_help(func)
- if doc:
- sys.stdout.write(doc + '\n')
- sys.stdout.flush()
- else:
- doc = self.strip_initial_spaces(func())
- if doc:
- sys.stdout.write(doc + '\n')
- sys.stdout.flush()
-
- def _doc_to_help(self, obj):
- doc = obj.__doc__
- if doc is None:
- return ''
- return self._strip_initial_spaces(doc)
-
- def _strip_initial_spaces(self, s):
- #lines = s.split('\n')
- lines = string.split(s, '\n')
- spaces = re.match(' *', lines[0]).group(0)
- #def strip_spaces(l):
- # if l.startswith(spaces):
- # l = l[len(spaces):]
- # return l
- #return '\n'.join([ strip_spaces(l) for l in lines ])
- def strip_spaces(l, spaces=spaces):
- if l[:len(spaces)] == spaces:
- l = l[len(spaces):]
- return l
- lines = map(strip_spaces, lines)
- return string.join(lines, '\n')
-
- def do_exit(self, argv):
- """\
- exit Exit SCons interactive mode.
- """
- sys.exit(0)
-
- def do_help(self, argv):
- """\
- help [COMMAND] Prints help for the specified COMMAND. 'h'
- and '?' are synonyms.
- """
- if argv[1:]:
- for arg in argv[1:]:
- if self._do_one_help(arg):
- break
- else:
- # If bare 'help' is called, print this class's doc
- # string (if it has one).
- doc = self._doc_to_help(self.__class__)
- if doc:
- sys.stdout.write(doc + '\n')
- sys.stdout.flush()
-
- def do_shell(self, argv):
- """\
- shell [COMMANDLINE] Execute COMMANDLINE in a subshell. 'sh' and
- '!' are synonyms.
- """
- import subprocess
- argv = argv[1:]
- if not argv:
- argv = os.environ[self.shell_variable]
- try:
- # Per "[Python-Dev] subprocess insufficiently platform-independent?"
- # http://mail.python.org/pipermail/python-dev/2008-August/081979.html "+
- # Doing the right thing with an argument list currently
- # requires different shell= values on Windows and Linux.
- p = subprocess.Popen(argv, shell=(sys.platform=='win32'))
- except EnvironmentError, e:
- sys.stderr.write('scons: %s: %s\n' % (argv[0], e.strerror))
- else:
- p.wait()
-
- def do_version(self, argv):
- """\
- version Prints SCons version information.
- """
- sys.stdout.write(self.parser.version + '\n')
-
-def interact(fs, parser, options, targets, target_top):
- c = SConsInteractiveCmd(prompt = 'scons>>> ',
- fs = fs,
- parser = parser,
- options = options,
- targets = targets,
- target_top = target_top)
- c.cmdloop()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Script/Main.py b/3rdParty/SCons/scons-local/SCons/Script/Main.py
deleted file mode 100644
index 537bcf1..0000000
--- a/3rdParty/SCons/scons-local/SCons/Script/Main.py
+++ /dev/null
@@ -1,1331 +0,0 @@
-"""SCons.Script
-
-This file implements the main() function used by the scons script.
-
-Architecturally, this *is* the scons script, and will likely only be
-called from the external "scons" wrapper. Consequently, anything here
-should not be, or be considered, part of the build engine. If it's
-something that we expect other software to want to use, it should go in
-some other module. If it's specific to the "scons" script invocation,
-it goes here.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Script/Main.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-import string
-import sys
-import time
-import traceback
-
-# Strip the script directory from sys.path() so on case-insensitive
-# (Windows) systems Python doesn't think that the "scons" script is the
-# "SCons" package. Replace it with our own version directory so, if
-# if they're there, we pick up the right version of the build engine
-# modules.
-#sys.path = [os.path.join(sys.prefix,
-# 'lib',
-# 'scons-%d' % SCons.__version__)] + sys.path[1:]
-
-import SCons.CacheDir
-import SCons.Debug
-import SCons.Defaults
-import SCons.Environment
-import SCons.Errors
-import SCons.Job
-import SCons.Node
-import SCons.Node.FS
-import SCons.SConf
-import SCons.Script
-import SCons.Taskmaster
-import SCons.Util
-import SCons.Warnings
-
-import SCons.Script.Interactive
-
-def fetch_win32_parallel_msg():
- # A subsidiary function that exists solely to isolate this import
- # so we don't have to pull it in on all platforms, and so that an
- # in-line "import" statement in the _main() function below doesn't
- # cause warnings about local names shadowing use of the 'SCons'
- # globl in nest scopes and UnboundLocalErrors and the like in some
- # versions (2.1) of Python.
- import SCons.Platform.win32
- return SCons.Platform.win32.parallel_msg
-
-#
-
-class SConsPrintHelpException(Exception):
- pass
-
-display = SCons.Util.display
-progress_display = SCons.Util.DisplayEngine()
-
-first_command_start = None
-last_command_end = None
-
-class Progressor:
- prev = ''
- count = 0
- target_string = '$TARGET'
-
- def __init__(self, obj, interval=1, file=None, overwrite=False):
- if file is None:
- file = sys.stdout
-
- self.obj = obj
- self.file = file
- self.interval = interval
- self.overwrite = overwrite
-
- if callable(obj):
- self.func = obj
- elif SCons.Util.is_List(obj):
- self.func = self.spinner
- elif string.find(obj, self.target_string) != -1:
- self.func = self.replace_string
- else:
- self.func = self.string
-
- def write(self, s):
- self.file.write(s)
- self.file.flush()
- self.prev = s
-
- def erase_previous(self):
- if self.prev:
- length = len(self.prev)
- if self.prev[-1] in ('\n', '\r'):
- length = length - 1
- self.write(' ' * length + '\r')
- self.prev = ''
-
- def spinner(self, node):
- self.write(self.obj[self.count % len(self.obj)])
-
- def string(self, node):
- self.write(self.obj)
-
- def replace_string(self, node):
- self.write(string.replace(self.obj, self.target_string, str(node)))
-
- def __call__(self, node):
- self.count = self.count + 1
- if (self.count % self.interval) == 0:
- if self.overwrite:
- self.erase_previous()
- self.func(node)
-
-ProgressObject = SCons.Util.Null()
-
-def Progress(*args, **kw):
- global ProgressObject
- ProgressObject = apply(Progressor, args, kw)
-
-# Task control.
-#
-
-_BuildFailures = []
-
-def GetBuildFailures():
- return _BuildFailures
-
-class BuildTask(SCons.Taskmaster.OutOfDateTask):
- """An SCons build task."""
- progress = ProgressObject
-
- def display(self, message):
- display('scons: ' + message)
-
- def prepare(self):
- self.progress(self.targets[0])
- return SCons.Taskmaster.OutOfDateTask.prepare(self)
-
- def needs_execute(self):
- if SCons.Taskmaster.OutOfDateTask.needs_execute(self):
- return True
- if self.top and self.targets[0].has_builder():
- display("scons: `%s' is up to date." % str(self.node))
- return False
-
- def execute(self):
- if print_time:
- start_time = time.time()
- global first_command_start
- if first_command_start is None:
- first_command_start = start_time
- SCons.Taskmaster.OutOfDateTask.execute(self)
- if print_time:
- global cumulative_command_time
- global last_command_end
- finish_time = time.time()
- last_command_end = finish_time
- cumulative_command_time = cumulative_command_time+finish_time-start_time
- sys.stdout.write("Command execution time: %f seconds\n"%(finish_time-start_time))
-
- def do_failed(self, status=2):
- _BuildFailures.append(self.exception[1])
- global exit_status
- global this_build_status
- if self.options.ignore_errors:
- SCons.Taskmaster.OutOfDateTask.executed(self)
- elif self.options.keep_going:
- SCons.Taskmaster.OutOfDateTask.fail_continue(self)
- exit_status = status
- this_build_status = status
- else:
- SCons.Taskmaster.OutOfDateTask.fail_stop(self)
- exit_status = status
- this_build_status = status
-
- def executed(self):
- t = self.targets[0]
- if self.top and not t.has_builder() and not t.side_effect:
- if not t.exists():
- errstr="Do not know how to make target `%s'." % t
- sys.stderr.write("scons: *** " + errstr)
- if not self.options.keep_going:
- sys.stderr.write(" Stop.")
- sys.stderr.write("\n")
- try:
- raise SCons.Errors.BuildError(t, errstr)
- except KeyboardInterrupt:
- raise
- except:
- self.exception_set()
- self.do_failed()
- else:
- print "scons: Nothing to be done for `%s'." % t
- SCons.Taskmaster.OutOfDateTask.executed(self)
- else:
- SCons.Taskmaster.OutOfDateTask.executed(self)
-
- def failed(self):
- # Handle the failure of a build task. The primary purpose here
- # is to display the various types of Errors and Exceptions
- # appropriately.
- exc_info = self.exc_info()
- try:
- t, e, tb = exc_info
- except ValueError:
- t, e = exc_info
- tb = None
-
- if t is None:
- # The Taskmaster didn't record an exception for this Task;
- # see if the sys module has one.
- try:
- t, e, tb = sys.exc_info()[:]
- except ValueError:
- t, e = exc_info
- tb = None
-
- # Deprecated string exceptions will have their string stored
- # in the first entry of the tuple.
- if e is None:
- e = t
-
- buildError = SCons.Errors.convert_to_BuildError(e)
- if not buildError.node:
- buildError.node = self.node
-
- node = buildError.node
- if not SCons.Util.is_List(node):
- node = [ node ]
- nodename = string.join(map(str, node), ', ')
-
- errfmt = "scons: *** [%s] %s\n"
- sys.stderr.write(errfmt % (nodename, buildError))
-
- if (buildError.exc_info[2] and buildError.exc_info[1] and
- # TODO(1.5)
- #not isinstance(
- # buildError.exc_info[1],
- # (EnvironmentError, SCons.Errors.StopError, SCons.Errors.UserError))):
- not isinstance(buildError.exc_info[1], EnvironmentError) and
- not isinstance(buildError.exc_info[1], SCons.Errors.StopError) and
- not isinstance(buildError.exc_info[1], SCons.Errors.UserError)):
- type, value, trace = buildError.exc_info
- traceback.print_exception(type, value, trace)
- elif tb and print_stacktrace:
- sys.stderr.write("scons: internal stack trace:\n")
- traceback.print_tb(tb, file=sys.stderr)
-
- self.exception = (e, buildError, tb) # type, value, traceback
- self.do_failed(buildError.exitstatus)
-
- self.exc_clear()
-
- def postprocess(self):
- if self.top:
- t = self.targets[0]
- for tp in self.options.tree_printers:
- tp.display(t)
- if self.options.debug_includes:
- tree = t.render_include_tree()
- if tree:
- print
- print tree
- SCons.Taskmaster.OutOfDateTask.postprocess(self)
-
- def make_ready(self):
- """Make a task ready for execution"""
- SCons.Taskmaster.OutOfDateTask.make_ready(self)
- if self.out_of_date and self.options.debug_explain:
- explanation = self.out_of_date[0].explain()
- if explanation:
- sys.stdout.write("scons: " + explanation)
-
-class CleanTask(SCons.Taskmaster.AlwaysTask):
- """An SCons clean task."""
- def fs_delete(self, path, pathstr, remove=1):
- try:
- if os.path.lexists(path):
- if os.path.isfile(path) or os.path.islink(path):
- if remove: os.unlink(path)
- display("Removed " + pathstr)
- elif os.path.isdir(path) and not os.path.islink(path):
- # delete everything in the dir
- entries = os.listdir(path)
- # Sort for deterministic output (os.listdir() Can
- # return entries in a random order).
- entries.sort()
- for e in entries:
- p = os.path.join(path, e)
- s = os.path.join(pathstr, e)
- if os.path.isfile(p):
- if remove: os.unlink(p)
- display("Removed " + s)
- else:
- self.fs_delete(p, s, remove)
- # then delete dir itself
- if remove: os.rmdir(path)
- display("Removed directory " + pathstr)
- else:
- errstr = "Path '%s' exists but isn't a file or directory."
- raise SCons.Errors.UserError(errstr % (pathstr))
- except SCons.Errors.UserError, e:
- print e
- except (IOError, OSError), e:
- print "scons: Could not remove '%s':" % pathstr, e.strerror
-
- def show(self):
- target = self.targets[0]
- if (target.has_builder() or target.side_effect) and not target.noclean:
- for t in self.targets:
- if not t.isdir():
- display("Removed " + str(t))
- if SCons.Environment.CleanTargets.has_key(target):
- files = SCons.Environment.CleanTargets[target]
- for f in files:
- self.fs_delete(f.abspath, str(f), 0)
-
- def remove(self):
- target = self.targets[0]
- if (target.has_builder() or target.side_effect) and not target.noclean:
- for t in self.targets:
- try:
- removed = t.remove()
- except OSError, e:
- # An OSError may indicate something like a permissions
- # issue, an IOError would indicate something like
- # the file not existing. In either case, print a
- # message and keep going to try to remove as many
- # targets aa possible.
- print "scons: Could not remove '%s':" % str(t), e.strerror
- else:
- if removed:
- display("Removed " + str(t))
- if SCons.Environment.CleanTargets.has_key(target):
- files = SCons.Environment.CleanTargets[target]
- for f in files:
- self.fs_delete(f.abspath, str(f))
-
- execute = remove
-
- # We want the Taskmaster to update the Node states (and therefore
- # handle reference counts, etc.), but we don't want to call
- # back to the Node's post-build methods, which would do things
- # we don't want, like store .sconsign information.
- executed = SCons.Taskmaster.Task.executed_without_callbacks
-
- # Have the taskmaster arrange to "execute" all of the targets, because
- # we'll figure out ourselves (in remove() or show() above) whether
- # anything really needs to be done.
- make_ready = SCons.Taskmaster.Task.make_ready_all
-
- def prepare(self):
- pass
-
-class QuestionTask(SCons.Taskmaster.AlwaysTask):
- """An SCons task for the -q (question) option."""
- def prepare(self):
- pass
-
- def execute(self):
- if self.targets[0].get_state() != SCons.Node.up_to_date or \
- (self.top and not self.targets[0].exists()):
- global exit_status
- global this_build_status
- exit_status = 1
- this_build_status = 1
- self.tm.stop()
-
- def executed(self):
- pass
-
-
-class TreePrinter:
- def __init__(self, derived=False, prune=False, status=False):
- self.derived = derived
- self.prune = prune
- self.status = status
- def get_all_children(self, node):
- return node.all_children()
- def get_derived_children(self, node):
- children = node.all_children(None)
- return filter(lambda x: x.has_builder(), children)
- def display(self, t):
- if self.derived:
- func = self.get_derived_children
- else:
- func = self.get_all_children
- s = self.status and 2 or 0
- SCons.Util.print_tree(t, func, prune=self.prune, showtags=s)
-
-
-def python_version_string():
- return string.split(sys.version)[0]
-
-def python_version_unsupported(version=sys.version_info):
- return version < (1, 5, 2)
-
-def python_version_deprecated(version=sys.version_info):
- return version < (2, 2, 0)
-
-
-# Global variables
-
-print_objects = 0
-print_memoizer = 0
-print_stacktrace = 0
-print_time = 0
-sconscript_time = 0
-cumulative_command_time = 0
-exit_status = 0 # final exit status, assume success by default
-this_build_status = 0 # "exit status" of an individual build
-num_jobs = None
-delayed_warnings = []
-
-class FakeOptionParser:
- """
- A do-nothing option parser, used for the initial OptionsParser variable.
-
- During normal SCons operation, the OptionsParser is created right
- away by the main() function. Certain tests scripts however, can
- introspect on different Tool modules, the initialization of which
- can try to add a new, local option to an otherwise uninitialized
- OptionsParser object. This allows that introspection to happen
- without blowing up.
-
- """
- class FakeOptionValues:
- def __getattr__(self, attr):
- return None
- values = FakeOptionValues()
- def add_local_option(self, *args, **kw):
- pass
-
-OptionsParser = FakeOptionParser()
-
-def AddOption(*args, **kw):
- if not kw.has_key('default'):
- kw['default'] = None
- result = apply(OptionsParser.add_local_option, args, kw)
- return result
-
-def GetOption(name):
- return getattr(OptionsParser.values, name)
-
-def SetOption(name, value):
- return OptionsParser.values.set_option(name, value)
-
-#
-class Stats:
- def __init__(self):
- self.stats = []
- self.labels = []
- self.append = self.do_nothing
- self.print_stats = self.do_nothing
- def enable(self, outfp):
- self.outfp = outfp
- self.append = self.do_append
- self.print_stats = self.do_print
- def do_nothing(self, *args, **kw):
- pass
-
-class CountStats(Stats):
- def do_append(self, label):
- self.labels.append(label)
- self.stats.append(SCons.Debug.fetchLoggedInstances())
- def do_print(self):
- stats_table = {}
- for s in self.stats:
- for n in map(lambda t: t[0], s):
- stats_table[n] = [0, 0, 0, 0]
- i = 0
- for s in self.stats:
- for n, c in s:
- stats_table[n][i] = c
- i = i + 1
- keys = stats_table.keys()
- keys.sort()
- self.outfp.write("Object counts:\n")
- pre = [" "]
- post = [" %s\n"]
- l = len(self.stats)
- fmt1 = string.join(pre + [' %7s']*l + post, '')
- fmt2 = string.join(pre + [' %7d']*l + post, '')
- labels = self.labels[:l]
- labels.append(("", "Class"))
- self.outfp.write(fmt1 % tuple(map(lambda x: x[0], labels)))
- self.outfp.write(fmt1 % tuple(map(lambda x: x[1], labels)))
- for k in keys:
- r = stats_table[k][:l] + [k]
- self.outfp.write(fmt2 % tuple(r))
-
-count_stats = CountStats()
-
-class MemStats(Stats):
- def do_append(self, label):
- self.labels.append(label)
- self.stats.append(SCons.Debug.memory())
- def do_print(self):
- fmt = 'Memory %-32s %12d\n'
- for label, stats in map(None, self.labels, self.stats):
- self.outfp.write(fmt % (label, stats))
-
-memory_stats = MemStats()
-
-# utility functions
-
-def _scons_syntax_error(e):
- """Handle syntax errors. Print out a message and show where the error
- occurred.
- """
- etype, value, tb = sys.exc_info()
- lines = traceback.format_exception_only(etype, value)
- for line in lines:
- sys.stderr.write(line+'\n')
- sys.exit(2)
-
-def find_deepest_user_frame(tb):
- """
- Find the deepest stack frame that is not part of SCons.
-
- Input is a "pre-processed" stack trace in the form
- returned by traceback.extract_tb() or traceback.extract_stack()
- """
-
- tb.reverse()
-
- # find the deepest traceback frame that is not part
- # of SCons:
- for frame in tb:
- filename = frame[0]
- if string.find(filename, os.sep+'SCons'+os.sep) == -1:
- return frame
- return tb[0]
-
-def _scons_user_error(e):
- """Handle user errors. Print out a message and a description of the
- error, along with the line number and routine where it occured.
- The file and line number will be the deepest stack frame that is
- not part of SCons itself.
- """
- global print_stacktrace
- etype, value, tb = sys.exc_info()
- if print_stacktrace:
- traceback.print_exception(etype, value, tb)
- filename, lineno, routine, dummy = find_deepest_user_frame(traceback.extract_tb(tb))
- sys.stderr.write("\nscons: *** %s\n" % value)
- sys.stderr.write('File "%s", line %d, in %s\n' % (filename, lineno, routine))
- sys.exit(2)
-
-def _scons_user_warning(e):
- """Handle user warnings. Print out a message and a description of
- the warning, along with the line number and routine where it occured.
- The file and line number will be the deepest stack frame that is
- not part of SCons itself.
- """
- etype, value, tb = sys.exc_info()
- filename, lineno, routine, dummy = find_deepest_user_frame(traceback.extract_tb(tb))
- sys.stderr.write("\nscons: warning: %s\n" % e)
- sys.stderr.write('File "%s", line %d, in %s\n' % (filename, lineno, routine))
-
-def _scons_internal_warning(e):
- """Slightly different from _scons_user_warning in that we use the
- *current call stack* rather than sys.exc_info() to get our stack trace.
- This is used by the warnings framework to print warnings."""
- filename, lineno, routine, dummy = find_deepest_user_frame(traceback.extract_stack())
- sys.stderr.write("\nscons: warning: %s\n" % e[0])
- sys.stderr.write('File "%s", line %d, in %s\n' % (filename, lineno, routine))
-
-def _scons_internal_error():
- """Handle all errors but user errors. Print out a message telling
- the user what to do in this case and print a normal trace.
- """
- print 'internal error'
- traceback.print_exc()
- sys.exit(2)
-
-def _SConstruct_exists(dirname='', repositories=[], filelist=None):
- """This function checks that an SConstruct file exists in a directory.
- If so, it returns the path of the file. By default, it checks the
- current directory.
- """
- if not filelist:
- filelist = ['SConstruct', 'Sconstruct', 'sconstruct']
- for file in filelist:
- sfile = os.path.join(dirname, file)
- if os.path.isfile(sfile):
- return sfile
- if not os.path.isabs(sfile):
- for rep in repositories:
- if os.path.isfile(os.path.join(rep, sfile)):
- return sfile
- return None
-
-def _set_debug_values(options):
- global print_memoizer, print_objects, print_stacktrace, print_time
-
- debug_values = options.debug
-
- if "count" in debug_values:
- # All of the object counts are within "if __debug__:" blocks,
- # which get stripped when running optimized (with python -O or
- # from compiled *.pyo files). Provide a warning if __debug__ is
- # stripped, so it doesn't just look like --debug=count is broken.
- enable_count = False
- if __debug__: enable_count = True
- if enable_count:
- count_stats.enable(sys.stdout)
- else:
- msg = "--debug=count is not supported when running SCons\n" + \
- "\twith the python -O option or optimized (.pyo) modules."
- SCons.Warnings.warn(SCons.Warnings.NoObjectCountWarning, msg)
- if "dtree" in debug_values:
- options.tree_printers.append(TreePrinter(derived=True))
- options.debug_explain = ("explain" in debug_values)
- if "findlibs" in debug_values:
- SCons.Scanner.Prog.print_find_libs = "findlibs"
- options.debug_includes = ("includes" in debug_values)
- print_memoizer = ("memoizer" in debug_values)
- if "memory" in debug_values:
- memory_stats.enable(sys.stdout)
- print_objects = ("objects" in debug_values)
- if "presub" in debug_values:
- SCons.Action.print_actions_presub = 1
- if "stacktrace" in debug_values:
- print_stacktrace = 1
- if "stree" in debug_values:
- options.tree_printers.append(TreePrinter(status=True))
- if "time" in debug_values:
- print_time = 1
- if "tree" in debug_values:
- options.tree_printers.append(TreePrinter())
-
-def _create_path(plist):
- path = '.'
- for d in plist:
- if os.path.isabs(d):
- path = d
- else:
- path = path + '/' + d
- return path
-
-def _load_site_scons_dir(topdir, site_dir_name=None):
- """Load the site_scons dir under topdir.
- Adds site_scons to sys.path, imports site_scons/site_init.py,
- and adds site_scons/site_tools to default toolpath."""
- if site_dir_name:
- err_if_not_found = True # user specified: err if missing
- else:
- site_dir_name = "site_scons"
- err_if_not_found = False
-
- site_dir = os.path.join(topdir.path, site_dir_name)
- if not os.path.exists(site_dir):
- if err_if_not_found:
- raise SCons.Errors.UserError, "site dir %s not found."%site_dir
- return
-
- site_init_filename = "site_init.py"
- site_init_modname = "site_init"
- site_tools_dirname = "site_tools"
- sys.path = [os.path.abspath(site_dir)] + sys.path
- site_init_file = os.path.join(site_dir, site_init_filename)
- site_tools_dir = os.path.join(site_dir, site_tools_dirname)
- if os.path.exists(site_init_file):
- import imp
- try:
- fp, pathname, description = imp.find_module(site_init_modname,
- [site_dir])
- try:
- imp.load_module(site_init_modname, fp, pathname, description)
- finally:
- if fp:
- fp.close()
- except ImportError, e:
- sys.stderr.write("Can't import site init file '%s': %s\n"%(site_init_file, e))
- raise
- except Exception, e:
- sys.stderr.write("Site init file '%s' raised exception: %s\n"%(site_init_file, e))
- raise
- if os.path.exists(site_tools_dir):
- SCons.Tool.DefaultToolpath.append(os.path.abspath(site_tools_dir))
-
-def version_string(label, module):
- version = module.__version__
- build = module.__build__
- if build:
- if build[0] != '.':
- build = '.' + build
- version = version + build
- fmt = "\t%s: v%s, %s, by %s on %s\n"
- return fmt % (label,
- version,
- module.__date__,
- module.__developer__,
- module.__buildsys__)
-
-def _main(parser):
- global exit_status
- global this_build_status
-
- options = parser.values
-
- # Here's where everything really happens.
-
- # First order of business: set up default warnings and then
- # handle the user's warning options, so that we can issue (or
- # suppress) appropriate warnings about anything that might happen,
- # as configured by the user.
-
- default_warnings = [ SCons.Warnings.CorruptSConsignWarning,
- SCons.Warnings.DeprecatedWarning,
- SCons.Warnings.DuplicateEnvironmentWarning,
- SCons.Warnings.FutureReservedVariableWarning,
- SCons.Warnings.LinkWarning,
- SCons.Warnings.MissingSConscriptWarning,
- SCons.Warnings.NoMD5ModuleWarning,
- SCons.Warnings.NoMetaclassSupportWarning,
- SCons.Warnings.NoObjectCountWarning,
- SCons.Warnings.NoParallelSupportWarning,
- SCons.Warnings.MisleadingKeywordsWarning,
- SCons.Warnings.ReservedVariableWarning,
- SCons.Warnings.StackSizeWarning,
- ]
-
- for warning in default_warnings:
- SCons.Warnings.enableWarningClass(warning)
- SCons.Warnings._warningOut = _scons_internal_warning
- SCons.Warnings.process_warn_strings(options.warn)
-
- # Now that we have the warnings configuration set up, we can actually
- # issue (or suppress) any warnings about warning-worthy things that
- # occurred while the command-line options were getting parsed.
- try:
- dw = options.delayed_warnings
- except AttributeError:
- pass
- else:
- delayed_warnings.extend(dw)
- for warning_type, message in delayed_warnings:
- SCons.Warnings.warn(warning_type, message)
-
- if options.diskcheck:
- SCons.Node.FS.set_diskcheck(options.diskcheck)
-
- # Next, we want to create the FS object that represents the outside
- # world's file system, as that's central to a lot of initialization.
- # To do this, however, we need to be in the directory from which we
- # want to start everything, which means first handling any relevant
- # options that might cause us to chdir somewhere (-C, -D, -U, -u).
- if options.directory:
- cdir = _create_path(options.directory)
- try:
- os.chdir(cdir)
- except OSError:
- sys.stderr.write("Could not change directory to %s\n" % cdir)
-
- target_top = None
- if options.climb_up:
- target_top = '.' # directory to prepend to targets
- script_dir = os.getcwd() # location of script
- while script_dir and not _SConstruct_exists(script_dir,
- options.repository,
- options.file):
- script_dir, last_part = os.path.split(script_dir)
- if last_part:
- target_top = os.path.join(last_part, target_top)
- else:
- script_dir = ''
- if script_dir and script_dir != os.getcwd():
- display("scons: Entering directory `%s'" % script_dir)
- os.chdir(script_dir)
-
- # Now that we're in the top-level SConstruct directory, go ahead
- # and initialize the FS object that represents the file system,
- # and make it the build engine default.
- fs = SCons.Node.FS.get_default_fs()
-
- for rep in options.repository:
- fs.Repository(rep)
-
- # Now that we have the FS object, the next order of business is to
- # check for an SConstruct file (or other specified config file).
- # If there isn't one, we can bail before doing any more work.
- scripts = []
- if options.file:
- scripts.extend(options.file)
- if not scripts:
- sfile = _SConstruct_exists(repositories=options.repository,
- filelist=options.file)
- if sfile:
- scripts.append(sfile)
-
- if not scripts:
- if options.help:
- # There's no SConstruct, but they specified -h.
- # Give them the options usage now, before we fail
- # trying to read a non-existent SConstruct file.
- raise SConsPrintHelpException
- raise SCons.Errors.UserError, "No SConstruct file found."
-
- if scripts[0] == "-":
- d = fs.getcwd()
- else:
- d = fs.File(scripts[0]).dir
- fs.set_SConstruct_dir(d)
-
- _set_debug_values(options)
- SCons.Node.implicit_cache = options.implicit_cache
- SCons.Node.implicit_deps_changed = options.implicit_deps_changed
- SCons.Node.implicit_deps_unchanged = options.implicit_deps_unchanged
-
- if options.no_exec:
- SCons.SConf.dryrun = 1
- SCons.Action.execute_actions = None
- if options.question:
- SCons.SConf.dryrun = 1
- if options.clean:
- SCons.SConf.SetBuildType('clean')
- if options.help:
- SCons.SConf.SetBuildType('help')
- SCons.SConf.SetCacheMode(options.config)
- SCons.SConf.SetProgressDisplay(progress_display)
-
- if options.no_progress or options.silent:
- progress_display.set_mode(0)
-
- if options.site_dir:
- _load_site_scons_dir(d, options.site_dir)
- elif not options.no_site_dir:
- _load_site_scons_dir(d)
-
- if options.include_dir:
- sys.path = options.include_dir + sys.path
-
- # That should cover (most of) the options. Next, set up the variables
- # that hold command-line arguments, so the SConscript files that we
- # read and execute have access to them.
- targets = []
- xmit_args = []
- for a in parser.largs:
- if a[0] == '-':
- continue
- if '=' in a:
- xmit_args.append(a)
- else:
- targets.append(a)
- SCons.Script._Add_Targets(targets + parser.rargs)
- SCons.Script._Add_Arguments(xmit_args)
-
- # If stdout is not a tty, replace it with a wrapper object to call flush
- # after every write.
- #
- # Tty devices automatically flush after every newline, so the replacement
- # isn't necessary. Furthermore, if we replace sys.stdout, the readline
- # module will no longer work. This affects the behavior during
- # --interactive mode. --interactive should only be used when stdin and
- # stdout refer to a tty.
- if not sys.stdout.isatty():
- sys.stdout = SCons.Util.Unbuffered(sys.stdout)
- if not sys.stderr.isatty():
- sys.stderr = SCons.Util.Unbuffered(sys.stderr)
-
- memory_stats.append('before reading SConscript files:')
- count_stats.append(('pre-', 'read'))
-
- # And here's where we (finally) read the SConscript files.
-
- progress_display("scons: Reading SConscript files ...")
-
- start_time = time.time()
- try:
- for script in scripts:
- SCons.Script._SConscript._SConscript(fs, script)
- except SCons.Errors.StopError, e:
- # We had problems reading an SConscript file, such as it
- # couldn't be copied in to the VariantDir. Since we're just
- # reading SConscript files and haven't started building
- # things yet, stop regardless of whether they used -i or -k
- # or anything else.
- sys.stderr.write("scons: *** %s Stop.\n" % e)
- exit_status = 2
- sys.exit(exit_status)
- global sconscript_time
- sconscript_time = time.time() - start_time
-
- progress_display("scons: done reading SConscript files.")
-
- memory_stats.append('after reading SConscript files:')
- count_stats.append(('post-', 'read'))
-
- # Re-{enable,disable} warnings in case they disabled some in
- # the SConscript file.
- #
- # We delay enabling the PythonVersionWarning class until here so that,
- # if they explicity disabled it in either in the command line or in
- # $SCONSFLAGS, or in the SConscript file, then the search through
- # the list of deprecated warning classes will find that disabling
- # first and not issue the warning.
- SCons.Warnings.enableWarningClass(SCons.Warnings.PythonVersionWarning)
- SCons.Warnings.process_warn_strings(options.warn)
-
- # Now that we've read the SConscript files, we can check for the
- # warning about deprecated Python versions--delayed until here
- # in case they disabled the warning in the SConscript files.
- if python_version_deprecated():
- msg = "Support for pre-2.2 Python (%s) is deprecated.\n" + \
- " If this will cause hardship, contact dev@scons.tigris.org."
- SCons.Warnings.warn(SCons.Warnings.PythonVersionWarning,
- msg % python_version_string())
-
- if not options.help:
- SCons.SConf.CreateConfigHBuilder(SCons.Defaults.DefaultEnvironment())
-
- # Now re-parse the command-line options (any to the left of a '--'
- # argument, that is) with any user-defined command-line options that
- # the SConscript files may have added to the parser object. This will
- # emit the appropriate error message and exit if any unknown option
- # was specified on the command line.
-
- parser.preserve_unknown_options = False
- parser.parse_args(parser.largs, options)
-
- if options.help:
- help_text = SCons.Script.help_text
- if help_text is None:
- # They specified -h, but there was no Help() inside the
- # SConscript files. Give them the options usage.
- raise SConsPrintHelpException
- else:
- print help_text
- print "Use scons -H for help about command-line options."
- exit_status = 0
- return
-
- # Change directory to the top-level SConstruct directory, then tell
- # the Node.FS subsystem that we're all done reading the SConscript
- # files and calling Repository() and VariantDir() and changing
- # directories and the like, so it can go ahead and start memoizing
- # the string values of file system nodes.
-
- fs.chdir(fs.Top)
-
- SCons.Node.FS.save_strings(1)
-
- # Now that we've read the SConscripts we can set the options
- # that are SConscript settable:
- SCons.Node.implicit_cache = options.implicit_cache
- SCons.Node.FS.set_duplicate(options.duplicate)
- fs.set_max_drift(options.max_drift)
-
- SCons.Job.explicit_stack_size = options.stack_size
-
- if options.md5_chunksize:
- SCons.Node.FS.File.md5_chunksize = options.md5_chunksize
-
- platform = SCons.Platform.platform_module()
-
- if options.interactive:
- SCons.Script.Interactive.interact(fs, OptionsParser, options,
- targets, target_top)
-
- else:
-
- # Build the targets
- nodes = _build_targets(fs, options, targets, target_top)
- if not nodes:
- exit_status = 2
-
-def _build_targets(fs, options, targets, target_top):
-
- global this_build_status
- this_build_status = 0
-
- progress_display.set_mode(not (options.no_progress or options.silent))
- display.set_mode(not options.silent)
- SCons.Action.print_actions = not options.silent
- SCons.Action.execute_actions = not options.no_exec
- SCons.Node.FS.do_store_info = not options.no_exec
- SCons.SConf.dryrun = options.no_exec
-
- if options.diskcheck:
- SCons.Node.FS.set_diskcheck(options.diskcheck)
-
- SCons.CacheDir.cache_enabled = not options.cache_disable
- SCons.CacheDir.cache_debug = options.cache_debug
- SCons.CacheDir.cache_force = options.cache_force
- SCons.CacheDir.cache_show = options.cache_show
-
- if options.no_exec:
- CleanTask.execute = CleanTask.show
- else:
- CleanTask.execute = CleanTask.remove
-
- lookup_top = None
- if targets or SCons.Script.BUILD_TARGETS != SCons.Script._build_plus_default:
- # They specified targets on the command line or modified
- # BUILD_TARGETS in the SConscript file(s), so if they used -u,
- # -U or -D, we have to look up targets relative to the top,
- # but we build whatever they specified.
- if target_top:
- lookup_top = fs.Dir(target_top)
- target_top = None
-
- targets = SCons.Script.BUILD_TARGETS
- else:
- # There are no targets specified on the command line,
- # so if they used -u, -U or -D, we may have to restrict
- # what actually gets built.
- d = None
- if target_top:
- if options.climb_up == 1:
- # -u, local directory and below
- target_top = fs.Dir(target_top)
- lookup_top = target_top
- elif options.climb_up == 2:
- # -D, all Default() targets
- target_top = None
- lookup_top = None
- elif options.climb_up == 3:
- # -U, local SConscript Default() targets
- target_top = fs.Dir(target_top)
- def check_dir(x, target_top=target_top):
- if hasattr(x, 'cwd') and not x.cwd is None:
- cwd = x.cwd.srcnode()
- return cwd == target_top
- else:
- # x doesn't have a cwd, so it's either not a target,
- # or not a file, so go ahead and keep it as a default
- # target and let the engine sort it out:
- return 1
- d = filter(check_dir, SCons.Script.DEFAULT_TARGETS)
- SCons.Script.DEFAULT_TARGETS[:] = d
- target_top = None
- lookup_top = None
-
- targets = SCons.Script._Get_Default_Targets(d, fs)
-
- if not targets:
- sys.stderr.write("scons: *** No targets specified and no Default() targets found. Stop.\n")
- return None
-
- def Entry(x, ltop=lookup_top, ttop=target_top, fs=fs):
- if isinstance(x, SCons.Node.Node):
- node = x
- else:
- node = None
- # Why would ltop be None? Unfortunately this happens.
- if ltop == None: ltop = ''
- # Curdir becomes important when SCons is called with -u, -C,
- # or similar option that changes directory, and so the paths
- # of targets given on the command line need to be adjusted.
- curdir = os.path.join(os.getcwd(), str(ltop))
- for lookup in SCons.Node.arg2nodes_lookups:
- node = lookup(x, curdir=curdir)
- if node != None:
- break
- if node is None:
- node = fs.Entry(x, directory=ltop, create=1)
- if ttop and not node.is_under(ttop):
- if isinstance(node, SCons.Node.FS.Dir) and ttop.is_under(node):
- node = ttop
- else:
- node = None
- return node
-
- nodes = filter(None, map(Entry, targets))
-
- task_class = BuildTask # default action is to build targets
- opening_message = "Building targets ..."
- closing_message = "done building targets."
- if options.keep_going:
- failure_message = "done building targets (errors occurred during build)."
- else:
- failure_message = "building terminated because of errors."
- if options.question:
- task_class = QuestionTask
- try:
- if options.clean:
- task_class = CleanTask
- opening_message = "Cleaning targets ..."
- closing_message = "done cleaning targets."
- if options.keep_going:
- failure_message = "done cleaning targets (errors occurred during clean)."
- else:
- failure_message = "cleaning terminated because of errors."
- except AttributeError:
- pass
-
- task_class.progress = ProgressObject
-
- if options.random:
- def order(dependencies):
- """Randomize the dependencies."""
- import random
- # This is cribbed from the implementation of
- # random.shuffle() in Python 2.X.
- d = dependencies
- for i in xrange(len(d)-1, 0, -1):
- j = int(random.random() * (i+1))
- d[i], d[j] = d[j], d[i]
- return d
- else:
- def order(dependencies):
- """Leave the order of dependencies alone."""
- return dependencies
-
- if options.taskmastertrace_file == '-':
- tmtrace = sys.stdout
- elif options.taskmastertrace_file:
- tmtrace = open(options.taskmastertrace_file, 'wb')
- else:
- tmtrace = None
- taskmaster = SCons.Taskmaster.Taskmaster(nodes, task_class, order, tmtrace)
-
- # Let the BuildTask objects get at the options to respond to the
- # various print_* settings, tree_printer list, etc.
- BuildTask.options = options
-
- global num_jobs
- num_jobs = options.num_jobs
- jobs = SCons.Job.Jobs(num_jobs, taskmaster)
- if num_jobs > 1:
- msg = None
- if jobs.num_jobs == 1:
- msg = "parallel builds are unsupported by this version of Python;\n" + \
- "\tignoring -j or num_jobs option.\n"
- elif sys.platform == 'win32':
- msg = fetch_win32_parallel_msg()
- if msg:
- SCons.Warnings.warn(SCons.Warnings.NoParallelSupportWarning, msg)
-
- memory_stats.append('before building targets:')
- count_stats.append(('pre-', 'build'))
-
- def jobs_postfunc(
- jobs=jobs,
- options=options,
- closing_message=closing_message,
- failure_message=failure_message
- ):
- if jobs.were_interrupted():
- if not options.no_progress and not options.silent:
- sys.stderr.write("scons: Build interrupted.\n")
- global exit_status
- global this_build_status
- exit_status = 2
- this_build_status = 2
-
- if this_build_status:
- progress_display("scons: " + failure_message)
- else:
- progress_display("scons: " + closing_message)
- if not options.no_exec:
- if jobs.were_interrupted():
- progress_display("scons: writing .sconsign file.")
- SCons.SConsign.write()
-
- progress_display("scons: " + opening_message)
- jobs.run(postfunc = jobs_postfunc)
-
- memory_stats.append('after building targets:')
- count_stats.append(('post-', 'build'))
-
- return nodes
-
-def _exec_main(parser, values):
- sconsflags = os.environ.get('SCONSFLAGS', '')
- all_args = string.split(sconsflags) + sys.argv[1:]
-
- options, args = parser.parse_args(all_args, values)
-
- if type(options.debug) == type([]) and "pdb" in options.debug:
- import pdb
- pdb.Pdb().runcall(_main, parser)
- elif options.profile_file:
- try:
- from cProfile import Profile
- except ImportError, e:
- from profile import Profile
-
- # Some versions of Python 2.4 shipped a profiler that had the
- # wrong 'c_exception' entry in its dispatch table. Make sure
- # we have the right one. (This may put an unnecessary entry
- # in the table in earlier versions of Python, but its presence
- # shouldn't hurt anything).
- try:
- dispatch = Profile.dispatch
- except AttributeError:
- pass
- else:
- dispatch['c_exception'] = Profile.trace_dispatch_return
-
- prof = Profile()
- try:
- prof.runcall(_main, parser)
- except SConsPrintHelpException, e:
- prof.dump_stats(options.profile_file)
- raise e
- except SystemExit:
- pass
- prof.dump_stats(options.profile_file)
- else:
- _main(parser)
-
-def main():
- global OptionsParser
- global exit_status
- global first_command_start
-
- # Check up front for a Python version we do not support. We
- # delay the check for deprecated Python versions until later,
- # after the SConscript files have been read, in case they
- # disable that warning.
- if python_version_unsupported():
- msg = "scons: *** SCons version %s does not run under Python version %s.\n"
- sys.stderr.write(msg % (SCons.__version__, python_version_string()))
- sys.exit(1)
-
- parts = ["SCons by Steven Knight et al.:\n"]
- try:
- import __main__
- parts.append(version_string("script", __main__))
- except (ImportError, AttributeError):
- # On Windows there is no scons.py, so there is no
- # __main__.__version__, hence there is no script version.
- pass
- parts.append(version_string("engine", SCons))
- parts.append("Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation")
- version = string.join(parts, '')
-
- import SConsOptions
- parser = SConsOptions.Parser(version)
- values = SConsOptions.SConsValues(parser.get_default_values())
-
- OptionsParser = parser
-
- try:
- _exec_main(parser, values)
- except SystemExit, s:
- if s:
- exit_status = s
- except KeyboardInterrupt:
- print("scons: Build interrupted.")
- sys.exit(2)
- except SyntaxError, e:
- _scons_syntax_error(e)
- except SCons.Errors.InternalError:
- _scons_internal_error()
- except SCons.Errors.UserError, e:
- _scons_user_error(e)
- except SConsPrintHelpException:
- parser.print_help()
- exit_status = 0
- except SCons.Errors.BuildError, e:
- exit_status = e.exitstatus
- except:
- # An exception here is likely a builtin Python exception Python
- # code in an SConscript file. Show them precisely what the
- # problem was and where it happened.
- SCons.Script._SConscript.SConscript_exception()
- sys.exit(2)
-
- memory_stats.print_stats()
- count_stats.print_stats()
-
- if print_objects:
- SCons.Debug.listLoggedInstances('*')
- #SCons.Debug.dumpLoggedInstances('*')
-
- if print_memoizer:
- SCons.Memoize.Dump("Memoizer (memory cache) hits and misses:")
-
- # Dump any development debug info that may have been enabled.
- # These are purely for internal debugging during development, so
- # there's no need to control them with --debug= options; they're
- # controlled by changing the source code.
- SCons.Debug.dump_caller_counts()
- SCons.Taskmaster.dump_stats()
-
- if print_time:
- total_time = time.time() - SCons.Script.start_time
- if num_jobs == 1:
- ct = cumulative_command_time
- else:
- if last_command_end is None or first_command_start is None:
- ct = 0.0
- else:
- ct = last_command_end - first_command_start
- scons_time = total_time - sconscript_time - ct
- print "Total build time: %f seconds"%total_time
- print "Total SConscript file execution time: %f seconds"%sconscript_time
- print "Total SCons execution time: %f seconds"%scons_time
- print "Total command execution time: %f seconds"%ct
-
- sys.exit(exit_status)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Script/SConsOptions.py b/3rdParty/SCons/scons-local/SCons/Script/SConsOptions.py
deleted file mode 100644
index 7724590..0000000
--- a/3rdParty/SCons/scons-local/SCons/Script/SConsOptions.py
+++ /dev/null
@@ -1,946 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Script/SConsOptions.py 4043 2009/02/23 09:06:45 scons"
-
-import optparse
-import re
-import string
-import sys
-import textwrap
-
-try:
- no_hyphen_re = re.compile(r'(\s+|(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))')
-except re.error:
- # Pre-2.0 Python versions don't have the (?<= negative
- # look-behind assertion.
- no_hyphen_re = re.compile(r'(\s+|-*\w{2,}-(?=\w{2,}))')
-
-try:
- from gettext import gettext
-except ImportError:
- def gettext(message):
- return message
-_ = gettext
-
-import SCons.Node.FS
-import SCons.Warnings
-
-OptionValueError = optparse.OptionValueError
-SUPPRESS_HELP = optparse.SUPPRESS_HELP
-
-diskcheck_all = SCons.Node.FS.diskcheck_types()
-
-def diskcheck_convert(value):
- if value is None:
- return []
- if not SCons.Util.is_List(value):
- value = string.split(value, ',')
- result = []
- for v in map(string.lower, value):
- if v == 'all':
- result = diskcheck_all
- elif v == 'none':
- result = []
- elif v in diskcheck_all:
- result.append(v)
- else:
- raise ValueError, v
- return result
-
-class SConsValues(optparse.Values):
- """
- Holder class for uniform access to SCons options, regardless
- of whether or not they can be set on the command line or in the
- SConscript files (using the SetOption() function).
-
- A SCons option value can originate three different ways:
-
- 1) set on the command line;
- 2) set in an SConscript file;
- 3) the default setting (from the the op.add_option()
- calls in the Parser() function, below).
-
- The command line always overrides a value set in a SConscript file,
- which in turn always overrides default settings. Because we want
- to support user-specified options in the SConscript file itself,
- though, we may not know about all of the options when the command
- line is first parsed, so we can't make all the necessary precedence
- decisions at the time the option is configured.
-
- The solution implemented in this class is to keep these different sets
- of settings separate (command line, SConscript file, and default)
- and to override the __getattr__() method to check them in turn.
- This should allow the rest of the code to just fetch values as
- attributes of an instance of this class, without having to worry
- about where they came from.
-
- Note that not all command line options are settable from SConscript
- files, and the ones that are must be explicitly added to the
- "settable" list in this class, and optionally validated and coerced
- in the set_option() method.
- """
-
- def __init__(self, defaults):
- self.__dict__['__defaults__'] = defaults
- self.__dict__['__SConscript_settings__'] = {}
-
- def __getattr__(self, attr):
- """
- Fetches an options value, checking first for explicit settings
- from the command line (which are direct attributes), then the
- SConscript file settings, then the default values.
- """
- try:
- return self.__dict__[attr]
- except KeyError:
- try:
- return self.__dict__['__SConscript_settings__'][attr]
- except KeyError:
- return getattr(self.__dict__['__defaults__'], attr)
-
- settable = [
- 'clean',
- 'diskcheck',
- 'duplicate',
- 'help',
- 'implicit_cache',
- 'max_drift',
- 'md5_chunksize',
- 'no_exec',
- 'num_jobs',
- 'random',
- 'stack_size',
- 'warn',
- ]
-
- def set_option(self, name, value):
- """
- Sets an option from an SConscript file.
- """
- if not name in self.settable:
- raise SCons.Errors.UserError, "This option is not settable from a SConscript file: %s"%name
-
- if name == 'num_jobs':
- try:
- value = int(value)
- if value < 1:
- raise ValueError
- except ValueError:
- raise SCons.Errors.UserError, "A positive integer is required: %s"%repr(value)
- elif name == 'max_drift':
- try:
- value = int(value)
- except ValueError:
- raise SCons.Errors.UserError, "An integer is required: %s"%repr(value)
- elif name == 'duplicate':
- try:
- value = str(value)
- except ValueError:
- raise SCons.Errors.UserError, "A string is required: %s"%repr(value)
- if not value in SCons.Node.FS.Valid_Duplicates:
- raise SCons.Errors.UserError, "Not a valid duplication style: %s" % value
- # Set the duplicate style right away so it can affect linking
- # of SConscript files.
- SCons.Node.FS.set_duplicate(value)
- elif name == 'diskcheck':
- try:
- value = diskcheck_convert(value)
- except ValueError, v:
- raise SCons.Errors.UserError, "Not a valid diskcheck value: %s"%v
- if not self.__dict__.has_key('diskcheck'):
- # No --diskcheck= option was specified on the command line.
- # Set this right away so it can affect the rest of the
- # file/Node lookups while processing the SConscript files.
- SCons.Node.FS.set_diskcheck(value)
- elif name == 'stack_size':
- try:
- value = int(value)
- except ValueError:
- raise SCons.Errors.UserError, "An integer is required: %s"%repr(value)
- elif name == 'md5_chunksize':
- try:
- value = int(value)
- except ValueError:
- raise SCons.Errors.UserError, "An integer is required: %s"%repr(value)
- elif name == 'warn':
- if SCons.Util.is_String(value):
- value = [value]
- value = self.__SConscript_settings__.get(name, []) + value
- SCons.Warnings.process_warn_strings(value)
-
- self.__SConscript_settings__[name] = value
-
-class SConsOption(optparse.Option):
- def convert_value(self, opt, value):
- if value is not None:
- if self.nargs in (1, '?'):
- return self.check_value(opt, value)
- else:
- return tuple(map(lambda v, o=opt, s=self: s.check_value(o, v), value))
-
- def process(self, opt, value, values, parser):
-
- # First, convert the value(s) to the right type. Howl if any
- # value(s) are bogus.
- value = self.convert_value(opt, value)
-
- # And then take whatever action is expected of us.
- # This is a separate method to make life easier for
- # subclasses to add new actions.
- return self.take_action(
- self.action, self.dest, opt, value, values, parser)
-
- def _check_nargs_optional(self):
- if self.nargs == '?' and self._short_opts:
- fmt = "option %s: nargs='?' is incompatible with short options"
- raise SCons.Errors.UserError, fmt % self._short_opts[0]
-
- try:
- _orig_CONST_ACTIONS = optparse.Option.CONST_ACTIONS
-
- _orig_CHECK_METHODS = optparse.Option.CHECK_METHODS
-
- except AttributeError:
- # optparse.Option had no CONST_ACTIONS before Python 2.5.
-
- _orig_CONST_ACTIONS = ("store_const",)
-
- def _check_const(self):
- if self.action not in self.CONST_ACTIONS and self.const is not None:
- raise OptionError(
- "'const' must not be supplied for action %r" % self.action,
- self)
-
- # optparse.Option collects its list of unbound check functions
- # up front. This sucks because it means we can't just override
- # the _check_const() function like a normal method, we have to
- # actually replace it in the list. This seems to be the most
- # straightforward way to do that.
-
- _orig_CHECK_METHODS = [optparse.Option._check_action,
- optparse.Option._check_type,
- optparse.Option._check_choice,
- optparse.Option._check_dest,
- _check_const,
- optparse.Option._check_nargs,
- optparse.Option._check_callback]
-
- CHECK_METHODS = _orig_CHECK_METHODS + [_check_nargs_optional]
-
- CONST_ACTIONS = _orig_CONST_ACTIONS + optparse.Option.TYPED_ACTIONS
-
-class SConsOptionGroup(optparse.OptionGroup):
- """
- A subclass for SCons-specific option groups.
-
- The only difference between this and the base class is that we print
- the group's help text flush left, underneath their own title but
- lined up with the normal "SCons Options".
- """
- def format_help(self, formatter):
- """
- Format an option group's help text, outdenting the title so it's
- flush with the "SCons Options" title we print at the top.
- """
- formatter.dedent()
- result = formatter.format_heading(self.title)
- formatter.indent()
- result = result + optparse.OptionContainer.format_help(self, formatter)
- return result
-
-class SConsOptionParser(optparse.OptionParser):
- preserve_unknown_options = False
-
- def error(self, msg):
- self.print_usage(sys.stderr)
- sys.stderr.write("SCons error: %s\n" % msg)
- sys.exit(2)
-
- def _process_long_opt(self, rargs, values):
- """
- SCons-specific processing of long options.
-
- This is copied directly from the normal
- optparse._process_long_opt() method, except that, if configured
- to do so, we catch the exception thrown when an unknown option
- is encountered and just stick it back on the "leftover" arguments
- for later (re-)processing.
- """
- arg = rargs.pop(0)
-
- # Value explicitly attached to arg? Pretend it's the next
- # argument.
- if "=" in arg:
- (opt, next_arg) = string.split(arg, "=", 1)
- rargs.insert(0, next_arg)
- had_explicit_value = True
- else:
- opt = arg
- had_explicit_value = False
-
- try:
- opt = self._match_long_opt(opt)
- except optparse.BadOptionError:
- if self.preserve_unknown_options:
- # SCons-specific: if requested, add unknown options to
- # the "leftover arguments" list for later processing.
- self.largs.append(arg)
- if had_explicit_value:
- # The unknown option will be re-processed later,
- # so undo the insertion of the explicit value.
- rargs.pop(0)
- return
- raise
-
- option = self._long_opt[opt]
- if option.takes_value():
- nargs = option.nargs
- if nargs == '?':
- if had_explicit_value:
- value = rargs.pop(0)
- else:
- value = option.const
- elif len(rargs) < nargs:
- if nargs == 1:
- self.error(_("%s option requires an argument") % opt)
- else:
- self.error(_("%s option requires %d arguments")
- % (opt, nargs))
- elif nargs == 1:
- value = rargs.pop(0)
- else:
- value = tuple(rargs[0:nargs])
- del rargs[0:nargs]
-
- elif had_explicit_value:
- self.error(_("%s option does not take a value") % opt)
-
- else:
- value = None
-
- option.process(opt, value, values, self)
-
- def add_local_option(self, *args, **kw):
- """
- Adds a local option to the parser.
-
- This is initiated by a SetOption() call to add a user-defined
- command-line option. We add the option to a separate option
- group for the local options, creating the group if necessary.
- """
- try:
- group = self.local_option_group
- except AttributeError:
- group = SConsOptionGroup(self, 'Local Options')
- group = self.add_option_group(group)
- self.local_option_group = group
-
- result = apply(group.add_option, args, kw)
-
- if result:
- # The option was added succesfully. We now have to add the
- # default value to our object that holds the default values
- # (so that an attempt to fetch the option's attribute will
- # yield the default value when not overridden) and then
- # we re-parse the leftover command-line options, so that
- # any value overridden on the command line is immediately
- # available if the user turns around and does a GetOption()
- # right away.
- setattr(self.values.__defaults__, result.dest, result.default)
- self.parse_args(self.largs, self.values)
-
- return result
-
-class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
- def format_usage(self, usage):
- return "usage: %s\n" % usage
-
- def format_heading(self, heading):
- """
- This translates any heading of "options" or "Options" into
- "SCons Options." Unfortunately, we have to do this here,
- because those titles are hard-coded in the optparse calls.
- """
- if heading == 'options':
- # The versions of optparse.py shipped with Pythons 2.3 and
- # 2.4 pass this in uncapitalized; override that so we get
- # consistent output on all versions.
- heading = "Options"
- if heading == 'Options':
- heading = "SCons Options"
- return optparse.IndentedHelpFormatter.format_heading(self, heading)
-
- def format_option(self, option):
- """
- A copy of the normal optparse.IndentedHelpFormatter.format_option()
- method. This has been snarfed so we can modify text wrapping to
- out liking:
-
- -- add our own regular expression that doesn't break on hyphens
- (so things like --no-print-directory don't get broken);
-
- -- wrap the list of options themselves when it's too long
- (the wrapper.fill(opts) call below);
-
- -- set the subsequent_indent when wrapping the help_text.
- """
- # The help for each option consists of two parts:
- # * the opt strings and metavars
- # eg. ("-x", or "-fFILENAME, --file=FILENAME")
- # * the user-supplied help string
- # eg. ("turn on expert mode", "read data from FILENAME")
- #
- # If possible, we write both of these on the same line:
- # -x turn on expert mode
- #
- # But if the opt string list is too long, we put the help
- # string on a second line, indented to the same column it would
- # start in if it fit on the first line.
- # -fFILENAME, --file=FILENAME
- # read data from FILENAME
- result = []
-
- try:
- opts = self.option_strings[option]
- except AttributeError:
- # The Python 2.3 version of optparse attaches this to
- # to the option argument, not to this object.
- opts = option.option_strings
-
- opt_width = self.help_position - self.current_indent - 2
- if len(opts) > opt_width:
- wrapper = textwrap.TextWrapper(width=self.width,
- initial_indent = ' ',
- subsequent_indent = ' ')
- wrapper.wordsep_re = no_hyphen_re
- opts = wrapper.fill(opts) + '\n'
- indent_first = self.help_position
- else: # start help on same line as opts
- opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts)
- indent_first = 0
- result.append(opts)
- if option.help:
-
- try:
- expand_default = self.expand_default
- except AttributeError:
- # The HelpFormatter base class in the Python 2.3 version
- # of optparse has no expand_default() method.
- help_text = option.help
- else:
- help_text = expand_default(option)
-
- # SCons: indent every line of the help text but the first.
- wrapper = textwrap.TextWrapper(width=self.help_width,
- subsequent_indent = ' ')
- wrapper.wordsep_re = no_hyphen_re
- help_lines = wrapper.wrap(help_text)
- result.append("%*s%s\n" % (indent_first, "", help_lines[0]))
- for line in help_lines[1:]:
- result.append("%*s%s\n" % (self.help_position, "", line))
- elif opts[-1] != "\n":
- result.append("\n")
- return string.join(result, "")
-
- # For consistent help output across Python versions, we provide a
- # subclass copy of format_option_strings() and these two variables.
- # This is necessary (?) for Python2.3, which otherwise concatenates
- # a short option with its metavar.
- _short_opt_fmt = "%s %s"
- _long_opt_fmt = "%s=%s"
-
- def format_option_strings(self, option):
- """Return a comma-separated list of option strings & metavariables."""
- if option.takes_value():
- metavar = option.metavar or string.upper(option.dest)
- short_opts = []
- for sopt in option._short_opts:
- short_opts.append(self._short_opt_fmt % (sopt, metavar))
- long_opts = []
- for lopt in option._long_opts:
- long_opts.append(self._long_opt_fmt % (lopt, metavar))
- else:
- short_opts = option._short_opts
- long_opts = option._long_opts
-
- if self.short_first:
- opts = short_opts + long_opts
- else:
- opts = long_opts + short_opts
-
- return string.join(opts, ", ")
-
-def Parser(version):
- """
- Returns an options parser object initialized with the standard
- SCons options.
- """
-
- formatter = SConsIndentedHelpFormatter(max_help_position=30)
-
- op = SConsOptionParser(option_class=SConsOption,
- add_help_option=False,
- formatter=formatter,
- usage="usage: scons [OPTION] [TARGET] ...",)
-
- op.preserve_unknown_options = True
- op.version = version
-
- # Add the options to the parser we just created.
- #
- # These are in the order we want them to show up in the -H help
- # text, basically alphabetical. Each op.add_option() call below
- # should have a consistent format:
- #
- # op.add_option("-L", "--long-option-name",
- # nargs=1, type="string",
- # dest="long_option_name", default='foo',
- # action="callback", callback=opt_long_option,
- # help="help text goes here",
- # metavar="VAR")
- #
- # Even though the optparse module constructs reasonable default
- # destination names from the long option names, we're going to be
- # explicit about each one for easier readability and so this code
- # will at least show up when grepping the source for option attribute
- # names, or otherwise browsing the source code.
-
- # options ignored for compatibility
- def opt_ignore(option, opt, value, parser):
- sys.stderr.write("Warning: ignoring %s option\n" % opt)
- op.add_option("-b", "-d", "-e", "-m", "-S", "-t", "-w",
- "--environment-overrides",
- "--no-keep-going",
- "--no-print-directory",
- "--print-directory",
- "--stop",
- "--touch",
- action="callback", callback=opt_ignore,
- help="Ignored for compatibility.")
-
- op.add_option('-c', '--clean', '--remove',
- dest="clean", default=False,
- action="store_true",
- help="Remove specified targets and dependencies.")
-
- op.add_option('-C', '--directory',
- nargs=1, type="string",
- dest="directory", default=[],
- action="append",
- help="Change to DIR before doing anything.",
- metavar="DIR")
-
- op.add_option('--cache-debug',
- nargs=1,
- dest="cache_debug", default=None,
- action="store",
- help="Print CacheDir debug info to FILE.",
- metavar="FILE")
-
- op.add_option('--cache-disable', '--no-cache',
- dest='cache_disable', default=False,
- action="store_true",
- help="Do not retrieve built targets from CacheDir.")
-
- op.add_option('--cache-force', '--cache-populate',
- dest='cache_force', default=False,
- action="store_true",
- help="Copy already-built targets into the CacheDir.")
-
- op.add_option('--cache-show',
- dest='cache_show', default=False,
- action="store_true",
- help="Print build actions for files from CacheDir.")
-
- config_options = ["auto", "force" ,"cache"]
-
- def opt_config(option, opt, value, parser, c_options=config_options):
- if not value in c_options:
- raise OptionValueError("Warning: %s is not a valid config type" % value)
- setattr(parser.values, option.dest, value)
- opt_config_help = "Controls Configure subsystem: %s." \
- % string.join(config_options, ", ")
- op.add_option('--config',
- nargs=1, type="string",
- dest="config", default="auto",
- action="callback", callback=opt_config,
- help = opt_config_help,
- metavar="MODE")
-
- op.add_option('-D',
- dest="climb_up", default=None,
- action="store_const", const=2,
- help="Search up directory tree for SConstruct, "
- "build all Default() targets.")
-
- deprecated_debug_options = {
- "dtree" : '; please use --tree=derived instead',
- "nomemoizer" : ' and has no effect',
- "stree" : '; please use --tree=all,status instead',
- "tree" : '; please use --tree=all instead',
- }
-
- debug_options = ["count", "explain", "findlibs",
- "includes", "memoizer", "memory", "objects",
- "pdb", "presub", "stacktrace",
- "time"] + deprecated_debug_options.keys()
-
- def opt_debug(option, opt, value, parser,
- debug_options=debug_options,
- deprecated_debug_options=deprecated_debug_options):
- if value in debug_options:
- parser.values.debug.append(value)
- if value in deprecated_debug_options.keys():
- try:
- parser.values.delayed_warnings
- except AttributeError:
- parser.values.delayed_warnings = []
- msg = deprecated_debug_options[value]
- w = "The --debug=%s option is deprecated%s." % (value, msg)
- t = (SCons.Warnings.DeprecatedWarning, w)
- parser.values.delayed_warnings.append(t)
- else:
- raise OptionValueError("Warning: %s is not a valid debug type" % value)
- opt_debug_help = "Print various types of debugging information: %s." \
- % string.join(debug_options, ", ")
- op.add_option('--debug',
- nargs=1, type="string",
- dest="debug", default=[],
- action="callback", callback=opt_debug,
- help=opt_debug_help,
- metavar="TYPE")
-
- def opt_diskcheck(option, opt, value, parser):
- try:
- diskcheck_value = diskcheck_convert(value)
- except ValueError, e:
- raise OptionValueError("Warning: `%s' is not a valid diskcheck type" % e)
- setattr(parser.values, option.dest, diskcheck_value)
-
- op.add_option('--diskcheck',
- nargs=1, type="string",
- dest='diskcheck', default=None,
- action="callback", callback=opt_diskcheck,
- help="Enable specific on-disk checks.",
- metavar="TYPE")
-
- def opt_duplicate(option, opt, value, parser):
- if not value in SCons.Node.FS.Valid_Duplicates:
- raise OptionValueError("`%s' is not a valid duplication style." % value)
- setattr(parser.values, option.dest, value)
- # Set the duplicate style right away so it can affect linking
- # of SConscript files.
- SCons.Node.FS.set_duplicate(value)
-
- opt_duplicate_help = "Set the preferred duplication methods. Must be one of " \
- + string.join(SCons.Node.FS.Valid_Duplicates, ", ")
-
- op.add_option('--duplicate',
- nargs=1, type="string",
- dest="duplicate", default='hard-soft-copy',
- action="callback", callback=opt_duplicate,
- help=opt_duplicate_help)
-
- op.add_option('-f', '--file', '--makefile', '--sconstruct',
- nargs=1, type="string",
- dest="file", default=[],
- action="append",
- help="Read FILE as the top-level SConstruct file.")
-
- op.add_option('-h', '--help',
- dest="help", default=False,
- action="store_true",
- help="Print defined help message, or this one.")
-
- op.add_option("-H", "--help-options",
- action="help",
- help="Print this message and exit.")
-
- op.add_option('-i', '--ignore-errors',
- dest='ignore_errors', default=False,
- action="store_true",
- help="Ignore errors from build actions.")
-
- op.add_option('-I', '--include-dir',
- nargs=1,
- dest='include_dir', default=[],
- action="append",
- help="Search DIR for imported Python modules.",
- metavar="DIR")
-
- op.add_option('--implicit-cache',
- dest='implicit_cache', default=False,
- action="store_true",
- help="Cache implicit dependencies")
-
- def opt_implicit_deps(option, opt, value, parser):
- setattr(parser.values, 'implicit_cache', True)
- setattr(parser.values, option.dest, True)
-
- op.add_option('--implicit-deps-changed',
- dest="implicit_deps_changed", default=False,
- action="callback", callback=opt_implicit_deps,
- help="Ignore cached implicit dependencies.")
-
- op.add_option('--implicit-deps-unchanged',
- dest="implicit_deps_unchanged", default=False,
- action="callback", callback=opt_implicit_deps,
- help="Ignore changes in implicit dependencies.")
-
- op.add_option('--interact', '--interactive',
- dest='interactive', default=False,
- action="store_true",
- help="Run in interactive mode.")
-
- op.add_option('-j', '--jobs',
- nargs=1, type="int",
- dest="num_jobs", default=1,
- action="store",
- help="Allow N jobs at once.",
- metavar="N")
-
- op.add_option('-k', '--keep-going',
- dest='keep_going', default=False,
- action="store_true",
- help="Keep going when a target can't be made.")
-
- op.add_option('--max-drift',
- nargs=1, type="int",
- dest='max_drift', default=SCons.Node.FS.default_max_drift,
- action="store",
- help="Set maximum system clock drift to N seconds.",
- metavar="N")
-
- op.add_option('--md5-chunksize',
- nargs=1, type="int",
- dest='md5_chunksize', default=SCons.Node.FS.File.md5_chunksize,
- action="store",
- help="Set chunk-size for MD5 signature computation to N kilobytes.",
- metavar="N")
-
- op.add_option('-n', '--no-exec', '--just-print', '--dry-run', '--recon',
- dest='no_exec', default=False,
- action="store_true",
- help="Don't build; just print commands.")
-
- op.add_option('--no-site-dir',
- dest='no_site_dir', default=False,
- action="store_true",
- help="Don't search or use the usual site_scons dir.")
-
- op.add_option('--profile',
- nargs=1,
- dest="profile_file", default=None,
- action="store",
- help="Profile SCons and put results in FILE.",
- metavar="FILE")
-
- op.add_option('-q', '--question',
- dest="question", default=False,
- action="store_true",
- help="Don't build; exit status says if up to date.")
-
- op.add_option('-Q',
- dest='no_progress', default=False,
- action="store_true",
- help="Suppress \"Reading/Building\" progress messages.")
-
- op.add_option('--random',
- dest="random", default=False,
- action="store_true",
- help="Build dependencies in random order.")
-
- op.add_option('-s', '--silent', '--quiet',
- dest="silent", default=False,
- action="store_true",
- help="Don't print commands.")
-
- op.add_option('--site-dir',
- nargs=1,
- dest='site_dir', default=None,
- action="store",
- help="Use DIR instead of the usual site_scons dir.",
- metavar="DIR")
-
- op.add_option('--stack-size',
- nargs=1, type="int",
- dest='stack_size',
- action="store",
- help="Set the stack size of the threads used to run jobs to N kilobytes.",
- metavar="N")
-
- op.add_option('--taskmastertrace',
- nargs=1,
- dest="taskmastertrace_file", default=None,
- action="store",
- help="Trace Node evaluation to FILE.",
- metavar="FILE")
-
- tree_options = ["all", "derived", "prune", "status"]
-
- def opt_tree(option, opt, value, parser, tree_options=tree_options):
- import Main
- tp = Main.TreePrinter()
- for o in string.split(value, ','):
- if o == 'all':
- tp.derived = False
- elif o == 'derived':
- tp.derived = True
- elif o == 'prune':
- tp.prune = True
- elif o == 'status':
- tp.status = True
- else:
- raise OptionValueError("Warning: %s is not a valid --tree option" % o)
- parser.values.tree_printers.append(tp)
-
- opt_tree_help = "Print a dependency tree in various formats: %s." \
- % string.join(tree_options, ", ")
-
- op.add_option('--tree',
- nargs=1, type="string",
- dest="tree_printers", default=[],
- action="callback", callback=opt_tree,
- help=opt_tree_help,
- metavar="OPTIONS")
-
- op.add_option('-u', '--up', '--search-up',
- dest="climb_up", default=0,
- action="store_const", const=1,
- help="Search up directory tree for SConstruct, "
- "build targets at or below current directory.")
-
- op.add_option('-U',
- dest="climb_up", default=0,
- action="store_const", const=3,
- help="Search up directory tree for SConstruct, "
- "build Default() targets from local SConscript.")
-
- def opt_version(option, opt, value, parser):
- sys.stdout.write(parser.version + '\n')
- sys.exit(0)
- op.add_option("-v", "--version",
- action="callback", callback=opt_version,
- help="Print the SCons version number and exit.")
-
- def opt_warn(option, opt, value, parser, tree_options=tree_options):
- if SCons.Util.is_String(value):
- value = string.split(value, ',')
- parser.values.warn.extend(value)
-
- op.add_option('--warn', '--warning',
- nargs=1, type="string",
- dest="warn", default=[],
- action="callback", callback=opt_warn,
- help="Enable or disable warnings.",
- metavar="WARNING-SPEC")
-
- op.add_option('-Y', '--repository', '--srcdir',
- nargs=1,
- dest="repository", default=[],
- action="append",
- help="Search REPOSITORY for source and target files.")
-
- # Options from Make and Cons classic that we do not yet support,
- # but which we may support someday and whose (potential) meanings
- # we don't want to change. These all get a "the -X option is not
- # yet implemented" message and don't show up in the help output.
-
- def opt_not_yet(option, opt, value, parser):
- msg = "Warning: the %s option is not yet implemented\n" % opt
- sys.stderr.write(msg)
- sys.exit(0)
-
-
- op.add_option('-l', '--load-average', '--max-load',
- nargs=1, type="int",
- dest="load_average", default=0,
- action="callback", callback=opt_not_yet,
- # action="store",
- # help="Don't start multiple jobs unless load is below "
- # "LOAD-AVERAGE."
- help=SUPPRESS_HELP)
- op.add_option('--list-actions',
- dest="list_actions",
- action="callback", callback=opt_not_yet,
- # help="Don't build; list files and build actions."
- help=SUPPRESS_HELP)
- op.add_option('--list-derived',
- dest="list_derived",
- action="callback", callback=opt_not_yet,
- # help="Don't build; list files that would be built."
- help=SUPPRESS_HELP)
- op.add_option('--list-where',
- dest="list_where",
- action="callback", callback=opt_not_yet,
- # help="Don't build; list files and where defined."
- help=SUPPRESS_HELP)
- op.add_option('-o', '--old-file', '--assume-old',
- nargs=1, type="string",
- dest="old_file", default=[],
- action="callback", callback=opt_not_yet,
- # action="append",
- # help = "Consider FILE to be old; don't rebuild it."
- help=SUPPRESS_HELP)
- op.add_option('--override',
- nargs=1, type="string",
- action="callback", callback=opt_not_yet,
- dest="override",
- # help="Override variables as specified in FILE."
- help=SUPPRESS_HELP)
- op.add_option('-p',
- action="callback", callback=opt_not_yet,
- dest="p",
- # help="Print internal environments/objects."
- help=SUPPRESS_HELP)
- op.add_option('-r', '-R', '--no-builtin-rules', '--no-builtin-variables',
- action="callback", callback=opt_not_yet,
- dest="no_builtin_rules",
- # help="Clear default environments and variables."
- help=SUPPRESS_HELP)
- op.add_option('--write-filenames',
- nargs=1, type="string",
- dest="write_filenames",
- action="callback", callback=opt_not_yet,
- # help="Write all filenames examined into FILE."
- help=SUPPRESS_HELP)
- op.add_option('-W', '--new-file', '--assume-new', '--what-if',
- nargs=1, type="string",
- dest="new_file",
- action="callback", callback=opt_not_yet,
- # help="Consider FILE to be changed."
- help=SUPPRESS_HELP)
- op.add_option('--warn-undefined-variables',
- dest="warn_undefined_variables",
- action="callback", callback=opt_not_yet,
- # help="Warn when an undefined variable is referenced."
- help=SUPPRESS_HELP)
-
- return op
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Script/SConscript.py b/3rdParty/SCons/scons-local/SCons/Script/SConscript.py
deleted file mode 100644
index cde6dec..0000000
--- a/3rdParty/SCons/scons-local/SCons/Script/SConscript.py
+++ /dev/null
@@ -1,638 +0,0 @@
-"""SCons.Script.SConscript
-
-This module defines the Python API provided to SConscript and SConstruct
-files.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Script/SConscript.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons
-import SCons.Action
-import SCons.Builder
-import SCons.Defaults
-import SCons.Environment
-import SCons.Errors
-import SCons.Node
-import SCons.Node.Alias
-import SCons.Node.FS
-import SCons.Platform
-import SCons.SConf
-import SCons.Script.Main
-import SCons.Tool
-import SCons.Util
-
-import os
-import os.path
-import re
-import string
-import sys
-import traceback
-import types
-import UserList
-
-# The following variables used to live in this module. Some
-# SConscript files out there may have referred to them directly as
-# SCons.Script.SConscript.*. This is now supported by some special
-# handling towards the bottom of the SConscript.__init__.py module.
-#Arguments = {}
-#ArgList = []
-#BuildTargets = TargetList()
-#CommandLineTargets = []
-#DefaultTargets = []
-
-class SConscriptReturn(Exception):
- pass
-
-launch_dir = os.path.abspath(os.curdir)
-
-GlobalDict = None
-
-# global exports set by Export():
-global_exports = {}
-
-# chdir flag
-sconscript_chdir = 1
-
-def get_calling_namespaces():
- """Return the locals and globals for the function that called
- into this module in the current call stack."""
- try: 1/0
- except ZeroDivisionError:
- # Don't start iterating with the current stack-frame to
- # prevent creating reference cycles (f_back is safe).
- frame = sys.exc_info()[2].tb_frame.f_back
-
- # Find the first frame that *isn't* from this file. This means
- # that we expect all of the SCons frames that implement an Export()
- # or SConscript() call to be in this file, so that we can identify
- # the first non-Script.SConscript frame as the user's local calling
- # environment, and the locals and globals dictionaries from that
- # frame as the calling namespaces. See the comment below preceding
- # the DefaultEnvironmentCall block for even more explanation.
- while frame.f_globals.get("__name__") == __name__:
- frame = frame.f_back
-
- return frame.f_locals, frame.f_globals
-
-
-def compute_exports(exports):
- """Compute a dictionary of exports given one of the parameters
- to the Export() function or the exports argument to SConscript()."""
-
- loc, glob = get_calling_namespaces()
-
- retval = {}
- try:
- for export in exports:
- if SCons.Util.is_Dict(export):
- retval.update(export)
- else:
- try:
- retval[export] = loc[export]
- except KeyError:
- retval[export] = glob[export]
- except KeyError, x:
- raise SCons.Errors.UserError, "Export of non-existent variable '%s'"%x
-
- return retval
-
-class Frame:
- """A frame on the SConstruct/SConscript call stack"""
- def __init__(self, fs, exports, sconscript):
- self.globals = BuildDefaultGlobals()
- self.retval = None
- self.prev_dir = fs.getcwd()
- self.exports = compute_exports(exports) # exports from the calling SConscript
- # make sure the sconscript attr is a Node.
- if isinstance(sconscript, SCons.Node.Node):
- self.sconscript = sconscript
- elif sconscript == '-':
- self.sconscript = None
- else:
- self.sconscript = fs.File(str(sconscript))
-
-# the SConstruct/SConscript call stack:
-call_stack = []
-
-# For documentation on the methods in this file, see the scons man-page
-
-def Return(*vars, **kw):
- retval = []
- try:
- fvars = SCons.Util.flatten(vars)
- for var in fvars:
- for v in string.split(var):
- retval.append(call_stack[-1].globals[v])
- except KeyError, x:
- raise SCons.Errors.UserError, "Return of non-existent variable '%s'"%x
-
- if len(retval) == 1:
- call_stack[-1].retval = retval[0]
- else:
- call_stack[-1].retval = tuple(retval)
-
- stop = kw.get('stop', True)
-
- if stop:
- raise SConscriptReturn
-
-
-stack_bottom = '% Stack boTTom %' # hard to define a variable w/this name :)
-
-def _SConscript(fs, *files, **kw):
- top = fs.Top
- sd = fs.SConstruct_dir.rdir()
- exports = kw.get('exports', [])
-
- # evaluate each SConscript file
- results = []
- for fn in files:
- call_stack.append(Frame(fs, exports, fn))
- old_sys_path = sys.path
- try:
- SCons.Script.sconscript_reading = SCons.Script.sconscript_reading + 1
- if fn == "-":
- exec sys.stdin in call_stack[-1].globals
- else:
- if isinstance(fn, SCons.Node.Node):
- f = fn
- else:
- f = fs.File(str(fn))
- _file_ = None
-
- # Change directory to the top of the source
- # tree to make sure the os's cwd and the cwd of
- # fs match so we can open the SConscript.
- fs.chdir(top, change_os_dir=1)
- if f.rexists():
- _file_ = open(f.rfile().get_abspath(), "r")
- elif f.has_src_builder():
- # The SConscript file apparently exists in a source
- # code management system. Build it, but then clear
- # the builder so that it doesn't get built *again*
- # during the actual build phase.
- f.build()
- f.built()
- f.builder_set(None)
- if f.exists():
- _file_ = open(f.get_abspath(), "r")
- if _file_:
- # Chdir to the SConscript directory. Use a path
- # name relative to the SConstruct file so that if
- # we're using the -f option, we're essentially
- # creating a parallel SConscript directory structure
- # in our local directory tree.
- #
- # XXX This is broken for multiple-repository cases
- # where the SConstruct and SConscript files might be
- # in different Repositories. For now, cross that
- # bridge when someone comes to it.
- try:
- src_dir = kw['src_dir']
- except KeyError:
- ldir = fs.Dir(f.dir.get_path(sd))
- else:
- ldir = fs.Dir(src_dir)
- if not ldir.is_under(f.dir):
- # They specified a source directory, but
- # it's above the SConscript directory.
- # Do the sensible thing and just use the
- # SConcript directory.
- ldir = fs.Dir(f.dir.get_path(sd))
- try:
- fs.chdir(ldir, change_os_dir=sconscript_chdir)
- except OSError:
- # There was no local directory, so we should be
- # able to chdir to the Repository directory.
- # Note that we do this directly, not through
- # fs.chdir(), because we still need to
- # interpret the stuff within the SConscript file
- # relative to where we are logically.
- fs.chdir(ldir, change_os_dir=0)
- # TODO Not sure how to handle src_dir here
- os.chdir(f.rfile().dir.get_abspath())
-
- # Append the SConscript directory to the beginning
- # of sys.path so Python modules in the SConscript
- # directory can be easily imported.
- sys.path = [ f.dir.get_abspath() ] + sys.path
-
- # This is the magic line that actually reads up
- # and executes the stuff in the SConscript file.
- # The locals for this frame contain the special
- # bottom-of-the-stack marker so that any
- # exceptions that occur when processing this
- # SConscript can base the printed frames at this
- # level and not show SCons internals as well.
- call_stack[-1].globals.update({stack_bottom:1})
- old_file = call_stack[-1].globals.get('__file__')
- try:
- del call_stack[-1].globals['__file__']
- except KeyError:
- pass
- try:
- try:
- exec _file_ in call_stack[-1].globals
- except SConscriptReturn:
- pass
- finally:
- if old_file is not None:
- call_stack[-1].globals.update({__file__:old_file})
- else:
- SCons.Warnings.warn(SCons.Warnings.MissingSConscriptWarning,
- "Ignoring missing SConscript '%s'" % f.path)
-
- finally:
- SCons.Script.sconscript_reading = SCons.Script.sconscript_reading - 1
- sys.path = old_sys_path
- frame = call_stack.pop()
- try:
- fs.chdir(frame.prev_dir, change_os_dir=sconscript_chdir)
- except OSError:
- # There was no local directory, so chdir to the
- # Repository directory. Like above, we do this
- # directly.
- fs.chdir(frame.prev_dir, change_os_dir=0)
- rdir = frame.prev_dir.rdir()
- rdir._create() # Make sure there's a directory there.
- try:
- os.chdir(rdir.get_abspath())
- except OSError, e:
- # We still couldn't chdir there, so raise the error,
- # but only if actions are being executed.
- #
- # If the -n option was used, the directory would *not*
- # have been created and we should just carry on and
- # let things muddle through. This isn't guaranteed
- # to work if the SConscript files are reading things
- # from disk (for example), but it should work well
- # enough for most configurations.
- if SCons.Action.execute_actions:
- raise e
-
- results.append(frame.retval)
-
- # if we only have one script, don't return a tuple
- if len(results) == 1:
- return results[0]
- else:
- return tuple(results)
-
-def SConscript_exception(file=sys.stderr):
- """Print an exception stack trace just for the SConscript file(s).
- This will show users who have Python errors where the problem is,
- without cluttering the output with all of the internal calls leading
- up to where we exec the SConscript."""
- exc_type, exc_value, exc_tb = sys.exc_info()
- tb = exc_tb
- while tb and not tb.tb_frame.f_locals.has_key(stack_bottom):
- tb = tb.tb_next
- if not tb:
- # We did not find our exec statement, so this was actually a bug
- # in SCons itself. Show the whole stack.
- tb = exc_tb
- stack = traceback.extract_tb(tb)
- try:
- type = exc_type.__name__
- except AttributeError:
- type = str(exc_type)
- if type[:11] == "exceptions.":
- type = type[11:]
- file.write('%s: %s:\n' % (type, exc_value))
- for fname, line, func, text in stack:
- file.write(' File "%s", line %d:\n' % (fname, line))
- file.write(' %s\n' % text)
-
-def annotate(node):
- """Annotate a node with the stack frame describing the
- SConscript file and line number that created it."""
- tb = sys.exc_info()[2]
- while tb and not tb.tb_frame.f_locals.has_key(stack_bottom):
- tb = tb.tb_next
- if not tb:
- # We did not find any exec of an SConscript file: what?!
- raise SCons.Errors.InternalError, "could not find SConscript stack frame"
- node.creator = traceback.extract_stack(tb)[0]
-
-# The following line would cause each Node to be annotated using the
-# above function. Unfortunately, this is a *huge* performance hit, so
-# leave this disabled until we find a more efficient mechanism.
-#SCons.Node.Annotate = annotate
-
-class SConsEnvironment(SCons.Environment.Base):
- """An Environment subclass that contains all of the methods that
- are particular to the wrapper SCons interface and which aren't
- (or shouldn't be) part of the build engine itself.
-
- Note that not all of the methods of this class have corresponding
- global functions, there are some private methods.
- """
-
- #
- # Private methods of an SConsEnvironment.
- #
- def _exceeds_version(self, major, minor, v_major, v_minor):
- """Return 1 if 'major' and 'minor' are greater than the version
- in 'v_major' and 'v_minor', and 0 otherwise."""
- return (major > v_major or (major == v_major and minor > v_minor))
-
- def _get_major_minor_revision(self, version_string):
- """Split a version string into major, minor and (optionally)
- revision parts.
-
- This is complicated by the fact that a version string can be
- something like 3.2b1."""
- version = string.split(string.split(version_string, ' ')[0], '.')
- v_major = int(version[0])
- v_minor = int(re.match('\d+', version[1]).group())
- if len(version) >= 3:
- v_revision = int(re.match('\d+', version[2]).group())
- else:
- v_revision = 0
- return v_major, v_minor, v_revision
-
- def _get_SConscript_filenames(self, ls, kw):
- """
- Convert the parameters passed to # SConscript() calls into a list
- of files and export variables. If the parameters are invalid,
- throws SCons.Errors.UserError. Returns a tuple (l, e) where l
- is a list of SConscript filenames and e is a list of exports.
- """
- exports = []
-
- if len(ls) == 0:
- try:
- dirs = kw["dirs"]
- except KeyError:
- raise SCons.Errors.UserError, \
- "Invalid SConscript usage - no parameters"
-
- if not SCons.Util.is_List(dirs):
- dirs = [ dirs ]
- dirs = map(str, dirs)
-
- name = kw.get('name', 'SConscript')
-
- files = map(lambda n, name = name: os.path.join(n, name), dirs)
-
- elif len(ls) == 1:
-
- files = ls[0]
-
- elif len(ls) == 2:
-
- files = ls[0]
- exports = self.Split(ls[1])
-
- else:
-
- raise SCons.Errors.UserError, \
- "Invalid SConscript() usage - too many arguments"
-
- if not SCons.Util.is_List(files):
- files = [ files ]
-
- if kw.get('exports'):
- exports.extend(self.Split(kw['exports']))
-
- variant_dir = kw.get('variant_dir') or kw.get('build_dir')
- if variant_dir:
- if len(files) != 1:
- raise SCons.Errors.UserError, \
- "Invalid SConscript() usage - can only specify one SConscript with a variant_dir"
- duplicate = kw.get('duplicate', 1)
- src_dir = kw.get('src_dir')
- if not src_dir:
- src_dir, fname = os.path.split(str(files[0]))
- files = [os.path.join(str(variant_dir), fname)]
- else:
- if not isinstance(src_dir, SCons.Node.Node):
- src_dir = self.fs.Dir(src_dir)
- fn = files[0]
- if not isinstance(fn, SCons.Node.Node):
- fn = self.fs.File(fn)
- if fn.is_under(src_dir):
- # Get path relative to the source directory.
- fname = fn.get_path(src_dir)
- files = [os.path.join(str(variant_dir), fname)]
- else:
- files = [fn.abspath]
- kw['src_dir'] = variant_dir
- self.fs.VariantDir(variant_dir, src_dir, duplicate)
-
- return (files, exports)
-
- #
- # Public methods of an SConsEnvironment. These get
- # entry points in the global name space so they can be called
- # as global functions.
- #
-
- def Configure(self, *args, **kw):
- if not SCons.Script.sconscript_reading:
- raise SCons.Errors.UserError, "Calling Configure from Builders is not supported."
- kw['_depth'] = kw.get('_depth', 0) + 1
- return apply(SCons.Environment.Base.Configure, (self,)+args, kw)
-
- def Default(self, *targets):
- SCons.Script._Set_Default_Targets(self, targets)
-
- def EnsureSConsVersion(self, major, minor, revision=0):
- """Exit abnormally if the SCons version is not late enough."""
- scons_ver = self._get_major_minor_revision(SCons.__version__)
- if scons_ver < (major, minor, revision):
- if revision:
- scons_ver_string = '%d.%d.%d' % (major, minor, revision)
- else:
- scons_ver_string = '%d.%d' % (major, minor)
- print "SCons %s or greater required, but you have SCons %s" % \
- (scons_ver_string, SCons.__version__)
- sys.exit(2)
-
- def EnsurePythonVersion(self, major, minor):
- """Exit abnormally if the Python version is not late enough."""
- try:
- v_major, v_minor, v_micro, release, serial = sys.version_info
- python_ver = (v_major, v_minor)
- except AttributeError:
- python_ver = self._get_major_minor_revision(sys.version)[:2]
- if python_ver < (major, minor):
- v = string.split(sys.version, " ", 1)[0]
- print "Python %d.%d or greater required, but you have Python %s" %(major,minor,v)
- sys.exit(2)
-
- def Exit(self, value=0):
- sys.exit(value)
-
- def Export(self, *vars):
- for var in vars:
- global_exports.update(compute_exports(self.Split(var)))
-
- def GetLaunchDir(self):
- global launch_dir
- return launch_dir
-
- def GetOption(self, name):
- name = self.subst(name)
- return SCons.Script.Main.GetOption(name)
-
- def Help(self, text):
- text = self.subst(text, raw=1)
- SCons.Script.HelpFunction(text)
-
- def Import(self, *vars):
- try:
- frame = call_stack[-1]
- globals = frame.globals
- exports = frame.exports
- for var in vars:
- var = self.Split(var)
- for v in var:
- if v == '*':
- globals.update(global_exports)
- globals.update(exports)
- else:
- if exports.has_key(v):
- globals[v] = exports[v]
- else:
- globals[v] = global_exports[v]
- except KeyError,x:
- raise SCons.Errors.UserError, "Import of non-existent variable '%s'"%x
-
- def SConscript(self, *ls, **kw):
- def subst_element(x, subst=self.subst):
- if SCons.Util.is_List(x):
- x = map(subst, x)
- else:
- x = subst(x)
- return x
- ls = map(subst_element, ls)
- subst_kw = {}
- for key, val in kw.items():
- if SCons.Util.is_String(val):
- val = self.subst(val)
- elif SCons.Util.is_List(val):
- result = []
- for v in val:
- if SCons.Util.is_String(v):
- v = self.subst(v)
- result.append(v)
- val = result
- subst_kw[key] = val
-
- files, exports = self._get_SConscript_filenames(ls, subst_kw)
- subst_kw['exports'] = exports
- return apply(_SConscript, [self.fs,] + files, subst_kw)
-
- def SConscriptChdir(self, flag):
- global sconscript_chdir
- sconscript_chdir = flag
-
- def SetOption(self, name, value):
- name = self.subst(name)
- SCons.Script.Main.SetOption(name, value)
-
-#
-#
-#
-SCons.Environment.Environment = SConsEnvironment
-
-def Configure(*args, **kw):
- if not SCons.Script.sconscript_reading:
- raise SCons.Errors.UserError, "Calling Configure from Builders is not supported."
- kw['_depth'] = 1
- return apply(SCons.SConf.SConf, args, kw)
-
-# It's very important that the DefaultEnvironmentCall() class stay in this
-# file, with the get_calling_namespaces() function, the compute_exports()
-# function, the Frame class and the SConsEnvironment.Export() method.
-# These things make up the calling stack leading up to the actual global
-# Export() or SConscript() call that the user issued. We want to allow
-# users to export local variables that they define, like so:
-#
-# def func():
-# x = 1
-# Export('x')
-#
-# To support this, the get_calling_namespaces() function assumes that
-# the *first* stack frame that's not from this file is the local frame
-# for the Export() or SConscript() call.
-
-_DefaultEnvironmentProxy = None
-
-def get_DefaultEnvironmentProxy():
- global _DefaultEnvironmentProxy
- if not _DefaultEnvironmentProxy:
- default_env = SCons.Defaults.DefaultEnvironment()
- _DefaultEnvironmentProxy = SCons.Environment.NoSubstitutionProxy(default_env)
- return _DefaultEnvironmentProxy
-
-class DefaultEnvironmentCall:
- """A class that implements "global function" calls of
- Environment methods by fetching the specified method from the
- DefaultEnvironment's class. Note that this uses an intermediate
- proxy class instead of calling the DefaultEnvironment method
- directly so that the proxy can override the subst() method and
- thereby prevent expansion of construction variables (since from
- the user's point of view this was called as a global function,
- with no associated construction environment)."""
- def __init__(self, method_name, subst=0):
- self.method_name = method_name
- if subst:
- self.factory = SCons.Defaults.DefaultEnvironment
- else:
- self.factory = get_DefaultEnvironmentProxy
- def __call__(self, *args, **kw):
- env = self.factory()
- method = getattr(env, self.method_name)
- return apply(method, args, kw)
-
-
-def BuildDefaultGlobals():
- """
- Create a dictionary containing all the default globals for
- SConstruct and SConscript files.
- """
-
- global GlobalDict
- if GlobalDict is None:
- GlobalDict = {}
-
- import SCons.Script
- d = SCons.Script.__dict__
- def not_a_module(m, d=d, mtype=type(SCons.Script)):
- return type(d[m]) != mtype
- for m in filter(not_a_module, dir(SCons.Script)):
- GlobalDict[m] = d[m]
-
- return GlobalDict.copy()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Script/__init__.py b/3rdParty/SCons/scons-local/SCons/Script/__init__.py
deleted file mode 100644
index fcfb717..0000000
--- a/3rdParty/SCons/scons-local/SCons/Script/__init__.py
+++ /dev/null
@@ -1,414 +0,0 @@
-"""SCons.Script
-
-This file implements the main() function used by the scons script.
-
-Architecturally, this *is* the scons script, and will likely only be
-called from the external "scons" wrapper. Consequently, anything here
-should not be, or be considered, part of the build engine. If it's
-something that we expect other software to want to use, it should go in
-some other module. If it's specific to the "scons" script invocation,
-it goes here.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Script/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-import time
-start_time = time.time()
-
-import os
-import string
-import sys
-import UserList
-
-# Special chicken-and-egg handling of the "--debug=memoizer" flag:
-#
-# SCons.Memoize contains a metaclass implementation that affects how
-# the other classes are instantiated. The Memoizer may add shim methods
-# to classes that have methods that cache computed values in order to
-# count and report the hits and misses.
-#
-# If we wait to enable the Memoization until after we've parsed the
-# command line options normally, it will be too late, because the Memoizer
-# will have already analyzed the classes that it's Memoizing and decided
-# to not add the shims. So we use a special-case, up-front check for
-# the "--debug=memoizer" flag and enable Memoizer before we import any
-# of the other modules that use it.
-
-_args = sys.argv + string.split(os.environ.get('SCONSFLAGS', ''))
-if "--debug=memoizer" in _args:
- import SCons.Memoize
- import SCons.Warnings
- try:
- SCons.Memoize.EnableMemoization()
- except SCons.Warnings.Warning:
- # Some warning was thrown (inability to --debug=memoizer on
- # Python 1.5.2 because it doesn't have metaclasses). Arrange
- # for it to be displayed or not after warnings are configured.
- import Main
- exc_type, exc_value, tb = sys.exc_info()
- Main.delayed_warnings.append((exc_type, exc_value))
-del _args
-
-import SCons.Action
-import SCons.Builder
-import SCons.Environment
-import SCons.Node.FS
-import SCons.Options
-import SCons.Platform
-import SCons.Scanner
-import SCons.SConf
-import SCons.Subst
-import SCons.Tool
-import SCons.Util
-import SCons.Variables
-import SCons.Defaults
-
-import Main
-
-main = Main.main
-
-# The following are global class definitions and variables that used to
-# live directly in this module back before 0.96.90, when it contained
-# a lot of code. Some SConscript files in widely-distributed packages
-# (Blender is the specific example) actually reached into SCons.Script
-# directly to use some of these. Rather than break those SConscript
-# files, we're going to propagate these names into the SCons.Script
-# namespace here.
-#
-# Some of these are commented out because it's *really* unlikely anyone
-# used them, but we're going to leave the comment here to try to make
-# it obvious what to do if the situation arises.
-BuildTask = Main.BuildTask
-CleanTask = Main.CleanTask
-QuestionTask = Main.QuestionTask
-#PrintHelp = Main.PrintHelp
-#SConscriptSettableOptions = Main.SConscriptSettableOptions
-
-AddOption = Main.AddOption
-GetOption = Main.GetOption
-SetOption = Main.SetOption
-Progress = Main.Progress
-GetBuildFailures = Main.GetBuildFailures
-
-#keep_going_on_error = Main.keep_going_on_error
-#print_dtree = Main.print_dtree
-#print_explanations = Main.print_explanations
-#print_includes = Main.print_includes
-#print_objects = Main.print_objects
-#print_time = Main.print_time
-#print_tree = Main.print_tree
-#memory_stats = Main.memory_stats
-#ignore_errors = Main.ignore_errors
-#sconscript_time = Main.sconscript_time
-#command_time = Main.command_time
-#exit_status = Main.exit_status
-#profiling = Main.profiling
-#repositories = Main.repositories
-
-#
-import SConscript
-_SConscript = SConscript
-
-call_stack = _SConscript.call_stack
-
-#
-Action = SCons.Action.Action
-AddMethod = SCons.Util.AddMethod
-AllowSubstExceptions = SCons.Subst.SetAllowableExceptions
-Builder = SCons.Builder.Builder
-Configure = _SConscript.Configure
-Environment = SCons.Environment.Environment
-#OptParser = SCons.SConsOptions.OptParser
-FindPathDirs = SCons.Scanner.FindPathDirs
-Platform = SCons.Platform.Platform
-Return = _SConscript.Return
-Scanner = SCons.Scanner.Base
-Tool = SCons.Tool.Tool
-WhereIs = SCons.Util.WhereIs
-
-#
-BoolVariable = SCons.Variables.BoolVariable
-EnumVariable = SCons.Variables.EnumVariable
-ListVariable = SCons.Variables.ListVariable
-PackageVariable = SCons.Variables.PackageVariable
-PathVariable = SCons.Variables.PathVariable
-
-# Deprecated names that will go away some day.
-BoolOption = SCons.Options.BoolOption
-EnumOption = SCons.Options.EnumOption
-ListOption = SCons.Options.ListOption
-PackageOption = SCons.Options.PackageOption
-PathOption = SCons.Options.PathOption
-
-# Action factories.
-Chmod = SCons.Defaults.Chmod
-Copy = SCons.Defaults.Copy
-Delete = SCons.Defaults.Delete
-Mkdir = SCons.Defaults.Mkdir
-Move = SCons.Defaults.Move
-Touch = SCons.Defaults.Touch
-
-# Pre-made, public scanners.
-CScanner = SCons.Tool.CScanner
-DScanner = SCons.Tool.DScanner
-DirScanner = SCons.Defaults.DirScanner
-ProgramScanner = SCons.Tool.ProgramScanner
-SourceFileScanner = SCons.Tool.SourceFileScanner
-
-# Functions we might still convert to Environment methods.
-CScan = SCons.Defaults.CScan
-DefaultEnvironment = SCons.Defaults.DefaultEnvironment
-
-# Other variables we provide.
-class TargetList(UserList.UserList):
- def _do_nothing(self, *args, **kw):
- pass
- def _add_Default(self, list):
- self.extend(list)
- def _clear(self):
- del self[:]
-
-ARGUMENTS = {}
-ARGLIST = []
-BUILD_TARGETS = TargetList()
-COMMAND_LINE_TARGETS = []
-DEFAULT_TARGETS = []
-
-# BUILD_TARGETS can be modified in the SConscript files. If so, we
-# want to treat the modified BUILD_TARGETS list as if they specified
-# targets on the command line. To do that, though, we need to know if
-# BUILD_TARGETS was modified through "official" APIs or by hand. We do
-# this by updating two lists in parallel, the documented BUILD_TARGETS
-# list, above, and this internal _build_plus_default targets list which
-# should only have "official" API changes. Then Script/Main.py can
-# compare these two afterwards to figure out if the user added their
-# own targets to BUILD_TARGETS.
-_build_plus_default = TargetList()
-
-def _Add_Arguments(alist):
- for arg in alist:
- a, b = string.split(arg, '=', 1)
- ARGUMENTS[a] = b
- ARGLIST.append((a, b))
-
-def _Add_Targets(tlist):
- if tlist:
- COMMAND_LINE_TARGETS.extend(tlist)
- BUILD_TARGETS.extend(tlist)
- BUILD_TARGETS._add_Default = BUILD_TARGETS._do_nothing
- BUILD_TARGETS._clear = BUILD_TARGETS._do_nothing
- _build_plus_default.extend(tlist)
- _build_plus_default._add_Default = _build_plus_default._do_nothing
- _build_plus_default._clear = _build_plus_default._do_nothing
-
-def _Set_Default_Targets_Has_Been_Called(d, fs):
- return DEFAULT_TARGETS
-
-def _Set_Default_Targets_Has_Not_Been_Called(d, fs):
- if d is None:
- d = [fs.Dir('.')]
- return d
-
-_Get_Default_Targets = _Set_Default_Targets_Has_Not_Been_Called
-
-def _Set_Default_Targets(env, tlist):
- global DEFAULT_TARGETS
- global _Get_Default_Targets
- _Get_Default_Targets = _Set_Default_Targets_Has_Been_Called
- for t in tlist:
- if t is None:
- # Delete the elements from the list in-place, don't
- # reassign an empty list to DEFAULT_TARGETS, so that the
- # variables will still point to the same object we point to.
- del DEFAULT_TARGETS[:]
- BUILD_TARGETS._clear()
- _build_plus_default._clear()
- elif isinstance(t, SCons.Node.Node):
- DEFAULT_TARGETS.append(t)
- BUILD_TARGETS._add_Default([t])
- _build_plus_default._add_Default([t])
- else:
- nodes = env.arg2nodes(t, env.fs.Entry)
- DEFAULT_TARGETS.extend(nodes)
- BUILD_TARGETS._add_Default(nodes)
- _build_plus_default._add_Default(nodes)
-
-#
-help_text = None
-
-def HelpFunction(text):
- global help_text
- if SCons.Script.help_text is None:
- SCons.Script.help_text = text
- else:
- help_text = help_text + text
-
-#
-# Will be non-zero if we are reading an SConscript file.
-sconscript_reading = 0
-
-#
-def Variables(files=[], args=ARGUMENTS):
- return SCons.Variables.Variables(files, args)
-
-def Options(files=[], args=ARGUMENTS):
- return SCons.Options.Options(files, args)
-
-# The list of global functions to add to the SConscript name space
-# that end up calling corresponding methods or Builders in the
-# DefaultEnvironment().
-GlobalDefaultEnvironmentFunctions = [
- # Methods from the SConsEnvironment class, above.
- 'Default',
- 'EnsurePythonVersion',
- 'EnsureSConsVersion',
- 'Exit',
- 'Export',
- 'GetLaunchDir',
- 'Help',
- 'Import',
- #'SConscript', is handled separately, below.
- 'SConscriptChdir',
-
- # Methods from the Environment.Base class.
- 'AddPostAction',
- 'AddPreAction',
- 'Alias',
- 'AlwaysBuild',
- 'BuildDir',
- 'CacheDir',
- 'Clean',
- #The Command() method is handled separately, below.
- 'Decider',
- 'Depends',
- 'Dir',
- 'NoClean',
- 'NoCache',
- 'Entry',
- 'Execute',
- 'File',
- 'FindFile',
- 'FindInstalledFiles',
- 'FindSourceFiles',
- 'Flatten',
- 'GetBuildPath',
- 'Glob',
- 'Ignore',
- 'Install',
- 'InstallAs',
- 'Literal',
- 'Local',
- 'ParseDepends',
- 'Precious',
- 'Repository',
- 'Requires',
- 'SConsignFile',
- 'SideEffect',
- 'SourceCode',
- 'SourceSignatures',
- 'Split',
- 'Tag',
- 'TargetSignatures',
- 'Value',
- 'VariantDir',
-]
-
-GlobalDefaultBuilders = [
- # Supported builders.
- 'CFile',
- 'CXXFile',
- 'DVI',
- 'Jar',
- 'Java',
- 'JavaH',
- 'Library',
- 'M4',
- 'MSVSProject',
- 'Object',
- 'PCH',
- 'PDF',
- 'PostScript',
- 'Program',
- 'RES',
- 'RMIC',
- 'SharedLibrary',
- 'SharedObject',
- 'StaticLibrary',
- 'StaticObject',
- 'Tar',
- 'TypeLibrary',
- 'Zip',
- 'Package',
-]
-
-for name in GlobalDefaultEnvironmentFunctions + GlobalDefaultBuilders:
- exec "%s = _SConscript.DefaultEnvironmentCall(%s)" % (name, repr(name))
-del name
-
-# There are a handful of variables that used to live in the
-# Script/SConscript.py module that some SConscript files out there were
-# accessing directly as SCons.Script.SConscript.*. The problem is that
-# "SConscript" in this namespace is no longer a module, it's a global
-# function call--or more precisely, an object that implements a global
-# function call through the default Environment. Nevertheless, we can
-# maintain backwards compatibility for SConscripts that were reaching in
-# this way by hanging some attributes off the "SConscript" object here.
-SConscript = _SConscript.DefaultEnvironmentCall('SConscript')
-
-# Make SConscript look enough like the module it used to be so
-# that pychecker doesn't barf.
-SConscript.__name__ = 'SConscript'
-
-SConscript.Arguments = ARGUMENTS
-SConscript.ArgList = ARGLIST
-SConscript.BuildTargets = BUILD_TARGETS
-SConscript.CommandLineTargets = COMMAND_LINE_TARGETS
-SConscript.DefaultTargets = DEFAULT_TARGETS
-
-# The global Command() function must be handled differently than the
-# global functions for other construction environment methods because
-# we want people to be able to use Actions that must expand $TARGET
-# and $SOURCE later, when (and if) the Action is invoked to build
-# the target(s). We do this with the subst=1 argument, which creates
-# a DefaultEnvironmentCall instance that wraps up a normal default
-# construction environment that performs variable substitution, not a
-# proxy that doesn't.
-#
-# There's a flaw here, though, because any other $-variables on a command
-# line will *also* be expanded, each to a null string, but that should
-# only be a problem in the unusual case where someone was passing a '$'
-# on a command line and *expected* the $ to get through to the shell
-# because they were calling Command() and not env.Command()... This is
-# unlikely enough that we're going to leave this as is and cross that
-# bridge if someone actually comes to it.
-Command = _SConscript.DefaultEnvironmentCall('Command', subst=1)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Sig.py b/3rdParty/SCons/scons-local/SCons/Sig.py
deleted file mode 100644
index 6feb19c..0000000
--- a/3rdParty/SCons/scons-local/SCons/Sig.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Sig.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Place-holder for the old SCons.Sig module hierarchy
-
-This is no longer used, but code out there (such as the NSIS module on
-the SCons wiki) may try to import SCons.Sig. If so, we generate a warning
-that points them to the line that caused the import, and don't die.
-
-If someone actually tried to use the sub-modules or functions within
-the package (for example, SCons.Sig.MD5.signature()), then they'll still
-get an AttributeError, but at least they'll know where to start looking.
-"""
-
-import SCons.Util
-import SCons.Warnings
-
-msg = 'The SCons.Sig module no longer exists.\n' \
- ' Remove the following "import SCons.Sig" line to eliminate this warning:'
-
-SCons.Warnings.warn(SCons.Warnings.DeprecatedWarning, msg)
-
-default_calc = None
-default_module = None
-
-class MD5Null(SCons.Util.Null):
- def __repr__(self):
- return "MD5Null()"
-
-class TimeStampNull(SCons.Util.Null):
- def __repr__(self):
- return "TimeStampNull()"
-
-MD5 = MD5Null()
-TimeStamp = TimeStampNull()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Subst.py b/3rdParty/SCons/scons-local/SCons/Subst.py
deleted file mode 100644
index 1127424..0000000
--- a/3rdParty/SCons/scons-local/SCons/Subst.py
+++ /dev/null
@@ -1,911 +0,0 @@
-"""SCons.Subst
-
-SCons string substitution.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Subst.py 4043 2009/02/23 09:06:45 scons"
-
-import re
-import string
-import types
-import UserList
-import UserString
-
-import SCons.Errors
-
-from SCons.Util import is_String, is_Sequence
-
-# Indexed by the SUBST_* constants below.
-_strconv = [SCons.Util.to_String_for_subst,
- SCons.Util.to_String_for_subst,
- SCons.Util.to_String_for_signature]
-
-
-
-AllowableExceptions = (IndexError, NameError)
-
-def SetAllowableExceptions(*excepts):
- global AllowableExceptions
- AllowableExceptions = filter(None, excepts)
-
-def raise_exception(exception, target, s):
- name = exception.__class__.__name__
- msg = "%s `%s' trying to evaluate `%s'" % (name, exception, s)
- if target:
- raise SCons.Errors.BuildError, (target[0], msg)
- else:
- raise SCons.Errors.UserError, msg
-
-
-
-class Literal:
- """A wrapper for a string. If you use this object wrapped
- around a string, then it will be interpreted as literal.
- When passed to the command interpreter, all special
- characters will be escaped."""
- def __init__(self, lstr):
- self.lstr = lstr
-
- def __str__(self):
- return self.lstr
-
- def escape(self, escape_func):
- return escape_func(self.lstr)
-
- def for_signature(self):
- return self.lstr
-
- def is_literal(self):
- return 1
-
-class SpecialAttrWrapper:
- """This is a wrapper for what we call a 'Node special attribute.'
- This is any of the attributes of a Node that we can reference from
- Environment variable substitution, such as $TARGET.abspath or
- $SOURCES[1].filebase. We implement the same methods as Literal
- so we can handle special characters, plus a for_signature method,
- such that we can return some canonical string during signature
- calculation to avoid unnecessary rebuilds."""
-
- def __init__(self, lstr, for_signature=None):
- """The for_signature parameter, if supplied, will be the
- canonical string we return from for_signature(). Else
- we will simply return lstr."""
- self.lstr = lstr
- if for_signature:
- self.forsig = for_signature
- else:
- self.forsig = lstr
-
- def __str__(self):
- return self.lstr
-
- def escape(self, escape_func):
- return escape_func(self.lstr)
-
- def for_signature(self):
- return self.forsig
-
- def is_literal(self):
- return 1
-
-def quote_spaces(arg):
- """Generic function for putting double quotes around any string that
- has white space in it."""
- if ' ' in arg or '\t' in arg:
- return '"%s"' % arg
- else:
- return str(arg)
-
-class CmdStringHolder(UserString.UserString):
- """This is a special class used to hold strings generated by
- scons_subst() and scons_subst_list(). It defines a special method
- escape(). When passed a function with an escape algorithm for a
- particular platform, it will return the contained string with the
- proper escape sequences inserted.
- """
- def __init__(self, cmd, literal=None):
- UserString.UserString.__init__(self, cmd)
- self.literal = literal
-
- def is_literal(self):
- return self.literal
-
- def escape(self, escape_func, quote_func=quote_spaces):
- """Escape the string with the supplied function. The
- function is expected to take an arbitrary string, then
- return it with all special characters escaped and ready
- for passing to the command interpreter.
-
- After calling this function, the next call to str() will
- return the escaped string.
- """
-
- if self.is_literal():
- return escape_func(self.data)
- elif ' ' in self.data or '\t' in self.data:
- return quote_func(self.data)
- else:
- return self.data
-
-def escape_list(list, escape_func):
- """Escape a list of arguments by running the specified escape_func
- on every object in the list that has an escape() method."""
- def escape(obj, escape_func=escape_func):
- try:
- e = obj.escape
- except AttributeError:
- return obj
- else:
- return e(escape_func)
- return map(escape, list)
-
-class NLWrapper:
- """A wrapper class that delays turning a list of sources or targets
- into a NodeList until it's needed. The specified function supplied
- when the object is initialized is responsible for turning raw nodes
- into proxies that implement the special attributes like .abspath,
- .source, etc. This way, we avoid creating those proxies just
- "in case" someone is going to use $TARGET or the like, and only
- go through the trouble if we really have to.
-
- In practice, this might be a wash performance-wise, but it's a little
- cleaner conceptually...
- """
-
- def __init__(self, list, func):
- self.list = list
- self.func = func
- def _return_nodelist(self):
- return self.nodelist
- def _gen_nodelist(self):
- list = self.list
- if list is None:
- list = []
- elif not is_Sequence(list):
- list = [list]
- # The map(self.func) call is what actually turns
- # a list into appropriate proxies.
- self.nodelist = SCons.Util.NodeList(map(self.func, list))
- self._create_nodelist = self._return_nodelist
- return self.nodelist
- _create_nodelist = _gen_nodelist
-
-
-class Targets_or_Sources(UserList.UserList):
- """A class that implements $TARGETS or $SOURCES expansions by in turn
- wrapping a NLWrapper. This class handles the different methods used
- to access the list, calling the NLWrapper to create proxies on demand.
-
- Note that we subclass UserList.UserList purely so that the
- is_Sequence() function will identify an object of this class as
- a list during variable expansion. We're not really using any
- UserList.UserList methods in practice.
- """
- def __init__(self, nl):
- self.nl = nl
- def __getattr__(self, attr):
- nl = self.nl._create_nodelist()
- return getattr(nl, attr)
- def __getitem__(self, i):
- nl = self.nl._create_nodelist()
- return nl[i]
- def __getslice__(self, i, j):
- nl = self.nl._create_nodelist()
- i = max(i, 0); j = max(j, 0)
- return nl[i:j]
- def __str__(self):
- nl = self.nl._create_nodelist()
- return str(nl)
- def __repr__(self):
- nl = self.nl._create_nodelist()
- return repr(nl)
-
-class Target_or_Source:
- """A class that implements $TARGET or $SOURCE expansions by in turn
- wrapping a NLWrapper. This class handles the different methods used
- to access an individual proxy Node, calling the NLWrapper to create
- a proxy on demand.
- """
- def __init__(self, nl):
- self.nl = nl
- def __getattr__(self, attr):
- nl = self.nl._create_nodelist()
- try:
- nl0 = nl[0]
- except IndexError:
- # If there is nothing in the list, then we have no attributes to
- # pass through, so raise AttributeError for everything.
- raise AttributeError, "NodeList has no attribute: %s" % attr
- return getattr(nl0, attr)
- def __str__(self):
- nl = self.nl._create_nodelist()
- if nl:
- return str(nl[0])
- return ''
- def __repr__(self):
- nl = self.nl._create_nodelist()
- if nl:
- return repr(nl[0])
- return ''
-
-class NullNodeList(SCons.Util.NullSeq):
- def __call__(self, *args, **kwargs): return ''
- def __str__(self): return ''
- # TODO(1.5): unneeded after new-style classes introduce iterators
- def __getitem__(self, i):
- raise IndexError
-
-NullNodesList = NullNodeList()
-
-def subst_dict(target, source):
- """Create a dictionary for substitution of special
- construction variables.
-
- This translates the following special arguments:
-
- target - the target (object or array of objects),
- used to generate the TARGET and TARGETS
- construction variables
-
- source - the source (object or array of objects),
- used to generate the SOURCES and SOURCE
- construction variables
- """
- dict = {}
-
- if target:
- def get_tgt_subst_proxy(thing):
- try:
- subst_proxy = thing.get_subst_proxy()
- except AttributeError:
- subst_proxy = thing # probably a string, just return it
- return subst_proxy
- tnl = NLWrapper(target, get_tgt_subst_proxy)
- dict['TARGETS'] = Targets_or_Sources(tnl)
- dict['TARGET'] = Target_or_Source(tnl)
-
- # This is a total cheat, but hopefully this dictionary goes
- # away soon anyway. We just let these expand to $TARGETS
- # because that's "good enough" for the use of ToolSurrogates
- # (see test/ToolSurrogate.py) to generate documentation.
- dict['CHANGED_TARGETS'] = '$TARGETS'
- dict['UNCHANGED_TARGETS'] = '$TARGETS'
- else:
- dict['TARGETS'] = NullNodesList
- dict['TARGET'] = NullNodesList
-
- if source:
- def get_src_subst_proxy(node):
- try:
- rfile = node.rfile
- except AttributeError:
- pass
- else:
- node = rfile()
- try:
- return node.get_subst_proxy()
- except AttributeError:
- return node # probably a String, just return it
- snl = NLWrapper(source, get_src_subst_proxy)
- dict['SOURCES'] = Targets_or_Sources(snl)
- dict['SOURCE'] = Target_or_Source(snl)
-
- # This is a total cheat, but hopefully this dictionary goes
- # away soon anyway. We just let these expand to $TARGETS
- # because that's "good enough" for the use of ToolSurrogates
- # (see test/ToolSurrogate.py) to generate documentation.
- dict['CHANGED_SOURCES'] = '$SOURCES'
- dict['UNCHANGED_SOURCES'] = '$SOURCES'
- else:
- dict['SOURCES'] = NullNodesList
- dict['SOURCE'] = NullNodesList
-
- return dict
-
-# Constants for the "mode" parameter to scons_subst_list() and
-# scons_subst(). SUBST_RAW gives the raw command line. SUBST_CMD
-# gives a command line suitable for passing to a shell. SUBST_SIG
-# gives a command line appropriate for calculating the signature
-# of a command line...if this changes, we should rebuild.
-SUBST_CMD = 0
-SUBST_RAW = 1
-SUBST_SIG = 2
-
-_rm = re.compile(r'\$[()]')
-_remove = re.compile(r'\$\([^\$]*(\$[^\)][^\$]*)*\$\)')
-
-# Indexed by the SUBST_* constants above.
-_regex_remove = [ _rm, None, _remove ]
-
-def _rm_list(list):
- #return [ l for l in list if not l in ('$(', '$)') ]
- return filter(lambda l: not l in ('$(', '$)'), list)
-
-def _remove_list(list):
- result = []
- do_append = result.append
- for l in list:
- if l == '$(':
- do_append = lambda x: None
- elif l == '$)':
- do_append = result.append
- else:
- do_append(l)
- return result
-
-# Indexed by the SUBST_* constants above.
-_list_remove = [ _rm_list, None, _remove_list ]
-
-# Regular expressions for splitting strings and handling substitutions,
-# for use by the scons_subst() and scons_subst_list() functions:
-#
-# The first expression compiled matches all of the $-introduced tokens
-# that we need to process in some way, and is used for substitutions.
-# The expressions it matches are:
-#
-# "$$"
-# "$("
-# "$)"
-# "$variable" [must begin with alphabetic or underscore]
-# "${any stuff}"
-#
-# The second expression compiled is used for splitting strings into tokens
-# to be processed, and it matches all of the tokens listed above, plus
-# the following that affect how arguments do or don't get joined together:
-#
-# " " [white space]
-# "non-white-space" [without any dollar signs]
-# "$" [single dollar sign]
-#
-_dollar_exps_str = r'\$[\$\(\)]|\$[_a-zA-Z][\.\w]*|\${[^}]*}'
-_dollar_exps = re.compile(r'(%s)' % _dollar_exps_str)
-_separate_args = re.compile(r'(%s|\s+|[^\s\$]+|\$)' % _dollar_exps_str)
-
-# This regular expression is used to replace strings of multiple white
-# space characters in the string result from the scons_subst() function.
-_space_sep = re.compile(r'[\t ]+(?![^{]*})')
-
-def scons_subst(strSubst, env, mode=SUBST_RAW, target=None, source=None, gvars={}, lvars={}, conv=None):
- """Expand a string or list containing construction variable
- substitutions.
-
- This is the work-horse function for substitutions in file names
- and the like. The companion scons_subst_list() function (below)
- handles separating command lines into lists of arguments, so see
- that function if that's what you're looking for.
- """
- if type(strSubst) == types.StringType and string.find(strSubst, '$') < 0:
- return strSubst
-
- class StringSubber:
- """A class to construct the results of a scons_subst() call.
-
- This binds a specific construction environment, mode, target and
- source with two methods (substitute() and expand()) that handle
- the expansion.
- """
- def __init__(self, env, mode, conv, gvars):
- self.env = env
- self.mode = mode
- self.conv = conv
- self.gvars = gvars
-
- def expand(self, s, lvars):
- """Expand a single "token" as necessary, returning an
- appropriate string containing the expansion.
-
- This handles expanding different types of things (strings,
- lists, callables) appropriately. It calls the wrapper
- substitute() method to re-expand things as necessary, so that
- the results of expansions of side-by-side strings still get
- re-evaluated separately, not smushed together.
- """
- if is_String(s):
- try:
- s0, s1 = s[:2]
- except (IndexError, ValueError):
- return s
- if s0 != '$':
- return s
- if s1 == '$':
- return '$'
- elif s1 in '()':
- return s
- else:
- key = s[1:]
- if key[0] == '{' or string.find(key, '.') >= 0:
- if key[0] == '{':
- key = key[1:-1]
- try:
- s = eval(key, self.gvars, lvars)
- except KeyboardInterrupt:
- raise
- except Exception, e:
- if e.__class__ in AllowableExceptions:
- return ''
- raise_exception(e, lvars['TARGETS'], s)
- else:
- if lvars.has_key(key):
- s = lvars[key]
- elif self.gvars.has_key(key):
- s = self.gvars[key]
- elif not NameError in AllowableExceptions:
- raise_exception(NameError(key), lvars['TARGETS'], s)
- else:
- return ''
-
- # Before re-expanding the result, handle
- # recursive expansion by copying the local
- # variable dictionary and overwriting a null
- # string for the value of the variable name
- # we just expanded.
- #
- # This could potentially be optimized by only
- # copying lvars when s contains more expansions,
- # but lvars is usually supposed to be pretty
- # small, and deeply nested variable expansions
- # are probably more the exception than the norm,
- # so it should be tolerable for now.
- lv = lvars.copy()
- var = string.split(key, '.')[0]
- lv[var] = ''
- return self.substitute(s, lv)
- elif is_Sequence(s):
- def func(l, conv=self.conv, substitute=self.substitute, lvars=lvars):
- return conv(substitute(l, lvars))
- return map(func, s)
- elif callable(s):
- try:
- s = s(target=lvars['TARGETS'],
- source=lvars['SOURCES'],
- env=self.env,
- for_signature=(self.mode != SUBST_CMD))
- except TypeError:
- # This probably indicates that it's a callable
- # object that doesn't match our calling arguments
- # (like an Action).
- if self.mode == SUBST_RAW:
- return s
- s = self.conv(s)
- return self.substitute(s, lvars)
- elif s is None:
- return ''
- else:
- return s
-
- def substitute(self, args, lvars):
- """Substitute expansions in an argument or list of arguments.
-
- This serves as a wrapper for splitting up a string into
- separate tokens.
- """
- if is_String(args) and not isinstance(args, CmdStringHolder):
- args = str(args) # In case it's a UserString.
- try:
- def sub_match(match, conv=self.conv, expand=self.expand, lvars=lvars):
- return conv(expand(match.group(1), lvars))
- result = _dollar_exps.sub(sub_match, args)
- except TypeError:
- # If the internal conversion routine doesn't return
- # strings (it could be overridden to return Nodes, for
- # example), then the 1.5.2 re module will throw this
- # exception. Back off to a slower, general-purpose
- # algorithm that works for all data types.
- args = _separate_args.findall(args)
- result = []
- for a in args:
- result.append(self.conv(self.expand(a, lvars)))
- if len(result) == 1:
- result = result[0]
- else:
- result = string.join(map(str, result), '')
- return result
- else:
- return self.expand(args, lvars)
-
- if conv is None:
- conv = _strconv[mode]
-
- # Doing this every time is a bit of a waste, since the Executor
- # has typically already populated the OverrideEnvironment with
- # $TARGET/$SOURCE variables. We're keeping this (for now), though,
- # because it supports existing behavior that allows us to call
- # an Action directly with an arbitrary target+source pair, which
- # we use in Tool/tex.py to handle calling $BIBTEX when necessary.
- # If we dropped that behavior (or found another way to cover it),
- # we could get rid of this call completely and just rely on the
- # Executor setting the variables.
- if not lvars.has_key('TARGET'):
- d = subst_dict(target, source)
- if d:
- lvars = lvars.copy()
- lvars.update(d)
-
- # We're (most likely) going to eval() things. If Python doesn't
- # find a __builtins__ value in the global dictionary used for eval(),
- # it copies the current global values for you. Avoid this by
- # setting it explicitly and then deleting, so we don't pollute the
- # construction environment Dictionary(ies) that are typically used
- # for expansion.
- gvars['__builtins__'] = __builtins__
-
- ss = StringSubber(env, mode, conv, gvars)
- result = ss.substitute(strSubst, lvars)
-
- try:
- del gvars['__builtins__']
- except KeyError:
- pass
-
- if is_String(result):
- # Remove $(-$) pairs and any stuff in between,
- # if that's appropriate.
- remove = _regex_remove[mode]
- if remove:
- result = remove.sub('', result)
- if mode != SUBST_RAW:
- # Compress strings of white space characters into
- # a single space.
- result = string.strip(_space_sep.sub(' ', result))
- elif is_Sequence(result):
- remove = _list_remove[mode]
- if remove:
- result = remove(result)
-
- return result
-
-#Subst_List_Strings = {}
-
-def scons_subst_list(strSubst, env, mode=SUBST_RAW, target=None, source=None, gvars={}, lvars={}, conv=None):
- """Substitute construction variables in a string (or list or other
- object) and separate the arguments into a command list.
-
- The companion scons_subst() function (above) handles basic
- substitutions within strings, so see that function instead
- if that's what you're looking for.
- """
-# try:
-# Subst_List_Strings[strSubst] = Subst_List_Strings[strSubst] + 1
-# except KeyError:
-# Subst_List_Strings[strSubst] = 1
-# import SCons.Debug
-# SCons.Debug.caller_trace(1)
- class ListSubber(UserList.UserList):
- """A class to construct the results of a scons_subst_list() call.
-
- Like StringSubber, this class binds a specific construction
- environment, mode, target and source with two methods
- (substitute() and expand()) that handle the expansion.
-
- In addition, however, this class is used to track the state of
- the result(s) we're gathering so we can do the appropriate thing
- whenever we have to append another word to the result--start a new
- line, start a new word, append to the current word, etc. We do
- this by setting the "append" attribute to the right method so
- that our wrapper methods only need ever call ListSubber.append(),
- and the rest of the object takes care of doing the right thing
- internally.
- """
- def __init__(self, env, mode, conv, gvars):
- UserList.UserList.__init__(self, [])
- self.env = env
- self.mode = mode
- self.conv = conv
- self.gvars = gvars
-
- if self.mode == SUBST_RAW:
- self.add_strip = lambda x, s=self: s.append(x)
- else:
- self.add_strip = lambda x, s=self: None
- self.in_strip = None
- self.next_line()
-
- def expand(self, s, lvars, within_list):
- """Expand a single "token" as necessary, appending the
- expansion to the current result.
-
- This handles expanding different types of things (strings,
- lists, callables) appropriately. It calls the wrapper
- substitute() method to re-expand things as necessary, so that
- the results of expansions of side-by-side strings still get
- re-evaluated separately, not smushed together.
- """
-
- if is_String(s):
- try:
- s0, s1 = s[:2]
- except (IndexError, ValueError):
- self.append(s)
- return
- if s0 != '$':
- self.append(s)
- return
- if s1 == '$':
- self.append('$')
- elif s1 == '(':
- self.open_strip('$(')
- elif s1 == ')':
- self.close_strip('$)')
- else:
- key = s[1:]
- if key[0] == '{' or string.find(key, '.') >= 0:
- if key[0] == '{':
- key = key[1:-1]
- try:
- s = eval(key, self.gvars, lvars)
- except KeyboardInterrupt:
- raise
- except Exception, e:
- if e.__class__ in AllowableExceptions:
- return
- raise_exception(e, lvars['TARGETS'], s)
- else:
- if lvars.has_key(key):
- s = lvars[key]
- elif self.gvars.has_key(key):
- s = self.gvars[key]
- elif not NameError in AllowableExceptions:
- raise_exception(NameError(), lvars['TARGETS'], s)
- else:
- return
-
- # Before re-expanding the result, handle
- # recursive expansion by copying the local
- # variable dictionary and overwriting a null
- # string for the value of the variable name
- # we just expanded.
- lv = lvars.copy()
- var = string.split(key, '.')[0]
- lv[var] = ''
- self.substitute(s, lv, 0)
- self.this_word()
- elif is_Sequence(s):
- for a in s:
- self.substitute(a, lvars, 1)
- self.next_word()
- elif callable(s):
- try:
- s = s(target=lvars['TARGETS'],
- source=lvars['SOURCES'],
- env=self.env,
- for_signature=(self.mode != SUBST_CMD))
- except TypeError:
- # This probably indicates that it's a callable
- # object that doesn't match our calling arguments
- # (like an Action).
- if self.mode == SUBST_RAW:
- self.append(s)
- return
- s = self.conv(s)
- self.substitute(s, lvars, within_list)
- elif s is None:
- self.this_word()
- else:
- self.append(s)
-
- def substitute(self, args, lvars, within_list):
- """Substitute expansions in an argument or list of arguments.
-
- This serves as a wrapper for splitting up a string into
- separate tokens.
- """
-
- if is_String(args) and not isinstance(args, CmdStringHolder):
- args = str(args) # In case it's a UserString.
- args = _separate_args.findall(args)
- for a in args:
- if a[0] in ' \t\n\r\f\v':
- if '\n' in a:
- self.next_line()
- elif within_list:
- self.append(a)
- else:
- self.next_word()
- else:
- self.expand(a, lvars, within_list)
- else:
- self.expand(args, lvars, within_list)
-
- def next_line(self):
- """Arrange for the next word to start a new line. This
- is like starting a new word, except that we have to append
- another line to the result."""
- UserList.UserList.append(self, [])
- self.next_word()
-
- def this_word(self):
- """Arrange for the next word to append to the end of the
- current last word in the result."""
- self.append = self.add_to_current_word
-
- def next_word(self):
- """Arrange for the next word to start a new word."""
- self.append = self.add_new_word
-
- def add_to_current_word(self, x):
- """Append the string x to the end of the current last word
- in the result. If that is not possible, then just add
- it as a new word. Make sure the entire concatenated string
- inherits the object attributes of x (in particular, the
- escape function) by wrapping it as CmdStringHolder."""
-
- if not self.in_strip or self.mode != SUBST_SIG:
- try:
- current_word = self[-1][-1]
- except IndexError:
- self.add_new_word(x)
- else:
- # All right, this is a hack and it should probably
- # be refactored out of existence in the future.
- # The issue is that we want to smoosh words together
- # and make one file name that gets escaped if
- # we're expanding something like foo$EXTENSION,
- # but we don't want to smoosh them together if
- # it's something like >$TARGET, because then we'll
- # treat the '>' like it's part of the file name.
- # So for now, just hard-code looking for the special
- # command-line redirection characters...
- try:
- last_char = str(current_word)[-1]
- except IndexError:
- last_char = '\0'
- if last_char in '<>|':
- self.add_new_word(x)
- else:
- y = current_word + x
-
- # We used to treat a word appended to a literal
- # as a literal itself, but this caused problems
- # with interpreting quotes around space-separated
- # targets on command lines. Removing this makes
- # none of the "substantive" end-to-end tests fail,
- # so we'll take this out but leave it commented
- # for now in case there's a problem not covered
- # by the test cases and we need to resurrect this.
- #literal1 = self.literal(self[-1][-1])
- #literal2 = self.literal(x)
- y = self.conv(y)
- if is_String(y):
- #y = CmdStringHolder(y, literal1 or literal2)
- y = CmdStringHolder(y, None)
- self[-1][-1] = y
-
- def add_new_word(self, x):
- if not self.in_strip or self.mode != SUBST_SIG:
- literal = self.literal(x)
- x = self.conv(x)
- if is_String(x):
- x = CmdStringHolder(x, literal)
- self[-1].append(x)
- self.append = self.add_to_current_word
-
- def literal(self, x):
- try:
- l = x.is_literal
- except AttributeError:
- return None
- else:
- return l()
-
- def open_strip(self, x):
- """Handle the "open strip" $( token."""
- self.add_strip(x)
- self.in_strip = 1
-
- def close_strip(self, x):
- """Handle the "close strip" $) token."""
- self.add_strip(x)
- self.in_strip = None
-
- if conv is None:
- conv = _strconv[mode]
-
- # Doing this every time is a bit of a waste, since the Executor
- # has typically already populated the OverrideEnvironment with
- # $TARGET/$SOURCE variables. We're keeping this (for now), though,
- # because it supports existing behavior that allows us to call
- # an Action directly with an arbitrary target+source pair, which
- # we use in Tool/tex.py to handle calling $BIBTEX when necessary.
- # If we dropped that behavior (or found another way to cover it),
- # we could get rid of this call completely and just rely on the
- # Executor setting the variables.
- if not lvars.has_key('TARGET'):
- d = subst_dict(target, source)
- if d:
- lvars = lvars.copy()
- lvars.update(d)
-
- # We're (most likely) going to eval() things. If Python doesn't
- # find a __builtins__ value in the global dictionary used for eval(),
- # it copies the current global values for you. Avoid this by
- # setting it explicitly and then deleting, so we don't pollute the
- # construction environment Dictionary(ies) that are typically used
- # for expansion.
- gvars['__builtins__'] = __builtins__
-
- ls = ListSubber(env, mode, conv, gvars)
- ls.substitute(strSubst, lvars, 0)
-
- try:
- del gvars['__builtins__']
- except KeyError:
- pass
-
- return ls.data
-
-def scons_subst_once(strSubst, env, key):
- """Perform single (non-recursive) substitution of a single
- construction variable keyword.
-
- This is used when setting a variable when copying or overriding values
- in an Environment. We want to capture (expand) the old value before
- we override it, so people can do things like:
-
- env2 = env.Clone(CCFLAGS = '$CCFLAGS -g')
-
- We do this with some straightforward, brute-force code here...
- """
- if type(strSubst) == types.StringType and string.find(strSubst, '$') < 0:
- return strSubst
-
- matchlist = ['$' + key, '${' + key + '}']
- val = env.get(key, '')
- def sub_match(match, val=val, matchlist=matchlist):
- a = match.group(1)
- if a in matchlist:
- a = val
- if is_Sequence(a):
- return string.join(map(str, a))
- else:
- return str(a)
-
- if is_Sequence(strSubst):
- result = []
- for arg in strSubst:
- if is_String(arg):
- if arg in matchlist:
- arg = val
- if is_Sequence(arg):
- result.extend(arg)
- else:
- result.append(arg)
- else:
- result.append(_dollar_exps.sub(sub_match, arg))
- else:
- result.append(arg)
- return result
- elif is_String(strSubst):
- return _dollar_exps.sub(sub_match, strSubst)
- else:
- return strSubst
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Taskmaster.py b/3rdParty/SCons/scons-local/SCons/Taskmaster.py
deleted file mode 100644
index a33233d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Taskmaster.py
+++ /dev/null
@@ -1,1030 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__doc__ = """
-Generic Taskmaster module for the SCons build engine.
-
-This module contains the primary interface(s) between a wrapping user
-interface and the SCons build engine. There are two key classes here:
-
- Taskmaster
- This is the main engine for walking the dependency graph and
- calling things to decide what does or doesn't need to be built.
-
- Task
- This is the base class for allowing a wrapping interface to
- decide what does or doesn't actually need to be done. The
- intention is for a wrapping interface to subclass this as
- appropriate for different types of behavior it may need.
-
- The canonical example is the SCons native Python interface,
- which has Task subclasses that handle its specific behavior,
- like printing "`foo' is up to date" when a top-level target
- doesn't need to be built, and handling the -c option by removing
- targets as its "build" action. There is also a separate subclass
- for suppressing this output when the -q option is used.
-
- The Taskmaster instantiates a Task object for each (set of)
- target(s) that it decides need to be evaluated and/or built.
-"""
-
-__revision__ = "src/engine/SCons/Taskmaster.py 4043 2009/02/23 09:06:45 scons"
-
-from itertools import chain
-import operator
-import string
-import sys
-import traceback
-
-import SCons.Errors
-import SCons.Node
-import SCons.Warnings
-
-StateString = SCons.Node.StateString
-NODE_NO_STATE = SCons.Node.no_state
-NODE_PENDING = SCons.Node.pending
-NODE_EXECUTING = SCons.Node.executing
-NODE_UP_TO_DATE = SCons.Node.up_to_date
-NODE_EXECUTED = SCons.Node.executed
-NODE_FAILED = SCons.Node.failed
-
-
-# A subsystem for recording stats about how different Nodes are handled by
-# the main Taskmaster loop. There's no external control here (no need for
-# a --debug= option); enable it by changing the value of CollectStats.
-
-CollectStats = None
-
-class Stats:
- """
- A simple class for holding statistics about the disposition of a
- Node by the Taskmaster. If we're collecting statistics, each Node
- processed by the Taskmaster gets one of these attached, in which case
- the Taskmaster records its decision each time it processes the Node.
- (Ideally, that's just once per Node.)
- """
- def __init__(self):
- """
- Instantiates a Taskmaster.Stats object, initializing all
- appropriate counters to zero.
- """
- self.considered = 0
- self.already_handled = 0
- self.problem = 0
- self.child_failed = 0
- self.not_built = 0
- self.side_effects = 0
- self.build = 0
-
-StatsNodes = []
-
-fmt = "%(considered)3d "\
- "%(already_handled)3d " \
- "%(problem)3d " \
- "%(child_failed)3d " \
- "%(not_built)3d " \
- "%(side_effects)3d " \
- "%(build)3d "
-
-def dump_stats():
- StatsNodes.sort(lambda a, b: cmp(str(a), str(b)))
- for n in StatsNodes:
- print (fmt % n.stats.__dict__) + str(n)
-
-
-
-class Task:
- """
- Default SCons build engine task.
-
- This controls the interaction of the actual building of node
- and the rest of the engine.
-
- This is expected to handle all of the normally-customizable
- aspects of controlling a build, so any given application
- *should* be able to do what it wants by sub-classing this
- class and overriding methods as appropriate. If an application
- needs to customze something by sub-classing Taskmaster (or
- some other build engine class), we should first try to migrate
- that functionality into this class.
-
- Note that it's generally a good idea for sub-classes to call
- these methods explicitly to update state, etc., rather than
- roll their own interaction with Taskmaster from scratch.
- """
- def __init__(self, tm, targets, top, node):
- self.tm = tm
- self.targets = targets
- self.top = top
- self.node = node
- self.exc_clear()
-
- def trace_message(self, method, node, description='node'):
- fmt = '%-20s %s %s\n'
- return fmt % (method + ':', description, self.tm.trace_node(node))
-
- def display(self, message):
- """
- Hook to allow the calling interface to display a message.
-
- This hook gets called as part of preparing a task for execution
- (that is, a Node to be built). As part of figuring out what Node
- should be built next, the actually target list may be altered,
- along with a message describing the alteration. The calling
- interface can subclass Task and provide a concrete implementation
- of this method to see those messages.
- """
- pass
-
- def prepare(self):
- """
- Called just before the task is executed.
-
- This is mainly intended to give the target Nodes a chance to
- unlink underlying files and make all necessary directories before
- the Action is actually called to build the targets.
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.prepare()', self.node))
-
- # Now that it's the appropriate time, give the TaskMaster a
- # chance to raise any exceptions it encountered while preparing
- # this task.
- self.exception_raise()
-
- if self.tm.message:
- self.display(self.tm.message)
- self.tm.message = None
-
- # Let the targets take care of any necessary preparations.
- # This includes verifying that all of the necessary sources
- # and dependencies exist, removing the target file(s), etc.
- #
- # As of April 2008, the get_executor().prepare() method makes
- # sure that all of the aggregate sources necessary to build this
- # Task's target(s) exist in one up-front check. The individual
- # target t.prepare() methods check that each target's explicit
- # or implicit dependencies exists, and also initialize the
- # .sconsign info.
- executor = self.targets[0].get_executor()
- executor.prepare()
- for t in executor.get_action_targets():
- t.prepare()
- for s in t.side_effects:
- s.prepare()
-
- def get_target(self):
- """Fetch the target being built or updated by this task.
- """
- return self.node
-
- def needs_execute(self):
- # TODO(deprecate): "return True" is the old default behavior;
- # change it to NotImplementedError (after running through the
- # Deprecation Cycle) so the desired behavior is explicitly
- # determined by which concrete subclass is used.
- #raise NotImplementedError
- msg = ('Direct use of the Taskmaster.Task class will be deprecated\n'
- + '\tin a future release.')
- SCons.Warnings.warn(SCons.Warnings.TaskmasterNeedsExecuteWarning, msg)
- return True
-
- def execute(self):
- """
- Called to execute the task.
-
- This method is called from multiple threads in a parallel build,
- so only do thread safe stuff here. Do thread unsafe stuff in
- prepare(), executed() or failed().
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.execute()', self.node))
-
- try:
- everything_was_cached = 1
- for t in self.targets:
- if t.retrieve_from_cache():
- # Call the .built() method without calling the
- # .push_to_cache() method, since we just got the
- # target from the cache and don't need to push
- # it back there.
- t.set_state(NODE_EXECUTED)
- t.built()
- else:
- everything_was_cached = 0
- break
- if not everything_was_cached:
- self.targets[0].build()
- except SystemExit:
- exc_value = sys.exc_info()[1]
- raise SCons.Errors.ExplicitExit(self.targets[0], exc_value.code)
- except SCons.Errors.UserError:
- raise
- except SCons.Errors.BuildError:
- raise
- except Exception, e:
- buildError = SCons.Errors.convert_to_BuildError(e)
- buildError.node = self.targets[0]
- buildError.exc_info = sys.exc_info()
- raise buildError
-
- def executed_without_callbacks(self):
- """
- Called when the task has been successfully executed
- and the Taskmaster instance doesn't want to call
- the Node's callback methods.
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.executed_without_callbacks()',
- self.node))
-
- for t in self.targets:
- if t.get_state() == NODE_EXECUTING:
- for side_effect in t.side_effects:
- side_effect.set_state(NODE_NO_STATE)
- t.set_state(NODE_EXECUTED)
-
- def executed_with_callbacks(self):
- """
- Called when the task has been successfully executed and
- the Taskmaster instance wants to call the Node's callback
- methods.
-
- This may have been a do-nothing operation (to preserve build
- order), so we must check the node's state before deciding whether
- it was "built", in which case we call the appropriate Node method.
- In any event, we always call "visited()", which will handle any
- post-visit actions that must take place regardless of whether
- or not the target was an actual built target or a source Node.
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.executed_with_callbacks()',
- self.node))
-
- for t in self.targets:
- if t.get_state() == NODE_EXECUTING:
- for side_effect in t.side_effects:
- side_effect.set_state(NODE_NO_STATE)
- t.set_state(NODE_EXECUTED)
- t.push_to_cache()
- t.built()
- t.visited()
-
- executed = executed_with_callbacks
-
- def failed(self):
- """
- Default action when a task fails: stop the build.
-
- Note: Although this function is normally invoked on nodes in
- the executing state, it might also be invoked on up-to-date
- nodes when using Configure().
- """
- self.fail_stop()
-
- def fail_stop(self):
- """
- Explicit stop-the-build failure.
-
- This sets failure status on the target nodes and all of
- their dependent parent nodes.
-
- Note: Although this function is normally invoked on nodes in
- the executing state, it might also be invoked on up-to-date
- nodes when using Configure().
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.failed_stop()', self.node))
-
- # Invoke will_not_build() to clean-up the pending children
- # list.
- self.tm.will_not_build(self.targets, lambda n: n.set_state(NODE_FAILED))
-
- # Tell the taskmaster to not start any new tasks
- self.tm.stop()
-
- # We're stopping because of a build failure, but give the
- # calling Task class a chance to postprocess() the top-level
- # target under which the build failure occurred.
- self.targets = [self.tm.current_top]
- self.top = 1
-
- def fail_continue(self):
- """
- Explicit continue-the-build failure.
-
- This sets failure status on the target nodes and all of
- their dependent parent nodes.
-
- Note: Although this function is normally invoked on nodes in
- the executing state, it might also be invoked on up-to-date
- nodes when using Configure().
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.failed_continue()', self.node))
-
- self.tm.will_not_build(self.targets, lambda n: n.set_state(NODE_FAILED))
-
- def make_ready_all(self):
- """
- Marks all targets in a task ready for execution.
-
- This is used when the interface needs every target Node to be
- visited--the canonical example being the "scons -c" option.
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.make_ready_all()', self.node))
-
- self.out_of_date = self.targets[:]
- for t in self.targets:
- t.disambiguate().set_state(NODE_EXECUTING)
- for s in t.side_effects:
- s.set_state(NODE_EXECUTING)
-
- def make_ready_current(self):
- """
- Marks all targets in a task ready for execution if any target
- is not current.
-
- This is the default behavior for building only what's necessary.
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.make_ready_current()',
- self.node))
-
- self.out_of_date = []
- needs_executing = False
- for t in self.targets:
- try:
- t.disambiguate().make_ready()
- is_up_to_date = not t.has_builder() or \
- (not t.always_build and t.is_up_to_date())
- except EnvironmentError, e:
- raise SCons.Errors.BuildError(node=t, errstr=e.strerror, filename=e.filename)
-
- if not is_up_to_date:
- self.out_of_date.append(t)
- needs_executing = True
-
- if needs_executing:
- for t in self.targets:
- t.set_state(NODE_EXECUTING)
- for s in t.side_effects:
- s.set_state(NODE_EXECUTING)
- else:
- for t in self.targets:
- # We must invoke visited() to ensure that the node
- # information has been computed before allowing the
- # parent nodes to execute. (That could occur in a
- # parallel build...)
- t.visited()
- t.set_state(NODE_UP_TO_DATE)
-
- make_ready = make_ready_current
-
- def postprocess(self):
- """
- Post-processes a task after it's been executed.
-
- This examines all the targets just built (or not, we don't care
- if the build was successful, or even if there was no build
- because everything was up-to-date) to see if they have any
- waiting parent Nodes, or Nodes waiting on a common side effect,
- that can be put back on the candidates list.
- """
- T = self.tm.trace
- if T: T.write(self.trace_message('Task.postprocess()', self.node))
-
- # We may have built multiple targets, some of which may have
- # common parents waiting for this build. Count up how many
- # targets each parent was waiting for so we can subtract the
- # values later, and so we *don't* put waiting side-effect Nodes
- # back on the candidates list if the Node is also a waiting
- # parent.
-
- targets = set(self.targets)
-
- pending_children = self.tm.pending_children
- parents = {}
- for t in targets:
- # A node can only be in the pending_children set if it has
- # some waiting_parents.
- if t.waiting_parents:
- if T: T.write(self.trace_message('Task.postprocess()',
- t,
- 'removing'))
- pending_children.discard(t)
- for p in t.waiting_parents:
- parents[p] = parents.get(p, 0) + 1
-
- for t in targets:
- for s in t.side_effects:
- if s.get_state() == NODE_EXECUTING:
- s.set_state(NODE_NO_STATE)
- for p in s.waiting_parents:
- parents[p] = parents.get(p, 0) + 1
- for p in s.waiting_s_e:
- if p.ref_count == 0:
- self.tm.candidates.append(p)
-
- for p, subtract in parents.items():
- p.ref_count = p.ref_count - subtract
- if T: T.write(self.trace_message('Task.postprocess()',
- p,
- 'adjusted parent ref count'))
- if p.ref_count == 0:
- self.tm.candidates.append(p)
-
- for t in targets:
- t.postprocess()
-
- # Exception handling subsystem.
- #
- # Exceptions that occur while walking the DAG or examining Nodes
- # must be raised, but must be raised at an appropriate time and in
- # a controlled manner so we can, if necessary, recover gracefully,
- # possibly write out signature information for Nodes we've updated,
- # etc. This is done by having the Taskmaster tell us about the
- # exception, and letting
-
- def exc_info(self):
- """
- Returns info about a recorded exception.
- """
- return self.exception
-
- def exc_clear(self):
- """
- Clears any recorded exception.
-
- This also changes the "exception_raise" attribute to point
- to the appropriate do-nothing method.
- """
- self.exception = (None, None, None)
- self.exception_raise = self._no_exception_to_raise
-
- def exception_set(self, exception=None):
- """
- Records an exception to be raised at the appropriate time.
-
- This also changes the "exception_raise" attribute to point
- to the method that will, in fact
- """
- if not exception:
- exception = sys.exc_info()
- self.exception = exception
- self.exception_raise = self._exception_raise
-
- def _no_exception_to_raise(self):
- pass
-
- def _exception_raise(self):
- """
- Raises a pending exception that was recorded while getting a
- Task ready for execution.
- """
- exc = self.exc_info()[:]
- try:
- exc_type, exc_value, exc_traceback = exc
- except ValueError:
- exc_type, exc_value = exc
- exc_traceback = None
- raise exc_type, exc_value, exc_traceback
-
-class AlwaysTask(Task):
- def needs_execute(self):
- """
- Always returns True (indicating this Task should always
- be executed).
-
- Subclasses that need this behavior (as opposed to the default
- of only executing Nodes that are out of date w.r.t. their
- dependencies) can use this as follows:
-
- class MyTaskSubclass(SCons.Taskmaster.Task):
- needs_execute = SCons.Taskmaster.Task.execute_always
- """
- return True
-
-class OutOfDateTask(Task):
- def needs_execute(self):
- """
- Returns True (indicating this Task should be executed) if this
- Task's target state indicates it needs executing, which has
- already been determined by an earlier up-to-date check.
- """
- return self.targets[0].get_state() == SCons.Node.executing
-
-
-def find_cycle(stack, visited):
- if stack[-1] in visited:
- return None
- visited.add(stack[-1])
- for n in stack[-1].waiting_parents:
- stack.append(n)
- if stack[0] == stack[-1]:
- return stack
- if find_cycle(stack, visited):
- return stack
- stack.pop()
- return None
-
-
-class Taskmaster:
- """
- The Taskmaster for walking the dependency DAG.
- """
-
- def __init__(self, targets=[], tasker=None, order=None, trace=None):
- self.original_top = targets
- self.top_targets_left = targets[:]
- self.top_targets_left.reverse()
- self.candidates = []
- if tasker is None:
- tasker = OutOfDateTask
- self.tasker = tasker
- if not order:
- order = lambda l: l
- self.order = order
- self.message = None
- self.trace = trace
- self.next_candidate = self.find_next_candidate
- self.pending_children = set()
-
- def find_next_candidate(self):
- """
- Returns the next candidate Node for (potential) evaluation.
-
- The candidate list (really a stack) initially consists of all of
- the top-level (command line) targets provided when the Taskmaster
- was initialized. While we walk the DAG, visiting Nodes, all the
- children that haven't finished processing get pushed on to the
- candidate list. Each child can then be popped and examined in
- turn for whether *their* children are all up-to-date, in which
- case a Task will be created for their actual evaluation and
- potential building.
-
- Here is where we also allow candidate Nodes to alter the list of
- Nodes that should be examined. This is used, for example, when
- invoking SCons in a source directory. A source directory Node can
- return its corresponding build directory Node, essentially saying,
- "Hey, you really need to build this thing over here instead."
- """
- try:
- return self.candidates.pop()
- except IndexError:
- pass
- try:
- node = self.top_targets_left.pop()
- except IndexError:
- return None
- self.current_top = node
- alt, message = node.alter_targets()
- if alt:
- self.message = message
- self.candidates.append(node)
- self.candidates.extend(self.order(alt))
- node = self.candidates.pop()
- return node
-
- def no_next_candidate(self):
- """
- Stops Taskmaster processing by not returning a next candidate.
-
- Note that we have to clean-up the Taskmaster candidate list
- because the cycle detection depends on the fact all nodes have
- been processed somehow.
- """
- while self.candidates:
- candidates = self.candidates
- self.candidates = []
- self.will_not_build(candidates)
- return None
-
- def _validate_pending_children(self):
- """
- Validate the content of the pending_children set. Assert if an
- internal error is found.
-
- This function is used strictly for debugging the taskmaster by
- checking that no invariants are violated. It is not used in
- normal operation.
-
- The pending_children set is used to detect cycles in the
- dependency graph. We call a "pending child" a child that is
- found in the "pending" state when checking the dependencies of
- its parent node.
-
- A pending child can occur when the Taskmaster completes a loop
- through a cycle. For example, lets imagine a graph made of
- three node (A, B and C) making a cycle. The evaluation starts
- at node A. The taskmaster first consider whether node A's
- child B is up-to-date. Then, recursively, node B needs to
- check whether node C is up-to-date. This leaves us with a
- dependency graph looking like:
-
- Next candidate \
- \
- Node A (Pending) --> Node B(Pending) --> Node C (NoState)
- ^ |
- | |
- +-------------------------------------+
-
- Now, when the Taskmaster examines the Node C's child Node A,
- it finds that Node A is in the "pending" state. Therefore,
- Node A is a pending child of node C.
-
- Pending children indicate that the Taskmaster has potentially
- loop back through a cycle. We say potentially because it could
- also occur when a DAG is evaluated in parallel. For example,
- consider the following graph:
-
-
- Node A (Pending) --> Node B(Pending) --> Node C (Pending) --> ...
- | ^
- | |
- +----------> Node D (NoState) --------+
- /
- Next candidate /
-
- The Taskmaster first evaluates the nodes A, B, and C and
- starts building some children of node C. Assuming, that the
- maximum parallel level has not been reached, the Taskmaster
- will examine Node D. It will find that Node C is a pending
- child of Node D.
-
- In summary, evaluating a graph with a cycle will always
- involve a pending child at one point. A pending child might
- indicate either a cycle or a diamond-shaped DAG. Only a
- fraction of the nodes ends-up being a "pending child" of
- another node. This keeps the pending_children set small in
- practice.
-
- We can differentiate between the two cases if we wait until
- the end of the build. At this point, all the pending children
- nodes due to a diamond-shaped DAG will have been properly
- built (or will have failed to build). But, the pending
- children involved in a cycle will still be in the pending
- state.
-
- The taskmaster removes nodes from the pending_children set as
- soon as a pending_children node moves out of the pending
- state. This also helps to keep the pending_children set small.
- """
-
- for n in self.pending_children:
- assert n.state in (NODE_PENDING, NODE_EXECUTING), \
- (str(n), StateString[n.state])
- assert len(n.waiting_parents) != 0, (str(n), len(n.waiting_parents))
- for p in n.waiting_parents:
- assert p.ref_count > 0, (str(n), str(p), p.ref_count)
-
-
- def trace_message(self, message):
- return 'Taskmaster: %s\n' % message
-
- def trace_node(self, node):
- return '<%-10s %-3s %s>' % (StateString[node.get_state()],
- node.ref_count,
- repr(str(node)))
-
- def _find_next_ready_node(self):
- """
- Finds the next node that is ready to be built.
-
- This is *the* main guts of the DAG walk. We loop through the
- list of candidates, looking for something that has no un-built
- children (i.e., that is a leaf Node or has dependencies that are
- all leaf Nodes or up-to-date). Candidate Nodes are re-scanned
- (both the target Node itself and its sources, which are always
- scanned in the context of a given target) to discover implicit
- dependencies. A Node that must wait for some children to be
- built will be put back on the candidates list after the children
- have finished building. A Node that has been put back on the
- candidates list in this way may have itself (or its sources)
- re-scanned, in order to handle generated header files (e.g.) and
- the implicit dependencies therein.
-
- Note that this method does not do any signature calculation or
- up-to-date check itself. All of that is handled by the Task
- class. This is purely concerned with the dependency graph walk.
- """
-
- self.ready_exc = None
-
- T = self.trace
- if T: T.write('\n' + self.trace_message('Looking for a node to evaluate'))
-
- while 1:
- node = self.next_candidate()
- if node is None:
- if T: T.write(self.trace_message('No candidate anymore.') + '\n')
- return None
-
- node = node.disambiguate()
- state = node.get_state()
-
- # For debugging only:
- #
- # try:
- # self._validate_pending_children()
- # except:
- # self.ready_exc = sys.exc_info()
- # return node
-
- if CollectStats:
- if not hasattr(node, 'stats'):
- node.stats = Stats()
- StatsNodes.append(node)
- S = node.stats
- S.considered = S.considered + 1
- else:
- S = None
-
- if T: T.write(self.trace_message(' Considering node %s and its children:' % self.trace_node(node)))
-
- if state == NODE_NO_STATE:
- # Mark this node as being on the execution stack:
- node.set_state(NODE_PENDING)
- elif state > NODE_PENDING:
- # Skip this node if it has already been evaluated:
- if S: S.already_handled = S.already_handled + 1
- if T: T.write(self.trace_message(' already handled (executed)'))
- continue
-
- executor = node.get_executor()
-
- try:
- children = executor.get_all_children()
- except SystemExit:
- exc_value = sys.exc_info()[1]
- e = SCons.Errors.ExplicitExit(node, exc_value.code)
- self.ready_exc = (SCons.Errors.ExplicitExit, e)
- if T: T.write(self.trace_message(' SystemExit'))
- return node
- except Exception, e:
- # We had a problem just trying to figure out the
- # children (like a child couldn't be linked in to a
- # VariantDir, or a Scanner threw something). Arrange to
- # raise the exception when the Task is "executed."
- self.ready_exc = sys.exc_info()
- if S: S.problem = S.problem + 1
- if T: T.write(self.trace_message(' exception %s while scanning children.\n' % e))
- return node
-
- children_not_visited = []
- children_pending = set()
- children_not_ready = []
- children_failed = False
-
- for child in chain(children, executor.get_all_prerequisites()):
- childstate = child.get_state()
-
- if T: T.write(self.trace_message(' ' + self.trace_node(child)))
-
- if childstate == NODE_NO_STATE:
- children_not_visited.append(child)
- elif childstate == NODE_PENDING:
- children_pending.add(child)
- elif childstate == NODE_FAILED:
- children_failed = True
-
- if childstate <= NODE_EXECUTING:
- children_not_ready.append(child)
-
-
- # These nodes have not even been visited yet. Add
- # them to the list so that on some next pass we can
- # take a stab at evaluating them (or their children).
- children_not_visited.reverse()
- self.candidates.extend(self.order(children_not_visited))
- #if T and children_not_visited:
- # T.write(self.trace_message(' adding to candidates: %s' % map(str, children_not_visited)))
- # T.write(self.trace_message(' candidates now: %s\n' % map(str, self.candidates)))
-
- # Skip this node if any of its children have failed.
- #
- # This catches the case where we're descending a top-level
- # target and one of our children failed while trying to be
- # built by a *previous* descent of an earlier top-level
- # target.
- #
- # It can also occur if a node is reused in multiple
- # targets. One first descends though the one of the
- # target, the next time occurs through the other target.
- #
- # Note that we can only have failed_children if the
- # --keep-going flag was used, because without it the build
- # will stop before diving in the other branch.
- #
- # Note that even if one of the children fails, we still
- # added the other children to the list of candidate nodes
- # to keep on building (--keep-going).
- if children_failed:
- for n in executor.get_action_targets():
- n.set_state(NODE_FAILED)
-
- if S: S.child_failed = S.child_failed + 1
- if T: T.write(self.trace_message('****** %s\n' % self.trace_node(node)))
- continue
-
- if children_not_ready:
- for child in children_not_ready:
- # We're waiting on one or more derived targets
- # that have not yet finished building.
- if S: S.not_built = S.not_built + 1
-
- # Add this node to the waiting parents lists of
- # anything we're waiting on, with a reference
- # count so we can be put back on the list for
- # re-evaluation when they've all finished.
- node.ref_count = node.ref_count + child.add_to_waiting_parents(node)
- if T: T.write(self.trace_message(' adjusted ref count: %s, child %s' %
- (self.trace_node(node), repr(str(child)))))
-
- if T:
- for pc in children_pending:
- T.write(self.trace_message(' adding %s to the pending children set\n' %
- self.trace_node(pc)))
- self.pending_children = self.pending_children | children_pending
-
- continue
-
- # Skip this node if it has side-effects that are
- # currently being built:
- wait_side_effects = False
- for se in executor.get_action_side_effects():
- if se.get_state() == NODE_EXECUTING:
- se.add_to_waiting_s_e(node)
- wait_side_effects = True
-
- if wait_side_effects:
- if S: S.side_effects = S.side_effects + 1
- continue
-
- # The default when we've gotten through all of the checks above:
- # this node is ready to be built.
- if S: S.build = S.build + 1
- if T: T.write(self.trace_message('Evaluating %s\n' %
- self.trace_node(node)))
-
- # For debugging only:
- #
- # try:
- # self._validate_pending_children()
- # except:
- # self.ready_exc = sys.exc_info()
- # return node
-
- return node
-
- return None
-
- def next_task(self):
- """
- Returns the next task to be executed.
-
- This simply asks for the next Node to be evaluated, and then wraps
- it in the specific Task subclass with which we were initialized.
- """
- node = self._find_next_ready_node()
-
- if node is None:
- return None
-
- tlist = node.get_executor().get_all_targets()
-
- task = self.tasker(self, tlist, node in self.original_top, node)
- try:
- task.make_ready()
- except:
- # We had a problem just trying to get this task ready (like
- # a child couldn't be linked in to a VariantDir when deciding
- # whether this node is current). Arrange to raise the
- # exception when the Task is "executed."
- self.ready_exc = sys.exc_info()
-
- if self.ready_exc:
- task.exception_set(self.ready_exc)
-
- self.ready_exc = None
-
- return task
-
- def will_not_build(self, nodes, node_func=lambda n: None):
- """
- Perform clean-up about nodes that will never be built. Invokes
- a user defined function on all of these nodes (including all
- of their parents).
- """
-
- T = self.trace
-
- pending_children = self.pending_children
-
- to_visit = set(nodes)
- pending_children = pending_children - to_visit
-
- if T:
- for n in nodes:
- T.write(self.trace_message(' removing node %s from the pending children set\n' %
- self.trace_node(n)))
- try:
- while 1:
- try:
- node = to_visit.pop()
- except AttributeError:
- # Python 1.5.2
- if len(to_visit):
- node = to_visit[0]
- to_visit.remove(node)
- else:
- break
-
- node_func(node)
-
- # Prune recursion by flushing the waiting children
- # list immediately.
- parents = node.waiting_parents
- node.waiting_parents = set()
-
- to_visit = to_visit | parents
- pending_children = pending_children - parents
-
- for p in parents:
- p.ref_count = p.ref_count - 1
- if T: T.write(self.trace_message(' removing parent %s from the pending children set\n' %
- self.trace_node(p)))
- except KeyError:
- # The container to_visit has been emptied.
- pass
-
- # We have the stick back the pending_children list into the
- # task master because the python 1.5.2 compatibility does not
- # allow us to use in-place updates
- self.pending_children = pending_children
-
- def stop(self):
- """
- Stops the current build completely.
- """
- self.next_candidate = self.no_next_candidate
-
- def cleanup(self):
- """
- Check for dependency cycles.
- """
- if not self.pending_children:
- return
-
- # TODO(1.5)
- #nclist = [ (n, find_cycle([n], set())) for n in self.pending_children ]
- nclist = map(lambda n: (n, find_cycle([n], set())), self.pending_children)
-
- # TODO(1.5)
- #genuine_cycles = [
- # node for node, cycle in nclist
- # if cycle or node.get_state() != NODE_EXECUTED
- #]
- genuine_cycles = filter(lambda t: t[1] or t[0].get_state() != NODE_EXECUTED, nclist)
- if not genuine_cycles:
- # All of the "cycles" found were single nodes in EXECUTED state,
- # which is to say, they really weren't cycles. Just return.
- return
-
- desc = 'Found dependency cycle(s):\n'
- for node, cycle in nclist:
- if cycle:
- desc = desc + " " + string.join(map(str, cycle), " -> ") + "\n"
- else:
- desc = desc + \
- " Internal Error: no cycle found for node %s (%s) in state %s\n" % \
- (node, repr(node), StateString[node.get_state()])
-
- raise SCons.Errors.UserError, desc
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/386asm.py b/3rdParty/SCons/scons-local/SCons/Tool/386asm.py
deleted file mode 100644
index 19dd14c..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/386asm.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""SCons.Tool.386asm
-
-Tool specification for the 386ASM assembler for the Phar Lap ETS embedded
-operating system.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/386asm.py 4043 2009/02/23 09:06:45 scons"
-
-from SCons.Tool.PharLapCommon import addPharLapPaths
-import SCons.Util
-
-as_module = __import__('as', globals(), locals(), [])
-
-def generate(env):
- """Add Builders and construction variables for ar to an Environment."""
- as_module.generate(env)
-
- env['AS'] = '386asm'
- env['ASFLAGS'] = SCons.Util.CLVar('')
- env['ASPPFLAGS'] = '$ASFLAGS'
- env['ASCOM'] = '$AS $ASFLAGS $SOURCES -o $TARGET'
- env['ASPPCOM'] = '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS $SOURCES -o $TARGET'
-
- addPharLapPaths(env)
-
-def exists(env):
- return env.Detect('386asm')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/BitKeeper.py b/3rdParty/SCons/scons-local/SCons/Tool/BitKeeper.py
deleted file mode 100644
index 61476ca..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/BitKeeper.py
+++ /dev/null
@@ -1,65 +0,0 @@
-"""SCons.Tool.BitKeeper.py
-
-Tool-specific initialization for the BitKeeper source code control
-system.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/BitKeeper.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Builder
-import SCons.Util
-
-def generate(env):
- """Add a Builder factory function and construction variables for
- BitKeeper to an Environment."""
-
- def BitKeeperFactory(env=env):
- """ """
- act = SCons.Action.Action("$BITKEEPERCOM", "$BITKEEPERCOMSTR")
- return SCons.Builder.Builder(action = act, env = env)
-
- #setattr(env, 'BitKeeper', BitKeeperFactory)
- env.BitKeeper = BitKeeperFactory
-
- env['BITKEEPER'] = 'bk'
- env['BITKEEPERGET'] = '$BITKEEPER get'
- env['BITKEEPERGETFLAGS'] = SCons.Util.CLVar('')
- env['BITKEEPERCOM'] = '$BITKEEPERGET $BITKEEPERGETFLAGS $TARGET'
-
-def exists(env):
- return env.Detect('bk')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/CVS.py b/3rdParty/SCons/scons-local/SCons/Tool/CVS.py
deleted file mode 100644
index 0782970..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/CVS.py
+++ /dev/null
@@ -1,73 +0,0 @@
-"""SCons.Tool.CVS.py
-
-Tool-specific initialization for CVS.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/CVS.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Builder
-import SCons.Util
-
-def generate(env):
- """Add a Builder factory function and construction variables for
- CVS to an Environment."""
-
- def CVSFactory(repos, module='', env=env):
- """ """
- # fail if repos is not an absolute path name?
- if module != '':
- # Don't use os.path.join() because the name we fetch might
- # be across a network and must use POSIX slashes as separators.
- module = module + '/'
- env['CVSCOM'] = '$CVS $CVSFLAGS co $CVSCOFLAGS -d ${TARGET.dir} $CVSMODULE${TARGET.posix}'
- act = SCons.Action.Action('$CVSCOM', '$CVSCOMSTR')
- return SCons.Builder.Builder(action = act,
- env = env,
- CVSREPOSITORY = repos,
- CVSMODULE = module)
-
- #setattr(env, 'CVS', CVSFactory)
- env.CVS = CVSFactory
-
- env['CVS'] = 'cvs'
- env['CVSFLAGS'] = SCons.Util.CLVar('-d $CVSREPOSITORY')
- env['CVSCOFLAGS'] = SCons.Util.CLVar('')
- env['CVSCOM'] = '$CVS $CVSFLAGS co $CVSCOFLAGS ${TARGET.posix}'
-
-def exists(env):
- return env.Detect('cvs')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/FortranCommon.py b/3rdParty/SCons/scons-local/SCons/Tool/FortranCommon.py
deleted file mode 100644
index 2cc4387..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/FortranCommon.py
+++ /dev/null
@@ -1,247 +0,0 @@
-"""SCons.Tool.FortranCommon
-
-Stuff for processing Fortran, common to all fortran dialects.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/FortranCommon.py 4043 2009/02/23 09:06:45 scons"
-
-import re
-import string
-import os.path
-
-import SCons.Action
-import SCons.Defaults
-import SCons.Scanner.Fortran
-import SCons.Tool
-import SCons.Util
-
-def isfortran(env, source):
- """Return 1 if any of code in source has fortran files in it, 0
- otherwise."""
- try:
- fsuffixes = env['FORTRANSUFFIXES']
- except KeyError:
- # If no FORTRANSUFFIXES, no fortran tool, so there is no need to look
- # for fortran sources.
- return 0
-
- if not source:
- # Source might be None for unusual cases like SConf.
- return 0
- for s in source:
- if s.sources:
- ext = os.path.splitext(str(s.sources[0]))[1]
- if ext in fsuffixes:
- return 1
- return 0
-
-def _fortranEmitter(target, source, env):
- node = source[0].rfile()
- if not node.exists() and not node.is_derived():
- print "Could not locate " + str(node.name)
- return ([], [])
- mod_regex = """(?i)^\s*MODULE\s+(?!PROCEDURE)(\w+)"""
- cre = re.compile(mod_regex,re.M)
- # Retrieve all USE'd module names
- modules = cre.findall(node.get_text_contents())
- # Remove unique items from the list
- modules = SCons.Util.unique(modules)
- # Convert module name to a .mod filename
- suffix = env.subst('$FORTRANMODSUFFIX', target=target, source=source)
- moddir = env.subst('$FORTRANMODDIR', target=target, source=source)
- modules = map(lambda x, s=suffix: string.lower(x) + s, modules)
- for m in modules:
- target.append(env.fs.File(m, moddir))
- return (target, source)
-
-def FortranEmitter(target, source, env):
- target, source = _fortranEmitter(target, source, env)
- return SCons.Defaults.StaticObjectEmitter(target, source, env)
-
-def ShFortranEmitter(target, source, env):
- target, source = _fortranEmitter(target, source, env)
- return SCons.Defaults.SharedObjectEmitter(target, source, env)
-
-def ComputeFortranSuffixes(suffixes, ppsuffixes):
- """suffixes are fortran source files, and ppsuffixes the ones to be
- pre-processed. Both should be sequences, not strings."""
- assert len(suffixes) > 0
- s = suffixes[0]
- sup = string.upper(s)
- upper_suffixes = map(string.upper, suffixes)
- if SCons.Util.case_sensitive_suffixes(s, sup):
- ppsuffixes.extend(upper_suffixes)
- else:
- suffixes.extend(upper_suffixes)
-
-def CreateDialectActions(dialect):
- """Create dialect specific actions."""
- CompAction = SCons.Action.Action('$%sCOM ' % dialect, '$%sCOMSTR' % dialect)
- CompPPAction = SCons.Action.Action('$%sPPCOM ' % dialect, '$%sPPCOMSTR' % dialect)
- ShCompAction = SCons.Action.Action('$SH%sCOM ' % dialect, '$SH%sCOMSTR' % dialect)
- ShCompPPAction = SCons.Action.Action('$SH%sPPCOM ' % dialect, '$SH%sPPCOMSTR' % dialect)
-
- return CompAction, CompPPAction, ShCompAction, ShCompPPAction
-
-def DialectAddToEnv(env, dialect, suffixes, ppsuffixes, support_module = 0):
- """Add dialect specific construction variables."""
- ComputeFortranSuffixes(suffixes, ppsuffixes)
-
- fscan = SCons.Scanner.Fortran.FortranScan("%sPATH" % dialect)
-
- for suffix in suffixes + ppsuffixes:
- SCons.Tool.SourceFileScanner.add_scanner(suffix, fscan)
-
- env.AppendUnique(FORTRANSUFFIXES = suffixes + ppsuffixes)
-
- compaction, compppaction, shcompaction, shcompppaction = \
- CreateDialectActions(dialect)
-
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- for suffix in suffixes:
- static_obj.add_action(suffix, compaction)
- shared_obj.add_action(suffix, shcompaction)
- static_obj.add_emitter(suffix, FortranEmitter)
- shared_obj.add_emitter(suffix, ShFortranEmitter)
-
- for suffix in ppsuffixes:
- static_obj.add_action(suffix, compppaction)
- shared_obj.add_action(suffix, shcompppaction)
- static_obj.add_emitter(suffix, FortranEmitter)
- shared_obj.add_emitter(suffix, ShFortranEmitter)
-
- if not env.has_key('%sFLAGS' % dialect):
- env['%sFLAGS' % dialect] = SCons.Util.CLVar('')
-
- if not env.has_key('SH%sFLAGS' % dialect):
- env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS' % dialect)
-
- # If a tool does not define fortran prefix/suffix for include path, use C ones
- if not env.has_key('INC%sPREFIX' % dialect):
- env['INC%sPREFIX' % dialect] = '$INCPREFIX'
-
- if not env.has_key('INC%sSUFFIX' % dialect):
- env['INC%sSUFFIX' % dialect] = '$INCSUFFIX'
-
- env['_%sINCFLAGS' % dialect] = '$( ${_concat(INC%sPREFIX, %sPATH, INC%sSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)' % (dialect, dialect, dialect)
-
- if support_module == 1:
- env['%sCOM' % dialect] = '$%s -o $TARGET -c $%sFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)
- env['%sPPCOM' % dialect] = '$%s -o $TARGET -c $%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)
- env['SH%sCOM' % dialect] = '$SH%s -o $TARGET -c $SH%sFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)
- env['SH%sPPCOM' % dialect] = '$SH%s -o $TARGET -c $SH%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)
- else:
- env['%sCOM' % dialect] = '$%s -o $TARGET -c $%sFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect)
- env['%sPPCOM' % dialect] = '$%s -o $TARGET -c $%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect)
- env['SH%sCOM' % dialect] = '$SH%s -o $TARGET -c $SH%sFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect)
- env['SH%sPPCOM' % dialect] = '$SH%s -o $TARGET -c $SH%sFLAGS $CPPFLAGS $_CPPDEFFLAGS $_%sINCFLAGS $SOURCES' % (dialect, dialect, dialect)
-
-def add_fortran_to_env(env):
- """Add Builders and construction variables for Fortran to an Environment."""
- try:
- FortranSuffixes = env['FORTRANFILESUFFIXES']
- except KeyError:
- FortranSuffixes = ['.f', '.for', '.ftn']
-
- #print "Adding %s to fortran suffixes" % FortranSuffixes
- try:
- FortranPPSuffixes = env['FORTRANPPFILESUFFIXES']
- except KeyError:
- FortranPPSuffixes = ['.fpp', '.FPP']
-
- DialectAddToEnv(env, "FORTRAN", FortranSuffixes,
- FortranPPSuffixes, support_module = 1)
-
- env['FORTRANMODPREFIX'] = '' # like $LIBPREFIX
- env['FORTRANMODSUFFIX'] = '.mod' # like $LIBSUFFIX
-
- env['FORTRANMODDIR'] = '' # where the compiler should place .mod files
- env['FORTRANMODDIRPREFIX'] = '' # some prefix to $FORTRANMODDIR - similar to $INCPREFIX
- env['FORTRANMODDIRSUFFIX'] = '' # some suffix to $FORTRANMODDIR - similar to $INCSUFFIX
- env['_FORTRANMODFLAG'] = '$( ${_concat(FORTRANMODDIRPREFIX, FORTRANMODDIR, FORTRANMODDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
-
-def add_f77_to_env(env):
- """Add Builders and construction variables for f77 to an Environment."""
- try:
- F77Suffixes = env['F77FILESUFFIXES']
- except KeyError:
- F77Suffixes = ['.f77']
-
- #print "Adding %s to f77 suffixes" % F77Suffixes
- try:
- F77PPSuffixes = env['F77PPFILESUFFIXES']
- except KeyError:
- F77PPSuffixes = []
-
- DialectAddToEnv(env, "F77", F77Suffixes, F77PPSuffixes)
-
-def add_f90_to_env(env):
- """Add Builders and construction variables for f90 to an Environment."""
- try:
- F90Suffixes = env['F90FILESUFFIXES']
- except KeyError:
- F90Suffixes = ['.f90']
-
- #print "Adding %s to f90 suffixes" % F90Suffixes
- try:
- F90PPSuffixes = env['F90PPFILESUFFIXES']
- except KeyError:
- F90PPSuffixes = []
-
- DialectAddToEnv(env, "F90", F90Suffixes, F90PPSuffixes,
- support_module = 1)
-
-def add_f95_to_env(env):
- """Add Builders and construction variables for f95 to an Environment."""
- try:
- F95Suffixes = env['F95FILESUFFIXES']
- except KeyError:
- F95Suffixes = ['.f95']
-
- #print "Adding %s to f95 suffixes" % F95Suffixes
- try:
- F95PPSuffixes = env['F95PPFILESUFFIXES']
- except KeyError:
- F95PPSuffixes = []
-
- DialectAddToEnv(env, "F95", F95Suffixes, F95PPSuffixes,
- support_module = 1)
-
-def add_all_to_env(env):
- """Add builders and construction variables for all supported fortran
- dialects."""
- add_fortran_to_env(env)
- add_f77_to_env(env)
- add_f90_to_env(env)
- add_f95_to_env(env)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/JavaCommon.py b/3rdParty/SCons/scons-local/SCons/Tool/JavaCommon.py
deleted file mode 100644
index cc3e421..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/JavaCommon.py
+++ /dev/null
@@ -1,323 +0,0 @@
-"""SCons.Tool.JavaCommon
-
-Stuff for processing Java.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/JavaCommon.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-import re
-import string
-
-java_parsing = 1
-
-default_java_version = '1.4'
-
-if java_parsing:
- # Parse Java files for class names.
- #
- # This is a really cool parser from Charles Crain
- # that finds appropriate class names in Java source.
-
- # A regular expression that will find, in a java file:
- # newlines;
- # double-backslashes;
- # a single-line comment "//";
- # single or double quotes preceeded by a backslash;
- # single quotes, double quotes, open or close braces, semi-colons,
- # periods, open or close parentheses;
- # floating-point numbers;
- # any alphanumeric token (keyword, class name, specifier);
- # any alphanumeric token surrounded by angle brackets (generics);
- # the multi-line comment begin and end tokens /* and */;
- # array declarations "[]".
- _reToken = re.compile(r'(\n|\\\\|//|\\[\'"]|[\'"\{\}\;\.\(\)]|' +
- r'\d*\.\d*|[A-Za-z_][\w\$\.]*|<[A-Za-z_]\w+>|' +
- r'/\*|\*/|\[\])')
-
- class OuterState:
- """The initial state for parsing a Java file for classes,
- interfaces, and anonymous inner classes."""
- def __init__(self, version=default_java_version):
-
- if not version in ('1.1', '1.2', '1.3','1.4', '1.5', '1.6'):
- msg = "Java version %s not supported" % version
- raise NotImplementedError, msg
-
- self.version = version
- self.listClasses = []
- self.listOutputs = []
- self.stackBrackets = []
- self.brackets = 0
- self.nextAnon = 1
- self.localClasses = []
- self.stackAnonClassBrackets = []
- self.anonStacksStack = [[0]]
- self.package = None
-
- def trace(self):
- pass
-
- def __getClassState(self):
- try:
- return self.classState
- except AttributeError:
- ret = ClassState(self)
- self.classState = ret
- return ret
-
- def __getPackageState(self):
- try:
- return self.packageState
- except AttributeError:
- ret = PackageState(self)
- self.packageState = ret
- return ret
-
- def __getAnonClassState(self):
- try:
- return self.anonState
- except AttributeError:
- self.outer_state = self
- ret = SkipState(1, AnonClassState(self))
- self.anonState = ret
- return ret
-
- def __getSkipState(self):
- try:
- return self.skipState
- except AttributeError:
- ret = SkipState(1, self)
- self.skipState = ret
- return ret
-
- def __getAnonStack(self):
- return self.anonStacksStack[-1]
-
- def openBracket(self):
- self.brackets = self.brackets + 1
-
- def closeBracket(self):
- self.brackets = self.brackets - 1
- if len(self.stackBrackets) and \
- self.brackets == self.stackBrackets[-1]:
- self.listOutputs.append(string.join(self.listClasses, '$'))
- self.localClasses.pop()
- self.listClasses.pop()
- self.anonStacksStack.pop()
- self.stackBrackets.pop()
- if len(self.stackAnonClassBrackets) and \
- self.brackets == self.stackAnonClassBrackets[-1]:
- self.__getAnonStack().pop()
- self.stackAnonClassBrackets.pop()
-
- def parseToken(self, token):
- if token[:2] == '//':
- return IgnoreState('\n', self)
- elif token == '/*':
- return IgnoreState('*/', self)
- elif token == '{':
- self.openBracket()
- elif token == '}':
- self.closeBracket()
- elif token in [ '"', "'" ]:
- return IgnoreState(token, self)
- elif token == "new":
- # anonymous inner class
- if len(self.listClasses) > 0:
- return self.__getAnonClassState()
- return self.__getSkipState() # Skip the class name
- elif token in ['class', 'interface', 'enum']:
- if len(self.listClasses) == 0:
- self.nextAnon = 1
- self.stackBrackets.append(self.brackets)
- return self.__getClassState()
- elif token == 'package':
- return self.__getPackageState()
- elif token == '.':
- # Skip the attribute, it might be named "class", in which
- # case we don't want to treat the following token as
- # an inner class name...
- return self.__getSkipState()
- return self
-
- def addAnonClass(self):
- """Add an anonymous inner class"""
- if self.version in ('1.1', '1.2', '1.3', '1.4'):
- clazz = self.listClasses[0]
- self.listOutputs.append('%s$%d' % (clazz, self.nextAnon))
- elif self.version in ('1.5', '1.6'):
- self.stackAnonClassBrackets.append(self.brackets)
- className = []
- className.extend(self.listClasses)
- self.__getAnonStack()[-1] = self.__getAnonStack()[-1] + 1
- for anon in self.__getAnonStack():
- className.append(str(anon))
- self.listOutputs.append(string.join(className, '$'))
-
- self.nextAnon = self.nextAnon + 1
- self.__getAnonStack().append(0)
-
- def setPackage(self, package):
- self.package = package
-
- class AnonClassState:
- """A state that looks for anonymous inner classes."""
- def __init__(self, old_state):
- # outer_state is always an instance of OuterState
- self.outer_state = old_state.outer_state
- self.old_state = old_state
- self.brace_level = 0
- def parseToken(self, token):
- # This is an anonymous class if and only if the next
- # non-whitespace token is a bracket. Everything between
- # braces should be parsed as normal java code.
- if token[:2] == '//':
- return IgnoreState('\n', self)
- elif token == '/*':
- return IgnoreState('*/', self)
- elif token == '\n':
- return self
- elif token[0] == '<' and token[-1] == '>':
- return self
- elif token == '(':
- self.brace_level = self.brace_level + 1
- return self
- if self.brace_level > 0:
- if token == 'new':
- # look further for anonymous inner class
- return SkipState(1, AnonClassState(self))
- elif token in [ '"', "'" ]:
- return IgnoreState(token, self)
- elif token == ')':
- self.brace_level = self.brace_level - 1
- return self
- if token == '{':
- self.outer_state.addAnonClass()
- return self.old_state.parseToken(token)
-
- class SkipState:
- """A state that will skip a specified number of tokens before
- reverting to the previous state."""
- def __init__(self, tokens_to_skip, old_state):
- self.tokens_to_skip = tokens_to_skip
- self.old_state = old_state
- def parseToken(self, token):
- self.tokens_to_skip = self.tokens_to_skip - 1
- if self.tokens_to_skip < 1:
- return self.old_state
- return self
-
- class ClassState:
- """A state we go into when we hit a class or interface keyword."""
- def __init__(self, outer_state):
- # outer_state is always an instance of OuterState
- self.outer_state = outer_state
- def parseToken(self, token):
- # the next non-whitespace token should be the name of the class
- if token == '\n':
- return self
- # If that's an inner class which is declared in a method, it
- # requires an index prepended to the class-name, e.g.
- # 'Foo$1Inner' (Tigris Issue 2087)
- if self.outer_state.localClasses and \
- self.outer_state.stackBrackets[-1] > \
- self.outer_state.stackBrackets[-2]+1:
- locals = self.outer_state.localClasses[-1]
- try:
- idx = locals[token]
- locals[token] = locals[token]+1
- except KeyError:
- locals[token] = 1
- token = str(locals[token]) + token
- self.outer_state.localClasses.append({})
- self.outer_state.listClasses.append(token)
- self.outer_state.anonStacksStack.append([0])
- return self.outer_state
-
- class IgnoreState:
- """A state that will ignore all tokens until it gets to a
- specified token."""
- def __init__(self, ignore_until, old_state):
- self.ignore_until = ignore_until
- self.old_state = old_state
- def parseToken(self, token):
- if self.ignore_until == token:
- return self.old_state
- return self
-
- class PackageState:
- """The state we enter when we encounter the package keyword.
- We assume the next token will be the package name."""
- def __init__(self, outer_state):
- # outer_state is always an instance of OuterState
- self.outer_state = outer_state
- def parseToken(self, token):
- self.outer_state.setPackage(token)
- return self.outer_state
-
- def parse_java_file(fn, version=default_java_version):
- return parse_java(open(fn, 'r').read(), version)
-
- def parse_java(contents, version=default_java_version, trace=None):
- """Parse a .java file and return a double of package directory,
- plus a list of .class files that compiling that .java file will
- produce"""
- package = None
- initial = OuterState(version)
- currstate = initial
- for token in _reToken.findall(contents):
- # The regex produces a bunch of groups, but only one will
- # have anything in it.
- currstate = currstate.parseToken(token)
- if trace: trace(token, currstate)
- if initial.package:
- package = string.replace(initial.package, '.', os.sep)
- return (package, initial.listOutputs)
-
-else:
- # Don't actually parse Java files for class names.
- #
- # We might make this a configurable option in the future if
- # Java-file parsing takes too long (although it shouldn't relative
- # to how long the Java compiler itself seems to take...).
-
- def parse_java_file(fn):
- """ "Parse" a .java file.
-
- This actually just splits the file name, so the assumption here
- is that the file name matches the public class name, and that
- the path to the file is the same as the package name.
- """
- return os.path.split(file)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/__init__.py b/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/__init__.py
deleted file mode 100644
index 66afde3..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/__init__.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/MSCommon/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """
-Common functions for Microsoft Visual Studio and Visual C/C++.
-"""
-
-import copy
-import os
-import re
-import subprocess
-
-import SCons.Errors
-import SCons.Platform.win32
-import SCons.Util
-
-from SCons.Tool.MSCommon.vs import detect_msvs, \
- get_default_version, \
- get_vs_by_version, \
- merge_default_version, \
- query_versions
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/common.py b/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/common.py
deleted file mode 100644
index 0cac163..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/common.py
+++ /dev/null
@@ -1,179 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/MSCommon/common.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """
-Common helper functions for working with
-"""
-
-import copy
-import os
-import subprocess
-import re
-
-import SCons.Util
-
-
-logfile = os.environ.get('SCONS_MSCOMMON_DEBUG')
-if logfile:
- try:
- import logging
- except ImportError:
- debug = lambda x: open(logfile, 'a').write(x + '\n')
- else:
- logging.basicConfig(filename=logfile, level=logging.DEBUG)
- debug = logging.debug
-else:
- debug = lambda x: None
-
-
-# TODO(sgk): unused
-def is_win64():
- """Return true if running on windows 64 bits."""
- # Unfortunately, python does not seem to have anything useful: neither
- # sys.platform nor os.name gives something different on windows running on
- # 32 bits or 64 bits. Note that we don't care about whether python itself
- # is 32 or 64 bits here
- value = "Software\Wow6432Node"
- yo = SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE, value)[0]
- if yo is None:
- return 0
- else:
- return 1
-
-def read_reg(value):
- return SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE, value)[0]
-
-
-# Functions for fetching environment variable settings from batch files.
-
-def normalize_env(env, keys):
- """Given a dictionary representing a shell environment, add the variables
- from os.environ needed for the processing of .bat files; the keys are
- controlled by the keys argument.
-
- It also makes sure the environment values are correctly encoded.
-
- Note: the environment is copied"""
- normenv = {}
- if env:
- for k in env.keys():
- normenv[k] = copy.deepcopy(env[k]).encode('mbcs')
-
- for k in keys:
- if os.environ.has_key(k):
- normenv[k] = os.environ[k].encode('mbcs')
-
- return normenv
-
-def get_output(vcbat, args = None, env = None):
- """Parse the output of given bat file, with given args."""
- if args:
- debug("Calling '%s %s'" % (vcbat, args))
- popen = subprocess.Popen('"%s" %s & set' % (vcbat, args),
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- env=env)
- else:
- debug("Calling '%s'" % vcbat)
- popen = subprocess.Popen('"%s" & set' % vcbat,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- env=env)
-
- # Use the .stdout and .stderr attributes directly because the
- # .communicate() method uses the threading module on Windows
- # and won't work under Pythons not built with threading.
- stdout = popen.stdout.read()
- if popen.wait() != 0:
- raise IOError(popen.stderr.read().decode("mbcs"))
-
- output = stdout.decode("mbcs")
- return output
-
-def parse_output(output, keep = ("INCLUDE", "LIB", "LIBPATH", "PATH")):
- # dkeep is a dict associating key: path_list, where key is one item from
- # keep, and pat_list the associated list of paths
-
- # TODO(1.5): replace with the following list comprehension:
- #dkeep = dict([(i, []) for i in keep])
- dkeep = dict(map(lambda i: (i, []), keep))
-
- # rdk will keep the regex to match the .bat file output line starts
- rdk = {}
- for i in keep:
- rdk[i] = re.compile('%s=(.*)' % i, re.I)
-
- def add_env(rmatch, key):
- plist = rmatch.group(1).split(os.pathsep)
- for p in plist:
- # Do not add empty paths (when a var ends with ;)
- if p:
- p = p.encode('mbcs')
- # XXX: For some reason, VC98 .bat file adds "" around the PATH
- # values, and it screws up the environment later, so we strip
- # it.
- p = p.strip('"')
- dkeep[key].append(p)
-
- for line in output.splitlines():
- for k,v in rdk.items():
- m = v.match(line)
- if m:
- add_env(m, k)
-
- return dkeep
-
-# TODO(sgk): unused
-def output_to_dict(output):
- """Given an output string, parse it to find env variables.
-
- Return a dict where keys are variables names, and values their content"""
- envlinem = re.compile(r'^([a-zA-z0-9]+)=([\S\s]*)$')
- parsedenv = {}
- for line in output.splitlines():
- m = envlinem.match(line)
- if m:
- parsedenv[m.group(1)] = m.group(2)
- return parsedenv
-
-# TODO(sgk): unused
-def get_new(l1, l2):
- """Given two list l1 and l2, return the items in l2 which are not in l1.
- Order is maintained."""
-
- # We don't try to be smart: lists are small, and this is not the bottleneck
- # is any case
- new = []
- for i in l2:
- if i not in l1:
- new.append(i)
-
- return new
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/netframework.py b/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/netframework.py
deleted file mode 100644
index 33a0224..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/netframework.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/MSCommon/netframework.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """
-"""
-
-import os
-import re
-import string
-
-from common import read_reg, debug
-
-# Original value recorded by dcournapeau
-_FRAMEWORKDIR_HKEY_ROOT = r'Software\Microsoft\.NETFramework\InstallRoot'
-# On SGK's system
-_FRAMEWORKDIR_HKEY_ROOT = r'Software\Microsoft\Microsoft SDKs\.NETFramework\v2.0\InstallationFolder'
-
-def find_framework_root():
- # XXX: find it from environment (FrameworkDir)
- try:
- froot = read_reg(_FRAMEWORKDIR_HKEY_ROOT)
- debug("Found framework install root in registry: %s" % froot)
- except WindowsError, e:
- debug("Could not read reg key %s" % _FRAMEWORKDIR_HKEY_ROOT)
- return None
-
- if not os.path.exists(froot):
- debug("%s not found on fs" % froot)
- return None
-
- return froot
-
-def query_versions():
- froot = find_framework_root()
- if froot:
- contents = os.listdir(froot)
-
- l = re.compile('v[0-9]+.*')
- versions = filter(lambda e, l=l: l.match(e), contents)
-
- def versrt(a,b):
- # since version numbers aren't really floats...
- aa = a[1:]
- bb = b[1:]
- aal = string.split(aa, '.')
- bbl = string.split(bb, '.')
- # sequence comparison in python is lexicographical
- # which is exactly what we want.
- # Note we sort backwards so the highest version is first.
- return cmp(bbl,aal)
-
- versions.sort(versrt)
- else:
- versions = []
-
- return versions
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/sdk.py b/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/sdk.py
deleted file mode 100644
index e11df4e..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/sdk.py
+++ /dev/null
@@ -1,257 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/MSCommon/sdk.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Module to detect the Platform/Windows SDK
-
-PSDK 2003 R1 is the earliest version detected.
-"""
-
-import os
-
-import SCons.Errors
-from SCons.Tool.MSCommon.common import debug, read_reg
-import SCons.Util
-
-# SDK Checks. This is of course a mess as everything else on MS platforms. Here
-# is what we do to detect the SDK:
-#
-# For Windows SDK >= 6.0: just look into the registry entries:
-# HKLM\Software\Microsoft\Microsoft SDKs\Windows
-# All the keys in there are the available versions.
-#
-# For Platform SDK before 6.0 (2003 server R1 and R2, etc...), there does not
-# seem to be any sane registry key, so the precise location is hardcoded.
-#
-# For versions below 2003R1, it seems the PSDK is included with Visual Studio?
-#
-# Also, per the following:
-# http://benjamin.smedbergs.us/blog/tag/atl/
-# VC++ Professional comes with the SDK, VC++ Express does not.
-
-# Location of the SDK (checked for 6.1 only)
-_CURINSTALLED_SDK_HKEY_ROOT = \
- r"Software\Microsoft\Microsoft SDKs\Windows\CurrentInstallFolder"
-
-
-class SDKDefinition:
- """
- An abstract base class for trying to find installed SDK directories.
- """
- def __init__(self, version, **kw):
- self.version = version
- self.__dict__.update(kw)
-
- def find_sdk_dir(self):
- """Try to find the MS SDK from the registry.
-
- Return None if failed or the directory does not exist.
- """
- if not SCons.Util.can_read_reg:
- debug('find_sdk_dir(): can not read registry')
- return None
-
- hkey = self.HKEY_FMT % self.hkey_data
-
- try:
- sdk_dir = read_reg(hkey)
- except WindowsError, e:
- debug('find_sdk_dir(): no registry key %s' % hkey)
- return None
-
- if not os.path.exists(sdk_dir):
- debug('find_sdk_dir(): %s not on file system' % sdk_dir)
- return None
-
- ftc = os.path.join(sdk_dir, self.sanity_check_file)
- if not os.path.exists(ftc):
- debug("find_sdk_dir(): sanity check %s not found" % ftc)
- return None
-
- return sdk_dir
-
- def get_sdk_dir(self):
- """Return the MSSSDK given the version string."""
- try:
- return self._sdk_dir
- except AttributeError:
- sdk_dir = self.find_sdk_dir()
- self._sdk_dir = sdk_dir
- return sdk_dir
-
-class WindowsSDK(SDKDefinition):
- """
- A subclass for trying to find installed Windows SDK directories.
- """
- HKEY_FMT = r'Software\Microsoft\Microsoft SDKs\Windows\v%s\InstallationFolder'
- def __init__(self, *args, **kw):
- apply(SDKDefinition.__init__, (self,)+args, kw)
- self.hkey_data = self.version
-
-class PlatformSDK(SDKDefinition):
- """
- A subclass for trying to find installed Platform SDK directories.
- """
- HKEY_FMT = r'Software\Microsoft\MicrosoftSDK\InstalledSDKS\%s\Install Dir'
- def __init__(self, *args, **kw):
- apply(SDKDefinition.__init__, (self,)+args, kw)
- self.hkey_data = self.uuid
-
-# The list of support SDKs which we know how to detect.
-#
-# The first SDK found in the list is the one used by default if there
-# are multiple SDKs installed. Barring good reasons to the contrary,
-# this means we should list SDKs with from most recent to oldest.
-#
-# If you update this list, update the documentation in Tool/mssdk.xml.
-SupportedSDKList = [
- WindowsSDK('6.1',
- sanity_check_file=r'include\windows.h'),
-
- WindowsSDK('6.0A',
- sanity_check_file=r'include\windows.h'),
-
- WindowsSDK('6.0',
- sanity_check_file=r'bin\gacutil.exe'),
-
- PlatformSDK('2003R2',
- sanity_check_file=r'SetEnv.Cmd',
- uuid="D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1"),
-
- PlatformSDK('2003R1',
- sanity_check_file=r'SetEnv.Cmd',
- uuid="8F9E5EF3-A9A5-491B-A889-C58EFFECE8B3"),
-]
-
-SupportedSDKMap = {}
-for sdk in SupportedSDKList:
- SupportedSDKMap[sdk.version] = sdk
-
-
-# Finding installed SDKs isn't cheap, because it goes not only to the
-# registry but also to the disk to sanity-check that there is, in fact,
-# an SDK installed there and that the registry entry isn't just stale.
-# Find this information once, when requested, and cache it.
-
-InstalledSDKList = None
-InstalledSDKMap = None
-
-def get_installed_sdks():
- global InstalledSDKList
- global InstalledSDKMap
- if InstalledSDKList is None:
- InstalledSDKList = []
- InstalledSDKMap = {}
- for sdk in SupportedSDKList:
- debug('trying to find SDK %s' % sdk.version)
- if sdk.get_sdk_dir():
- debug('found SDK %s' % sdk.version)
- InstalledSDKList.append(sdk)
- InstalledSDKMap[sdk.version] = sdk
- return InstalledSDKList
-
-
-# We may be asked to update multiple construction environments with
-# SDK information. When doing this, we check on-disk for whether
-# the SDK has 'mfc' and 'atl' subdirectories. Since going to disk
-# is expensive, cache results by directory.
-
-SDKEnvironmentUpdates = {}
-
-def set_sdk_by_directory(env, sdk_dir):
- global SDKEnvironmentUpdates
- try:
- env_tuple_list = SDKEnvironmentUpdates[sdk_dir]
- except KeyError:
- env_tuple_list = []
- SDKEnvironmentUpdates[sdk_dir] = env_tuple_list
-
- include_path = os.path.join(sdk_dir, 'include')
- mfc_path = os.path.join(include_path, 'mfc')
- atl_path = os.path.join(include_path, 'atl')
-
- if os.path.exists(mfc_path):
- env_tuple_list.append(('INCLUDE', mfc_path))
- if os.path.exists(atl_path):
- env_tuple_list.append(('INCLUDE', atl_path))
- env_tuple_list.append(('INCLUDE', include_path))
-
- env_tuple_list.append(('LIB', os.path.join(sdk_dir, 'lib')))
- env_tuple_list.append(('LIBPATH', os.path.join(sdk_dir, 'lib')))
- env_tuple_list.append(('PATH', os.path.join(sdk_dir, 'bin')))
-
- for variable, directory in env_tuple_list:
- env.PrependENVPath(variable, directory)
-
-
-# TODO(sgk): currently unused; remove?
-def get_cur_sdk_dir_from_reg():
- """Try to find the platform sdk directory from the registry.
-
- Return None if failed or the directory does not exist"""
- if not SCons.Util.can_read_reg:
- debug('SCons cannot read registry')
- return None
-
- try:
- val = read_reg(_CURINSTALLED_SDK_HKEY_ROOT)
- debug("Found current sdk dir in registry: %s" % val)
- except WindowsError, e:
- debug("Did not find current sdk in registry")
- return None
-
- if not os.path.exists(val):
- debug("Current sdk dir %s not on fs" % val)
- return None
-
- return val
-
-
-def detect_sdk():
- return (len(get_installed_sdks()) > 0)
-
-def set_sdk_by_version(env, mssdk):
- if not SupportedSDKMap.has_key(mssdk):
- msg = "SDK version %s is not supported" % repr(mssdk)
- raise SCons.Errors.UserError, msg
- get_installed_sdks()
- sdk = InstalledSDKMap.get(mssdk)
- if not sdk:
- msg = "SDK version %s is not installed" % repr(mssdk)
- raise SCons.Errors.UserError, msg
- set_sdk_by_directory(env, sdk.get_sdk_dir())
-
-def set_default_sdk(env, msver):
- """Set up the default Platform/Windows SDK."""
- # For MSVS < 8, use integrated windows sdk by default
- if msver >= 8:
- sdks = get_installed_sdks()
- if len(sdks) > 0:
- set_sdk_by_directory(env, sdks[0].get_sdk_dir())
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/vs.py b/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/vs.py
deleted file mode 100644
index 2203e20..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/MSCommon/vs.py
+++ /dev/null
@@ -1,495 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/MSCommon/vs.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """Module to detect Visual Studio and/or Visual C/C++
-"""
-
-import os
-
-import SCons.Errors
-import SCons.Util
-
-from SCons.Tool.MSCommon.common import debug, \
- read_reg, \
- normalize_env, \
- get_output, \
- parse_output
-
-class VisualStudio:
- """
- An abstract base class for trying to find installed versions of
- Visual Studio.
- """
- def __init__(self, version, **kw):
- self.version = version
- self.__dict__.update(kw)
- self._cache = {}
-
- #
-
- def find_batch_file(self):
- """Try to find the Visual Studio or Visual C/C++ batch file.
-
- Return None if failed or the batch file does not exist.
- """
- pdir = self.get_vc_product_dir()
- if not pdir:
- debug('find_batch_file(): no pdir')
- return None
- batch_file = os.path.normpath(os.path.join(pdir, self.batch_file))
- batch_file = os.path.normpath(batch_file)
- if not os.path.isfile(batch_file):
- debug('find_batch_file(): %s not on file system' % batch_file)
- return None
- return batch_file
-
- def find_executable(self):
- pdir = self.get_vc_product_dir()
- if not pdir:
- debug('find_executable(): no pdir')
- return None
- executable = os.path.join(pdir, self.executable_path)
- executable = os.path.normpath(executable)
- if not os.path.isfile(executable):
- debug('find_executable(): %s not on file system' % executable)
- return None
- return executable
-
- def find_vc_product_dir(self):
- if not SCons.Util.can_read_reg:
- debug('find_vc_product_dir(): can not read registry')
- return None
- key = self.hkey_root + '\\' + self.vc_product_dir_key
- try:
- comps = read_reg(key)
- except WindowsError, e:
- debug('find_vc_product_dir(): no registry key %s' % key)
- else:
- if self.batch_file_dir_reg_relpath:
- comps = os.path.join(comps, self.batch_file_dir_reg_relpath)
- comps = os.path.normpath(comps)
- if os.path.exists(comps):
- return comps
- else:
- debug('find_vc_product_dir(): %s not on file system' % comps)
-
- d = os.environ.get(self.common_tools_var)
- if not d:
- msg = 'find_vc_product_dir(): no %s variable'
- debug(msg % self.common_tools_var)
- return None
- if not os.path.isdir(d):
- debug('find_vc_product_dir(): %s not on file system' % d)
- return None
- if self.batch_file_dir_env_relpath:
- d = os.path.join(d, self.batch_file_dir_env_relpath)
- d = os.path.normpath(d)
- return d
-
- #
-
- def get_batch_file(self):
- try:
- return self._cache['batch_file']
- except KeyError:
- batch_file = self.find_batch_file()
- self._cache['batch_file'] = batch_file
- return batch_file
-
- def get_executable(self):
- try:
- return self._cache['executable']
- except KeyError:
- executable = self.find_executable()
- self._cache['executable'] = executable
- return executable
-
- def get_supported_arch(self):
- try:
- return self._cache['supported_arch']
- except KeyError:
- # RDEVE: for the time being use hardcoded lists
- # supported_arch = self.find_supported_arch()
- self._cache['supported_arch'] = self.supported_arch
- return self.supported_arch
-
- def get_vc_product_dir(self):
- try:
- return self._cache['vc_product_dir']
- except KeyError:
- vc_product_dir = self.find_vc_product_dir()
- self._cache['vc_product_dir'] = vc_product_dir
- return vc_product_dir
-
- def reset(self):
- self._cache = {}
-
-# The list of supported Visual Studio versions we know how to detect.
-#
-# How to look for .bat file ?
-# - VS 2008 Express (x86):
-# * from registry key productdir, gives the full path to vsvarsall.bat. In
-# HKEY_LOCAL_MACHINE):
-# Software\Microsoft\VCEpress\9.0\Setup\VC\productdir
-# * from environmnent variable VS90COMNTOOLS: the path is then ..\..\VC
-# relatively to the path given by the variable.
-#
-# - VS 2008 Express (WoW6432: 32 bits on windows x64):
-# Software\Wow6432Node\Microsoft\VCEpress\9.0\Setup\VC\productdir
-#
-# - VS 2005 Express (x86):
-# * from registry key productdir, gives the full path to vsvarsall.bat. In
-# HKEY_LOCAL_MACHINE):
-# Software\Microsoft\VCEpress\8.0\Setup\VC\productdir
-# * from environmnent variable VS80COMNTOOLS: the path is then ..\..\VC
-# relatively to the path given by the variable.
-#
-# - VS 2005 Express (WoW6432: 32 bits on windows x64): does not seem to have a
-# productdir ?
-#
-# - VS 2003 .Net (pro edition ? x86):
-# * from registry key productdir. The path is then ..\Common7\Tools\
-# relatively to the key. The key is in HKEY_LOCAL_MACHINE):
-# Software\Microsoft\VisualStudio\7.1\Setup\VC\productdir
-# * from environmnent variable VS71COMNTOOLS: the path is the full path to
-# vsvars32.bat
-#
-# - VS 98 (VS 6):
-# * from registry key productdir. The path is then Bin
-# relatively to the key. The key is in HKEY_LOCAL_MACHINE):
-# Software\Microsoft\VisualStudio\6.0\Setup\VC98\productdir
-#
-# The first version found in the list is the one used by default if
-# there are multiple versions installed. Barring good reasons to
-# the contrary, this means we should list versions from most recent
-# to oldest. Pro versions get listed before Express versions on the
-# assumption that, by default, you'd rather use the version you paid
-# good money for in preference to whatever Microsoft makes available
-# for free.
-#
-# If you update this list, update the documentation in Tool/msvs.xml.
-
-SupportedVSList = [
- # Visual Studio 2010
- # TODO: find the settings, perhaps from someone with a CTP copy?
- #VisualStudio('TBD',
- # hkey_root=r'TBD',
- # common_tools_var='TBD',
- # batch_file='TBD',
- # vc_product_dir_key=r'TBD',
- # batch_file_dir_reg_relpath=None,
- # batch_file_dir_env_relpath=r'TBD',
- # executable_path=r'TBD',
- # default_dirname='TBD',
- #),
-
- # Visual Studio 2008
- # The batch file we look for is in the VC directory,
- # so the devenv.com executable is up in ..\..\Common7\IDE.
- VisualStudio('9.0',
- hkey_root=r'Software\Microsoft\VisualStudio\9.0',
- common_tools_var='VS90COMNTOOLS',
- batch_file='vcvarsall.bat',
- vc_product_dir_key=r'Setup\VC\ProductDir',
- batch_file_dir_reg_relpath=None,
- batch_file_dir_env_relpath=r'..\..\VC',
- executable_path=r'..\Common7\IDE\devenv.com',
- default_dirname='Microsoft Visual Studio 9',
- supported_arch=['x86', 'amd64'],
- ),
-
- # Visual C++ 2008 Express Edition
- # The batch file we look for is in the VC directory,
- # so the VCExpress.exe executable is up in ..\..\Common7\IDE.
- VisualStudio('9.0Exp',
- hkey_root=r'Software\Microsoft\VisualStudio\9.0',
- common_tools_var='VS90COMNTOOLS',
- batch_file='vcvarsall.bat',
- vc_product_dir_key=r'Setup\VC\ProductDir',
- batch_file_dir_reg_relpath=None,
- batch_file_dir_env_relpath=r'..\..\VC',
- executable_path=r'..\Common7\IDE\VCExpress.exe',
- default_dirname='Microsoft Visual Studio 9',
- supported_arch=['x86'],
- ),
-
- # Visual Studio 2005
- # The batch file we look for is in the VC directory,
- # so the devenv.com executable is up in ..\..\Common7\IDE.
- VisualStudio('8.0',
- hkey_root=r'Software\Microsoft\VisualStudio\8.0',
- common_tools_var='VS80COMNTOOLS',
- batch_file='vcvarsall.bat',
- vc_product_dir_key=r'Setup\VC\ProductDir',
- batch_file_dir_reg_relpath=None,
- batch_file_dir_env_relpath=r'..\..\VC',
- executable_path=r'..\Common7\IDE\devenv.com',
- default_dirname='Microsoft Visual Studio 8',
- supported_arch=['x86', 'amd64'],
- ),
-
- # Visual C++ 2005 Express Edition
- # The batch file we look for is in the VC directory,
- # so the VCExpress.exe executable is up in ..\..\Common7\IDE.
- VisualStudio('8.0Exp',
- hkey_root=r'Software\Microsoft\VCExpress\8.0',
- common_tools_var='VS80COMNTOOLS',
- batch_file='vcvarsall.bat',
- vc_product_dir_key=r'Setup\VC\ProductDir',
- batch_file_dir_reg_relpath=None,
- batch_file_dir_env_relpath=r'..\..\VC',
- # The batch file is in the VC directory, so
- # so the devenv.com executable is next door in ..\IDE.
- executable_path=r'..\Common7\IDE\VCExpress.exe',
- default_dirname='Microsoft Visual Studio 8',
- supported_arch=['x86'],
- ),
-
- # Visual Studio .NET 2003
- # The batch file we look for is in the Common7\Tools directory,
- # so the devenv.com executable is next door in ..\IDE.
- VisualStudio('7.1',
- hkey_root=r'Software\Microsoft\VisualStudio\7.1',
- common_tools_var='VS71COMNTOOLS',
- batch_file='vsvars32.bat',
- vc_product_dir_key=r'Setup\VC\ProductDir',
- batch_file_dir_reg_relpath=r'..\Common7\Tools',
- batch_file_dir_env_relpath=None,
- executable_path=r'..\IDE\devenv.com',
- default_dirname='Microsoft Visual Studio .NET',
- supported_arch=['x86'],
- ),
-
- # Visual Studio .NET
- # The batch file we look for is in the Common7\Tools directory,
- # so the devenv.com executable is next door in ..\IDE.
- VisualStudio('7.0',
- hkey_root=r'Software\Microsoft\VisualStudio\7.0',
- common_tools_var='VS70COMNTOOLS',
- batch_file='vsvars32.bat',
- vc_product_dir_key=r'Setup\VC\ProductDir',
- batch_file_dir_reg_relpath=r'..\Common7\Tools',
- batch_file_dir_env_relpath=None,
- executable_path=r'..\IDE\devenv.com',
- default_dirname='Microsoft Visual Studio .NET',
- supported_arch=['x86'],
- ),
-
- # Visual Studio 6.0
- VisualStudio('6.0',
- hkey_root=r'Software\Microsoft\VisualStudio\6.0',
- common_tools_var='VS60COMNTOOLS',
- batch_file='vcvars32.bat',
- vc_product_dir_key='Setup\Microsoft Visual C++\ProductDir',
- batch_file_dir_reg_relpath='Bin',
- batch_file_dir_env_relpath=None,
- executable_path=r'Common\MSDev98\Bin\MSDEV.COM',
- default_dirname='Microsoft Visual Studio',
- supported_arch=['x86'],
- ),
-]
-
-SupportedVSMap = {}
-for vs in SupportedVSList:
- SupportedVSMap[vs.version] = vs
-
-
-# Finding installed versions of Visual Studio isn't cheap, because it
-# goes not only to the registry but also to the disk to sanity-check
-# that there is, in fact, a Visual Studio directory there and that the
-# registry entry isn't just stale. Find this information once, when
-# requested, and cache it.
-
-InstalledVSList = None
-InstalledVSMap = None
-
-def get_installed_visual_studios():
- global InstalledVSList
- global InstalledVSMap
- if InstalledVSList is None:
- InstalledVSList = []
- InstalledVSMap = {}
- for vs in SupportedVSList:
- debug('trying to find VS %s' % vs.version)
- if vs.get_executable():
- debug('found VS %s' % vs.version)
- InstalledVSList.append(vs)
- InstalledVSMap[vs.version] = vs
- return InstalledVSList
-
-def reset_installed_visual_studios():
- global InstalledVSList
- global InstalledVSMap
- InstalledVSList = None
- InstalledVSMap = None
- for vs in SupportedVSList:
- vs.reset()
-
-
-# We may be asked to update multiple construction environments with
-# SDK information. When doing this, we check on-disk for whether
-# the SDK has 'mfc' and 'atl' subdirectories. Since going to disk
-# is expensive, cache results by directory.
-
-#SDKEnvironmentUpdates = {}
-#
-#def set_sdk_by_directory(env, sdk_dir):
-# global SDKEnvironmentUpdates
-# try:
-# env_tuple_list = SDKEnvironmentUpdates[sdk_dir]
-# except KeyError:
-# env_tuple_list = []
-# SDKEnvironmentUpdates[sdk_dir] = env_tuple_list
-#
-# include_path = os.path.join(sdk_dir, 'include')
-# mfc_path = os.path.join(include_path, 'mfc')
-# atl_path = os.path.join(include_path, 'atl')
-#
-# if os.path.exists(mfc_path):
-# env_tuple_list.append(('INCLUDE', mfc_path))
-# if os.path.exists(atl_path):
-# env_tuple_list.append(('INCLUDE', atl_path))
-# env_tuple_list.append(('INCLUDE', include_path))
-#
-# env_tuple_list.append(('LIB', os.path.join(sdk_dir, 'lib')))
-# env_tuple_list.append(('LIBPATH', os.path.join(sdk_dir, 'lib')))
-# env_tuple_list.append(('PATH', os.path.join(sdk_dir, 'bin')))
-#
-# for variable, directory in env_tuple_list:
-# env.PrependENVPath(variable, directory)
-
-def detect_msvs():
- return (len(get_installed_visual_studios()) > 0)
-
-def get_vs_by_version(msvs):
- if not SupportedVSMap.has_key(msvs):
- msg = "Visual Studio version %s is not supported" % repr(msvs)
- raise SCons.Errors.UserError, msg
- get_installed_visual_studios()
- vs = InstalledVSMap.get(msvs)
- # Some check like this would let us provide a useful error message
- # if they try to set a Visual Studio version that's not installed.
- # However, we also want to be able to run tests (like the unit
- # tests) on systems that don't, or won't ever, have it installed.
- # It might be worth resurrecting this, with some configurable
- # setting that the tests can use to bypass the check.
- #if not vs:
- # msg = "Visual Studio version %s is not installed" % repr(msvs)
- # raise SCons.Errors.UserError, msg
- return vs
-
-def get_default_version(env):
- """Returns the default version string to use for MSVS.
-
- If no version was requested by the user through the MSVS environment
- variable, query all the available the visual studios through
- query_versions, and take the highest one.
-
- Return
- ------
- version: str
- the default version.
- """
- if not env.has_key('MSVS') or not SCons.Util.is_Dict(env['MSVS']):
- # TODO(1.5):
- #versions = [vs.version for vs in get_installed_visual_studios()]
- versions = map(lambda vs: vs.version, get_installed_visual_studios())
- env['MSVS'] = {'VERSIONS' : versions}
- else:
- versions = env['MSVS'].get('VERSIONS', [])
-
- if not env.has_key('MSVS_VERSION'):
- if versions:
- env['MSVS_VERSION'] = versions[0] #use highest version by default
- else:
- env['MSVS_VERSION'] = SupportedVSList[0].version
-
- env['MSVS']['VERSION'] = env['MSVS_VERSION']
-
- return env['MSVS_VERSION']
-
-def get_default_arch(env):
- """Return the default arch to use for MSVS
-
- if no version was requested by the user through the MSVS_ARCH environment
- variable, select x86
-
- Return
- ------
- arch: str
- """
- arch = env.get('MSVS_ARCH', 'x86')
-
- msvs = InstalledVSMap.get(env['MSVS_VERSION'])
-
- if not msvs:
- arch = 'x86'
- elif not arch in msvs.get_supported_arch():
- fmt = "Visual Studio version %s does not support architecture %s"
- raise SCons.Errors.UserError, fmt % (env['MSVS_VERSION'], arch)
-
- return arch
-
-def merge_default_version(env):
- version = get_default_version(env)
- arch = get_default_arch(env)
-
- msvs = get_vs_by_version(version)
- if msvs is None:
- return
- batfilename = msvs.get_batch_file()
-
- # XXX: I think this is broken. This will silently set a bogus tool instead
- # of failing, but there is no other way with the current scons tool
- # framework
- if batfilename is not None:
-
- vars = ('LIB', 'LIBPATH', 'PATH', 'INCLUDE')
-
- msvs_list = get_installed_visual_studios()
- # TODO(1.5):
- #vscommonvarnames = [ vs.common_tools_var for vs in msvs_list ]
- vscommonvarnames = map(lambda vs: vs.common_tools_var, msvs_list)
- nenv = normalize_env(env['ENV'], vscommonvarnames + ['COMSPEC'])
- output = get_output(batfilename, arch, env=nenv)
- vars = parse_output(output, vars)
-
- for k, v in vars.items():
- env.PrependENVPath(k, v, delete_existing=1)
-
-def query_versions():
- """Query the system to get available versions of VS. A version is
- considered when a batfile is found."""
- msvs_list = get_installed_visual_studios()
- # TODO(1.5)
- #versions = [ msvs.version for msvs in msvs_list ]
- versions = map(lambda msvs: msvs.version, msvs_list)
- return versions
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/Perforce.py b/3rdParty/SCons/scons-local/SCons/Tool/Perforce.py
deleted file mode 100644
index 2dbdbbb..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/Perforce.py
+++ /dev/null
@@ -1,104 +0,0 @@
-"""SCons.Tool.Perforce.py
-
-Tool-specific initialization for Perforce Source Code Management system.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/Perforce.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-
-import SCons.Action
-import SCons.Builder
-import SCons.Node.FS
-import SCons.Util
-
-# This function should maybe be moved to SCons.Util?
-from SCons.Tool.PharLapCommon import addPathIfNotExists
-
-
-
-# Variables that we want to import from the base OS environment.
-_import_env = [ 'P4PORT', 'P4CLIENT', 'P4USER', 'USER', 'USERNAME', 'P4PASSWD',
- 'P4CHARSET', 'P4LANGUAGE', 'SystemRoot' ]
-
-PerforceAction = SCons.Action.Action('$P4COM', '$P4COMSTR')
-
-def generate(env):
- """Add a Builder factory function and construction variables for
- Perforce to an Environment."""
-
- def PerforceFactory(env=env):
- """ """
- return SCons.Builder.Builder(action = PerforceAction, env = env)
-
- #setattr(env, 'Perforce', PerforceFactory)
- env.Perforce = PerforceFactory
-
- env['P4'] = 'p4'
- env['P4FLAGS'] = SCons.Util.CLVar('')
- env['P4COM'] = '$P4 $P4FLAGS sync $TARGET'
- try:
- environ = env['ENV']
- except KeyError:
- environ = {}
- env['ENV'] = environ
-
- # Perforce seems to use the PWD environment variable rather than
- # calling getcwd() for itself, which is odd. If no PWD variable
- # is present, p4 WILL call getcwd, but this seems to cause problems
- # with good ol' Windows's tilde-mangling for long file names.
- environ['PWD'] = env.Dir('#').get_abspath()
-
- for var in _import_env:
- v = os.environ.get(var)
- if v:
- environ[var] = v
-
- if SCons.Util.can_read_reg:
- # If we can read the registry, add the path to Perforce to our environment.
- try:
- k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
- 'Software\\Perforce\\environment')
- val, tok = SCons.Util.RegQueryValueEx(k, 'P4INSTROOT')
- addPathIfNotExists(environ, 'PATH', val)
- except SCons.Util.RegError:
- # Can't detect where Perforce is, hope the user has it set in the
- # PATH.
- pass
-
-def exists(env):
- return env.Detect('p4')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/PharLapCommon.py b/3rdParty/SCons/scons-local/SCons/Tool/PharLapCommon.py
deleted file mode 100644
index 1d7779e..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/PharLapCommon.py
+++ /dev/null
@@ -1,138 +0,0 @@
-"""SCons.Tool.PharLapCommon
-
-This module contains common code used by all Tools for the
-Phar Lap ETS tool chain. Right now, this is linkloc and
-386asm.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/PharLapCommon.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-import SCons.Errors
-import SCons.Util
-import re
-import string
-
-def getPharLapPath():
- """Reads the registry to find the installed path of the Phar Lap ETS
- development kit.
-
- Raises UserError if no installed version of Phar Lap can
- be found."""
-
- if not SCons.Util.can_read_reg:
- raise SCons.Errors.InternalError, "No Windows registry module was found"
- try:
- k=SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE,
- 'SOFTWARE\\Pharlap\\ETS')
- val, type = SCons.Util.RegQueryValueEx(k, 'BaseDir')
-
- # The following is a hack...there is (not surprisingly)
- # an odd issue in the Phar Lap plug in that inserts
- # a bunch of junk data after the phar lap path in the
- # registry. We must trim it.
- idx=val.find('\0')
- if idx >= 0:
- val = val[:idx]
-
- return os.path.normpath(val)
- except SCons.Util.RegError:
- raise SCons.Errors.UserError, "Cannot find Phar Lap ETS path in the registry. Is it installed properly?"
-
-REGEX_ETS_VER = re.compile(r'#define\s+ETS_VER\s+([0-9]+)')
-
-def getPharLapVersion():
- """Returns the version of the installed ETS Tool Suite as a
- decimal number. This version comes from the ETS_VER #define in
- the embkern.h header. For example, '#define ETS_VER 1010' (which
- is what Phar Lap 10.1 defines) would cause this method to return
- 1010. Phar Lap 9.1 does not have such a #define, but this method
- will return 910 as a default.
-
- Raises UserError if no installed version of Phar Lap can
- be found."""
-
- include_path = os.path.join(getPharLapPath(), os.path.normpath("include/embkern.h"))
- if not os.path.exists(include_path):
- raise SCons.Errors.UserError, "Cannot find embkern.h in ETS include directory.\nIs Phar Lap ETS installed properly?"
- mo = REGEX_ETS_VER.search(open(include_path, 'r').read())
- if mo:
- return int(mo.group(1))
- # Default return for Phar Lap 9.1
- return 910
-
-def addPathIfNotExists(env_dict, key, path, sep=os.pathsep):
- """This function will take 'key' out of the dictionary
- 'env_dict', then add the path 'path' to that key if it is not
- already there. This treats the value of env_dict[key] as if it
- has a similar format to the PATH variable...a list of paths
- separated by tokens. The 'path' will get added to the list if it
- is not already there."""
- try:
- is_list = 1
- paths = env_dict[key]
- if not SCons.Util.is_List(env_dict[key]):
- paths = string.split(paths, sep)
- is_list = 0
- if not os.path.normcase(path) in map(os.path.normcase, paths):
- paths = [ path ] + paths
- if is_list:
- env_dict[key] = paths
- else:
- env_dict[key] = string.join(paths, sep)
- except KeyError:
- env_dict[key] = path
-
-def addPharLapPaths(env):
- """This function adds the path to the Phar Lap binaries, includes,
- and libraries, if they are not already there."""
- ph_path = getPharLapPath()
-
- try:
- env_dict = env['ENV']
- except KeyError:
- env_dict = {}
- env['ENV'] = env_dict
- addPathIfNotExists(env_dict, 'PATH',
- os.path.join(ph_path, 'bin'))
- addPathIfNotExists(env_dict, 'INCLUDE',
- os.path.join(ph_path, 'include'))
- addPathIfNotExists(env_dict, 'LIB',
- os.path.join(ph_path, 'lib'))
- addPathIfNotExists(env_dict, 'LIB',
- os.path.join(ph_path, os.path.normpath('lib/vclib')))
-
- env['PHARLAP_PATH'] = getPharLapPath()
- env['PHARLAP_VERSION'] = str(getPharLapVersion())
-
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/RCS.py b/3rdParty/SCons/scons-local/SCons/Tool/RCS.py
deleted file mode 100644
index 96ee313..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/RCS.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""SCons.Tool.RCS.py
-
-Tool-specific initialization for RCS.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/RCS.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Builder
-import SCons.Util
-
-def generate(env):
- """Add a Builder factory function and construction variables for
- RCS to an Environment."""
-
- def RCSFactory(env=env):
- """ """
- act = SCons.Action.Action('$RCS_COCOM', '$RCS_COCOMSTR')
- return SCons.Builder.Builder(action = act, env = env)
-
- #setattr(env, 'RCS', RCSFactory)
- env.RCS = RCSFactory
-
- env['RCS'] = 'rcs'
- env['RCS_CO'] = 'co'
- env['RCS_COFLAGS'] = SCons.Util.CLVar('')
- env['RCS_COCOM'] = '$RCS_CO $RCS_COFLAGS $TARGET'
-
-def exists(env):
- return env.Detect('rcs')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/SCCS.py b/3rdParty/SCons/scons-local/SCons/Tool/SCCS.py
deleted file mode 100644
index 7baa34c..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/SCCS.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""SCons.Tool.SCCS.py
-
-Tool-specific initialization for SCCS.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/SCCS.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Builder
-import SCons.Util
-
-def generate(env):
- """Add a Builder factory function and construction variables for
- SCCS to an Environment."""
-
- def SCCSFactory(env=env):
- """ """
- act = SCons.Action.Action('$SCCSCOM', '$SCCSCOMSTR')
- return SCons.Builder.Builder(action = act, env = env)
-
- #setattr(env, 'SCCS', SCCSFactory)
- env.SCCS = SCCSFactory
-
- env['SCCS'] = 'sccs'
- env['SCCSFLAGS'] = SCons.Util.CLVar('')
- env['SCCSGETFLAGS'] = SCons.Util.CLVar('')
- env['SCCSCOM'] = '$SCCS $SCCSFLAGS get $SCCSGETFLAGS $TARGET'
-
-def exists(env):
- return env.Detect('sccs')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/Subversion.py b/3rdParty/SCons/scons-local/SCons/Tool/Subversion.py
deleted file mode 100644
index 063bf8d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/Subversion.py
+++ /dev/null
@@ -1,71 +0,0 @@
-"""SCons.Tool.Subversion.py
-
-Tool-specific initialization for Subversion.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/Subversion.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-
-import SCons.Action
-import SCons.Builder
-import SCons.Util
-
-def generate(env):
- """Add a Builder factory function and construction variables for
- Subversion to an Environment."""
-
- def SubversionFactory(repos, module='', env=env):
- """ """
- # fail if repos is not an absolute path name?
- if module != '':
- module = os.path.join(module, '')
- act = SCons.Action.Action('$SVNCOM', '$SVNCOMSTR')
- return SCons.Builder.Builder(action = act,
- env = env,
- SVNREPOSITORY = repos,
- SVNMODULE = module)
-
- #setattr(env, 'Subversion', SubversionFactory)
- env.Subversion = SubversionFactory
-
- env['SVN'] = 'svn'
- env['SVNFLAGS'] = SCons.Util.CLVar('')
- env['SVNCOM'] = '$SVN $SVNFLAGS cat $SVNREPOSITORY/$SVNMODULE$TARGET > $TARGET'
-
-def exists(env):
- return env.Detect('svn')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/__init__.py b/3rdParty/SCons/scons-local/SCons/Tool/__init__.py
deleted file mode 100644
index 5b31300..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/__init__.py
+++ /dev/null
@@ -1,673 +0,0 @@
-"""SCons.Tool
-
-SCons tool selection.
-
-This looks for modules that define a callable object that can modify
-a construction environment as appropriate for a given tool (or tool
-chain).
-
-Note that because this subsystem just *selects* a callable that can
-modify a construction environment, it's possible for people to define
-their own "tool specification" in an arbitrary callable function. No
-one needs to use or tie in to this subsystem in order to roll their own
-tool definition.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-import imp
-import sys
-
-import SCons.Builder
-import SCons.Errors
-import SCons.Node.FS
-import SCons.Scanner
-import SCons.Scanner.C
-import SCons.Scanner.D
-import SCons.Scanner.LaTeX
-import SCons.Scanner.Prog
-
-DefaultToolpath=[]
-
-CScanner = SCons.Scanner.C.CScanner()
-DScanner = SCons.Scanner.D.DScanner()
-LaTeXScanner = SCons.Scanner.LaTeX.LaTeXScanner()
-PDFLaTeXScanner = SCons.Scanner.LaTeX.PDFLaTeXScanner()
-ProgramScanner = SCons.Scanner.Prog.ProgramScanner()
-SourceFileScanner = SCons.Scanner.Base({}, name='SourceFileScanner')
-
-CSuffixes = [".c", ".C", ".cxx", ".cpp", ".c++", ".cc",
- ".h", ".H", ".hxx", ".hpp", ".hh",
- ".F", ".fpp", ".FPP",
- ".m", ".mm",
- ".S", ".spp", ".SPP"]
-
-DSuffixes = ['.d']
-
-IDLSuffixes = [".idl", ".IDL"]
-
-LaTeXSuffixes = [".tex", ".ltx", ".latex"]
-
-for suffix in CSuffixes:
- SourceFileScanner.add_scanner(suffix, CScanner)
-
-for suffix in DSuffixes:
- SourceFileScanner.add_scanner(suffix, DScanner)
-
-# FIXME: what should be done here? Two scanners scan the same extensions,
-# but look for different files, e.g., "picture.eps" vs. "picture.pdf".
-# The builders for DVI and PDF explicitly reference their scanners
-# I think that means this is not needed???
-for suffix in LaTeXSuffixes:
- SourceFileScanner.add_scanner(suffix, LaTeXScanner)
- SourceFileScanner.add_scanner(suffix, PDFLaTeXScanner)
-
-class Tool:
- def __init__(self, name, toolpath=[], **kw):
- self.name = name
- self.toolpath = toolpath + DefaultToolpath
- # remember these so we can merge them into the call
- self.init_kw = kw
-
- module = self._tool_module()
- self.generate = module.generate
- self.exists = module.exists
- if hasattr(module, 'options'):
- self.options = module.options
-
- def _tool_module(self):
- # TODO: Interchange zipimport with normal initilization for better error reporting
- oldpythonpath = sys.path
- sys.path = self.toolpath + sys.path
-
- try:
- try:
- file, path, desc = imp.find_module(self.name, self.toolpath)
- try:
- return imp.load_module(self.name, file, path, desc)
- finally:
- if file:
- file.close()
- except ImportError, e:
- if str(e)!="No module named %s"%self.name:
- raise SCons.Errors.EnvironmentError, e
- try:
- import zipimport
- except ImportError:
- pass
- else:
- for aPath in self.toolpath:
- try:
- importer = zipimport.zipimporter(aPath)
- return importer.load_module(self.name)
- except ImportError, e:
- pass
- finally:
- sys.path = oldpythonpath
-
- full_name = 'SCons.Tool.' + self.name
- try:
- return sys.modules[full_name]
- except KeyError:
- try:
- smpath = sys.modules['SCons.Tool'].__path__
- try:
- file, path, desc = imp.find_module(self.name, smpath)
- module = imp.load_module(full_name, file, path, desc)
- setattr(SCons.Tool, self.name, module)
- if file:
- file.close()
- return module
- except ImportError, e:
- if str(e)!="No module named %s"%self.name:
- raise SCons.Errors.EnvironmentError, e
- try:
- import zipimport
- importer = zipimport.zipimporter( sys.modules['SCons.Tool'].__path__[0] )
- module = importer.load_module(full_name)
- setattr(SCons.Tool, self.name, module)
- return module
- except ImportError, e:
- m = "No tool named '%s': %s" % (self.name, e)
- raise SCons.Errors.EnvironmentError, m
- except ImportError, e:
- m = "No tool named '%s': %s" % (self.name, e)
- raise SCons.Errors.EnvironmentError, m
-
- def __call__(self, env, *args, **kw):
- if self.init_kw is not None:
- # Merge call kws into init kws;
- # but don't bash self.init_kw.
- if kw is not None:
- call_kw = kw
- kw = self.init_kw.copy()
- kw.update(call_kw)
- else:
- kw = self.init_kw
- env.Append(TOOLS = [ self.name ])
- if hasattr(self, 'options'):
- import SCons.Variables
- if not env.has_key('options'):
- from SCons.Script import ARGUMENTS
- env['options']=SCons.Variables.Variables(args=ARGUMENTS)
- opts=env['options']
-
- self.options(opts)
- opts.Update(env)
-
- apply(self.generate, ( env, ) + args, kw)
-
- def __str__(self):
- return self.name
-
-##########################################################################
-# Create common executable program / library / object builders
-
-def createProgBuilder(env):
- """This is a utility function that creates the Program
- Builder in an Environment if it is not there already.
-
- If it is already there, we return the existing one.
- """
-
- try:
- program = env['BUILDERS']['Program']
- except KeyError:
- import SCons.Defaults
- program = SCons.Builder.Builder(action = SCons.Defaults.LinkAction,
- emitter = '$PROGEMITTER',
- prefix = '$PROGPREFIX',
- suffix = '$PROGSUFFIX',
- src_suffix = '$OBJSUFFIX',
- src_builder = 'Object',
- target_scanner = ProgramScanner)
- env['BUILDERS']['Program'] = program
-
- return program
-
-def createStaticLibBuilder(env):
- """This is a utility function that creates the StaticLibrary
- Builder in an Environment if it is not there already.
-
- If it is already there, we return the existing one.
- """
-
- try:
- static_lib = env['BUILDERS']['StaticLibrary']
- except KeyError:
- action_list = [ SCons.Action.Action("$ARCOM", "$ARCOMSTR") ]
- if env.Detect('ranlib'):
- ranlib_action = SCons.Action.Action("$RANLIBCOM", "$RANLIBCOMSTR")
- action_list.append(ranlib_action)
-
- static_lib = SCons.Builder.Builder(action = action_list,
- emitter = '$LIBEMITTER',
- prefix = '$LIBPREFIX',
- suffix = '$LIBSUFFIX',
- src_suffix = '$OBJSUFFIX',
- src_builder = 'StaticObject')
- env['BUILDERS']['StaticLibrary'] = static_lib
- env['BUILDERS']['Library'] = static_lib
-
- return static_lib
-
-def createSharedLibBuilder(env):
- """This is a utility function that creates the SharedLibrary
- Builder in an Environment if it is not there already.
-
- If it is already there, we return the existing one.
- """
-
- try:
- shared_lib = env['BUILDERS']['SharedLibrary']
- except KeyError:
- import SCons.Defaults
- action_list = [ SCons.Defaults.SharedCheck,
- SCons.Defaults.ShLinkAction ]
- shared_lib = SCons.Builder.Builder(action = action_list,
- emitter = "$SHLIBEMITTER",
- prefix = '$SHLIBPREFIX',
- suffix = '$SHLIBSUFFIX',
- target_scanner = ProgramScanner,
- src_suffix = '$SHOBJSUFFIX',
- src_builder = 'SharedObject')
- env['BUILDERS']['SharedLibrary'] = shared_lib
-
- return shared_lib
-
-def createLoadableModuleBuilder(env):
- """This is a utility function that creates the LoadableModule
- Builder in an Environment if it is not there already.
-
- If it is already there, we return the existing one.
- """
-
- try:
- ld_module = env['BUILDERS']['LoadableModule']
- except KeyError:
- import SCons.Defaults
- action_list = [ SCons.Defaults.SharedCheck,
- SCons.Defaults.LdModuleLinkAction ]
- ld_module = SCons.Builder.Builder(action = action_list,
- emitter = "$LDMODULEEMITTER",
- prefix = '$LDMODULEPREFIX',
- suffix = '$LDMODULESUFFIX',
- target_scanner = ProgramScanner,
- src_suffix = '$SHOBJSUFFIX',
- src_builder = 'SharedObject')
- env['BUILDERS']['LoadableModule'] = ld_module
-
- return ld_module
-
-def createObjBuilders(env):
- """This is a utility function that creates the StaticObject
- and SharedObject Builders in an Environment if they
- are not there already.
-
- If they are there already, we return the existing ones.
-
- This is a separate function because soooo many Tools
- use this functionality.
-
- The return is a 2-tuple of (StaticObject, SharedObject)
- """
-
-
- try:
- static_obj = env['BUILDERS']['StaticObject']
- except KeyError:
- static_obj = SCons.Builder.Builder(action = {},
- emitter = {},
- prefix = '$OBJPREFIX',
- suffix = '$OBJSUFFIX',
- src_builder = ['CFile', 'CXXFile'],
- source_scanner = SourceFileScanner,
- single_source = 1)
- env['BUILDERS']['StaticObject'] = static_obj
- env['BUILDERS']['Object'] = static_obj
-
- try:
- shared_obj = env['BUILDERS']['SharedObject']
- except KeyError:
- shared_obj = SCons.Builder.Builder(action = {},
- emitter = {},
- prefix = '$SHOBJPREFIX',
- suffix = '$SHOBJSUFFIX',
- src_builder = ['CFile', 'CXXFile'],
- source_scanner = SourceFileScanner,
- single_source = 1)
- env['BUILDERS']['SharedObject'] = shared_obj
-
- return (static_obj, shared_obj)
-
-def createCFileBuilders(env):
- """This is a utility function that creates the CFile/CXXFile
- Builders in an Environment if they
- are not there already.
-
- If they are there already, we return the existing ones.
-
- This is a separate function because soooo many Tools
- use this functionality.
-
- The return is a 2-tuple of (CFile, CXXFile)
- """
-
- try:
- c_file = env['BUILDERS']['CFile']
- except KeyError:
- c_file = SCons.Builder.Builder(action = {},
- emitter = {},
- suffix = {None:'$CFILESUFFIX'})
- env['BUILDERS']['CFile'] = c_file
-
- env.SetDefault(CFILESUFFIX = '.c')
-
- try:
- cxx_file = env['BUILDERS']['CXXFile']
- except KeyError:
- cxx_file = SCons.Builder.Builder(action = {},
- emitter = {},
- suffix = {None:'$CXXFILESUFFIX'})
- env['BUILDERS']['CXXFile'] = cxx_file
- env.SetDefault(CXXFILESUFFIX = '.cc')
-
- return (c_file, cxx_file)
-
-##########################################################################
-# Create common Java builders
-
-def CreateJarBuilder(env):
- try:
- java_jar = env['BUILDERS']['Jar']
- except KeyError:
- fs = SCons.Node.FS.get_default_fs()
- jar_com = SCons.Action.Action('$JARCOM', '$JARCOMSTR')
- java_jar = SCons.Builder.Builder(action = jar_com,
- suffix = '$JARSUFFIX',
- src_suffix = '$JAVACLASSSUFIX',
- src_builder = 'JavaClassFile',
- source_factory = fs.Entry)
- env['BUILDERS']['Jar'] = java_jar
- return java_jar
-
-def CreateJavaHBuilder(env):
- try:
- java_javah = env['BUILDERS']['JavaH']
- except KeyError:
- fs = SCons.Node.FS.get_default_fs()
- java_javah_com = SCons.Action.Action('$JAVAHCOM', '$JAVAHCOMSTR')
- java_javah = SCons.Builder.Builder(action = java_javah_com,
- src_suffix = '$JAVACLASSSUFFIX',
- target_factory = fs.Entry,
- source_factory = fs.File,
- src_builder = 'JavaClassFile')
- env['BUILDERS']['JavaH'] = java_javah
- return java_javah
-
-def CreateJavaClassFileBuilder(env):
- try:
- java_class_file = env['BUILDERS']['JavaClassFile']
- except KeyError:
- fs = SCons.Node.FS.get_default_fs()
- javac_com = SCons.Action.Action('$JAVACCOM', '$JAVACCOMSTR')
- java_class_file = SCons.Builder.Builder(action = javac_com,
- emitter = {},
- #suffix = '$JAVACLASSSUFFIX',
- src_suffix = '$JAVASUFFIX',
- src_builder = ['JavaFile'],
- target_factory = fs.Entry,
- source_factory = fs.File)
- env['BUILDERS']['JavaClassFile'] = java_class_file
- return java_class_file
-
-def CreateJavaClassDirBuilder(env):
- try:
- java_class_dir = env['BUILDERS']['JavaClassDir']
- except KeyError:
- fs = SCons.Node.FS.get_default_fs()
- javac_com = SCons.Action.Action('$JAVACCOM', '$JAVACCOMSTR')
- java_class_dir = SCons.Builder.Builder(action = javac_com,
- emitter = {},
- target_factory = fs.Dir,
- source_factory = fs.Dir)
- env['BUILDERS']['JavaClassDir'] = java_class_dir
- return java_class_dir
-
-def CreateJavaFileBuilder(env):
- try:
- java_file = env['BUILDERS']['JavaFile']
- except KeyError:
- java_file = SCons.Builder.Builder(action = {},
- emitter = {},
- suffix = {None:'$JAVASUFFIX'})
- env['BUILDERS']['JavaFile'] = java_file
- env['JAVASUFFIX'] = '.java'
- return java_file
-
-class ToolInitializerMethod:
- """
- This is added to a construction environment in place of a
- method(s) normally called for a Builder (env.Object, env.StaticObject,
- etc.). When called, it has its associated ToolInitializer
- object search the specified list of tools and apply the first
- one that exists to the construction environment. It then calls
- whatever builder was (presumably) added to the construction
- environment in place of this particular instance.
- """
- def __init__(self, name, initializer):
- """
- Note: we store the tool name as __name__ so it can be used by
- the class that attaches this to a construction environment.
- """
- self.__name__ = name
- self.initializer = initializer
-
- def get_builder(self, env):
- """
- Returns the appropriate real Builder for this method name
- after having the associated ToolInitializer object apply
- the appropriate Tool module.
- """
- builder = getattr(env, self.__name__)
-
- self.initializer.apply_tools(env)
-
- builder = getattr(env, self.__name__)
- if builder is self:
- # There was no Builder added, which means no valid Tool
- # for this name was found (or possibly there's a mismatch
- # between the name we were called by and the Builder name
- # added by the Tool module).
- return None
-
- self.initializer.remove_methods(env)
-
- return builder
-
- def __call__(self, env, *args, **kw):
- """
- """
- builder = self.get_builder(env)
- if builder is None:
- return [], []
- return apply(builder, args, kw)
-
-class ToolInitializer:
- """
- A class for delayed initialization of Tools modules.
-
- Instances of this class associate a list of Tool modules with
- a list of Builder method names that will be added by those Tool
- modules. As part of instantiating this object for a particular
- construction environment, we also add the appropriate
- ToolInitializerMethod objects for the various Builder methods
- that we want to use to delay Tool searches until necessary.
- """
- def __init__(self, env, tools, names):
- if not SCons.Util.is_List(tools):
- tools = [tools]
- if not SCons.Util.is_List(names):
- names = [names]
- self.env = env
- self.tools = tools
- self.names = names
- self.methods = {}
- for name in names:
- method = ToolInitializerMethod(name, self)
- self.methods[name] = method
- env.AddMethod(method)
-
- def remove_methods(self, env):
- """
- Removes the methods that were added by the tool initialization
- so we no longer copy and re-bind them when the construction
- environment gets cloned.
- """
- for method in self.methods.values():
- env.RemoveMethod(method)
-
- def apply_tools(self, env):
- """
- Searches the list of associated Tool modules for one that
- exists, and applies that to the construction environment.
- """
- for t in self.tools:
- tool = SCons.Tool.Tool(t)
- if tool.exists(env):
- env.Tool(tool)
- return
-
- # If we fall through here, there was no tool module found.
- # This is where we can put an informative error message
- # about the inability to find the tool. We'll start doing
- # this as we cut over more pre-defined Builder+Tools to use
- # the ToolInitializer class.
-
-def Initializers(env):
- ToolInitializer(env, ['install'], ['_InternalInstall', '_InternalInstallAs'])
- def Install(self, *args, **kw):
- return apply(self._InternalInstall, args, kw)
- def InstallAs(self, *args, **kw):
- return apply(self._InternalInstallAs, args, kw)
- env.AddMethod(Install)
- env.AddMethod(InstallAs)
-
-def FindTool(tools, env):
- for tool in tools:
- t = Tool(tool)
- if t.exists(env):
- return tool
- return None
-
-def FindAllTools(tools, env):
- def ToolExists(tool, env=env):
- return Tool(tool).exists(env)
- return filter (ToolExists, tools)
-
-def tool_list(platform, env):
-
- # XXX this logic about what tool to prefer on which platform
- # should be moved into either the platform files or
- # the tool files themselves.
- # The search orders here are described in the man page. If you
- # change these search orders, update the man page as well.
- if str(platform) == 'win32':
- "prefer Microsoft tools on Windows"
- linkers = ['mslink', 'gnulink', 'ilink', 'linkloc', 'ilink32' ]
- c_compilers = ['msvc', 'mingw', 'gcc', 'intelc', 'icl', 'icc', 'cc', 'bcc32' ]
- cxx_compilers = ['msvc', 'intelc', 'icc', 'g++', 'c++', 'bcc32' ]
- assemblers = ['masm', 'nasm', 'gas', '386asm' ]
- fortran_compilers = ['gfortran', 'g77', 'ifl', 'cvf', 'f95', 'f90', 'fortran']
- ars = ['mslib', 'ar', 'tlib']
- elif str(platform) == 'os2':
- "prefer IBM tools on OS/2"
- linkers = ['ilink', 'gnulink', 'mslink']
- c_compilers = ['icc', 'gcc', 'msvc', 'cc']
- cxx_compilers = ['icc', 'g++', 'msvc', 'c++']
- assemblers = ['nasm', 'masm', 'gas']
- fortran_compilers = ['ifl', 'g77']
- ars = ['ar', 'mslib']
- elif str(platform) == 'irix':
- "prefer MIPSPro on IRIX"
- linkers = ['sgilink', 'gnulink']
- c_compilers = ['sgicc', 'gcc', 'cc']
- cxx_compilers = ['sgic++', 'g++', 'c++']
- assemblers = ['as', 'gas']
- fortran_compilers = ['f95', 'f90', 'f77', 'g77', 'fortran']
- ars = ['sgiar']
- elif str(platform) == 'sunos':
- "prefer Forte tools on SunOS"
- linkers = ['sunlink', 'gnulink']
- c_compilers = ['suncc', 'gcc', 'cc']
- cxx_compilers = ['sunc++', 'g++', 'c++']
- assemblers = ['as', 'gas']
- fortran_compilers = ['sunf95', 'sunf90', 'sunf77', 'f95', 'f90', 'f77',
- 'gfortran', 'g77', 'fortran']
- ars = ['sunar']
- elif str(platform) == 'hpux':
- "prefer aCC tools on HP-UX"
- linkers = ['hplink', 'gnulink']
- c_compilers = ['hpcc', 'gcc', 'cc']
- cxx_compilers = ['hpc++', 'g++', 'c++']
- assemblers = ['as', 'gas']
- fortran_compilers = ['f95', 'f90', 'f77', 'g77', 'fortran']
- ars = ['ar']
- elif str(platform) == 'aix':
- "prefer AIX Visual Age tools on AIX"
- linkers = ['aixlink', 'gnulink']
- c_compilers = ['aixcc', 'gcc', 'cc']
- cxx_compilers = ['aixc++', 'g++', 'c++']
- assemblers = ['as', 'gas']
- fortran_compilers = ['f95', 'f90', 'aixf77', 'g77', 'fortran']
- ars = ['ar']
- elif str(platform) == 'darwin':
- "prefer GNU tools on Mac OS X, except for some linkers and IBM tools"
- linkers = ['applelink', 'gnulink']
- c_compilers = ['gcc', 'cc']
- cxx_compilers = ['g++', 'c++']
- assemblers = ['as']
- fortran_compilers = ['gfortran', 'f95', 'f90', 'g77']
- ars = ['ar']
- else:
- "prefer GNU tools on all other platforms"
- linkers = ['gnulink', 'mslink', 'ilink']
- c_compilers = ['gcc', 'msvc', 'intelc', 'icc', 'cc']
- cxx_compilers = ['g++', 'msvc', 'intelc', 'icc', 'c++']
- assemblers = ['gas', 'nasm', 'masm']
- fortran_compilers = ['gfortran', 'g77', 'ifort', 'ifl', 'f95', 'f90', 'f77']
- ars = ['ar', 'mslib']
-
- c_compiler = FindTool(c_compilers, env) or c_compilers[0]
-
- # XXX this logic about what tool provides what should somehow be
- # moved into the tool files themselves.
- if c_compiler and c_compiler == 'mingw':
- # MinGW contains a linker, C compiler, C++ compiler,
- # Fortran compiler, archiver and assembler:
- cxx_compiler = None
- linker = None
- assembler = None
- fortran_compiler = None
- ar = None
- else:
- # Don't use g++ if the C compiler has built-in C++ support:
- if c_compiler in ('msvc', 'intelc', 'icc'):
- cxx_compiler = None
- else:
- cxx_compiler = FindTool(cxx_compilers, env) or cxx_compilers[0]
- linker = FindTool(linkers, env) or linkers[0]
- assembler = FindTool(assemblers, env) or assemblers[0]
- fortran_compiler = FindTool(fortran_compilers, env) or fortran_compilers[0]
- ar = FindTool(ars, env) or ars[0]
-
- other_tools = FindAllTools(['BitKeeper', 'CVS',
- 'dmd',
- 'filesystem',
- 'dvipdf', 'dvips', 'gs',
- 'jar', 'javac', 'javah',
- 'latex', 'lex',
- 'm4', 'midl', 'msvs',
- 'pdflatex', 'pdftex', 'Perforce',
- 'RCS', 'rmic', 'rpcgen',
- 'SCCS',
- # 'Subversion',
- 'swig',
- 'tar', 'tex',
- 'yacc', 'zip', 'rpm', 'wix'],
- env)
-
- tools = ([linker, c_compiler, cxx_compiler,
- fortran_compiler, assembler, ar]
- + other_tools)
-
- return filter(lambda x: x, tools)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/aixc++.py b/3rdParty/SCons/scons-local/SCons/Tool/aixc++.py
deleted file mode 100644
index e22f736..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/aixc++.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""SCons.Tool.aixc++
-
-Tool-specific initialization for IBM xlC / Visual Age C++ compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/aixc++.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-
-import SCons.Platform.aix
-
-cplusplus = __import__('c++', globals(), locals(), [])
-
-packages = ['vacpp.cmp.core', 'vacpp.cmp.batch', 'vacpp.cmp.C', 'ibmcxx.cmp']
-
-def get_xlc(env):
- xlc = env.get('CXX', 'xlC')
- xlc_r = env.get('SHCXX', 'xlC_r')
- return SCons.Platform.aix.get_xlc(env, xlc, xlc_r, packages)
-
-def smart_cxxflags(source, target, env, for_signature):
- build_dir = env.GetBuildPath()
- if build_dir:
- return '-qtempinc=' + os.path.join(build_dir, 'tempinc')
- return ''
-
-def generate(env):
- """Add Builders and construction variables for xlC / Visual Age
- suite to an Environment."""
- path, _cxx, _shcxx, version = get_xlc(env)
- if path:
- _cxx = os.path.join(path, _cxx)
- _shcxx = os.path.join(path, _shcxx)
-
- cplusplus.generate(env)
-
- env['CXX'] = _cxx
- env['SHCXX'] = _shcxx
- env['CXXVERSION'] = version
- env['SHOBJSUFFIX'] = '.pic.o'
-
-def exists(env):
- path, _cxx, _shcxx, version = get_xlc(env)
- if path and _cxx:
- xlc = os.path.join(path, _cxx)
- if os.path.exists(xlc):
- return xlc
- return None
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/aixcc.py b/3rdParty/SCons/scons-local/SCons/Tool/aixcc.py
deleted file mode 100644
index dccb926..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/aixcc.py
+++ /dev/null
@@ -1,74 +0,0 @@
-"""SCons.Tool.aixcc
-
-Tool-specific initialization for IBM xlc / Visual Age C compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/aixcc.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-
-import SCons.Platform.aix
-
-import cc
-
-packages = ['vac.C', 'ibmcxx.cmp']
-
-def get_xlc(env):
- xlc = env.get('CC', 'xlc')
- xlc_r = env.get('SHCC', 'xlc_r')
- return SCons.Platform.aix.get_xlc(env, xlc, xlc_r, packages)
-
-def generate(env):
- """Add Builders and construction variables for xlc / Visual Age
- suite to an Environment."""
- path, _cc, _shcc, version = get_xlc(env)
- if path:
- _cc = os.path.join(path, _cc)
- _shcc = os.path.join(path, _shcc)
-
- cc.generate(env)
-
- env['CC'] = _cc
- env['SHCC'] = _shcc
- env['CCVERSION'] = version
-
-def exists(env):
- path, _cc, _shcc, version = get_xlc(env)
- if path and _cc:
- xlc = os.path.join(path, _cc)
- if os.path.exists(xlc):
- return xlc
- return None
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/aixf77.py b/3rdParty/SCons/scons-local/SCons/Tool/aixf77.py
deleted file mode 100644
index 8bb022a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/aixf77.py
+++ /dev/null
@@ -1,80 +0,0 @@
-"""engine.SCons.Tool.aixf77
-
-Tool-specific initialization for IBM Visual Age f77 Fortran compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/aixf77.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-
-#import SCons.Platform.aix
-
-import f77
-
-# It would be good to look for the AIX F77 package the same way we're now
-# looking for the C and C++ packages. This should be as easy as supplying
-# the correct package names in the following list and uncommenting the
-# SCons.Platform.aix_get_xlc() call the in the function below.
-packages = []
-
-def get_xlf77(env):
- xlf77 = env.get('F77', 'xlf77')
- xlf77_r = env.get('SHF77', 'xlf77_r')
- #return SCons.Platform.aix.get_xlc(env, xlf77, xlf77_r, packages)
- return (None, xlf77, xlf77_r, None)
-
-def generate(env):
- """
- Add Builders and construction variables for the Visual Age FORTRAN
- compiler to an Environment.
- """
- path, _f77, _shf77, version = get_xlf77(env)
- if path:
- _f77 = os.path.join(path, _f77)
- _shf77 = os.path.join(path, _shf77)
-
- f77.generate(env)
-
- env['F77'] = _f77
- env['SHF77'] = _shf77
-
-def exists(env):
- path, _f77, _shf77, version = get_xlf77(env)
- if path and _f77:
- xlf77 = os.path.join(path, _f77)
- if os.path.exists(xlf77):
- return xlf77
- return None
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/aixlink.py b/3rdParty/SCons/scons-local/SCons/Tool/aixlink.py
deleted file mode 100644
index 7f96c4a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/aixlink.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""SCons.Tool.aixlink
-
-Tool-specific initialization for the IBM Visual Age linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/aixlink.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-
-import SCons.Util
-
-import aixcc
-import link
-
-cplusplus = __import__('c++', globals(), locals(), [])
-
-def smart_linkflags(source, target, env, for_signature):
- if cplusplus.iscplusplus(source):
- build_dir = env.subst('$BUILDDIR', target=target, source=source)
- if build_dir:
- return '-qtempinc=' + os.path.join(build_dir, 'tempinc')
- return ''
-
-def generate(env):
- """
- Add Builders and construction variables for Visual Age linker to
- an Environment.
- """
- link.generate(env)
-
- env['SMARTLINKFLAGS'] = smart_linkflags
- env['LINKFLAGS'] = SCons.Util.CLVar('$SMARTLINKFLAGS')
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -qmkshrobj -qsuppress=1501-218')
- env['SHLIBSUFFIX'] = '.a'
-
-def exists(env):
- path, _cc, _shcc, version = aixcc.get_xlc(env)
- if path and _cc:
- xlc = os.path.join(path, _cc)
- if os.path.exists(xlc):
- return xlc
- return None
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/applelink.py b/3rdParty/SCons/scons-local/SCons/Tool/applelink.py
deleted file mode 100644
index 826b119..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/applelink.py
+++ /dev/null
@@ -1,71 +0,0 @@
-"""SCons.Tool.applelink
-
-Tool-specific initialization for the Apple gnu-like linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/applelink.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-# Even though the Mac is based on the GNU toolchain, it doesn't understand
-# the -rpath option, so we use the "link" tool instead of "gnulink".
-import link
-
-def generate(env):
- """Add Builders and construction variables for applelink to an
- Environment."""
- link.generate(env)
-
- env['FRAMEWORKPATHPREFIX'] = '-F'
- env['_FRAMEWORKPATH'] = '${_concat(FRAMEWORKPATHPREFIX, FRAMEWORKPATH, "", __env__)}'
- env['_FRAMEWORKS'] = '${_concat("-framework ", FRAMEWORKS, "", __env__)}'
- env['LINKCOM'] = env['LINKCOM'] + ' $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS'
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -dynamiclib')
- env['SHLINKCOM'] = env['SHLINKCOM'] + ' $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS'
-
- # override the default for loadable modules, which are different
- # on OS X than dynamic shared libs. echoing what XCode does for
- # pre/suffixes:
- env['LDMODULEPREFIX'] = ''
- env['LDMODULESUFFIX'] = ''
- env['LDMODULEFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -bundle')
- env['LDMODULECOM'] = '$LDMODULE -o ${TARGET} $LDMODULEFLAGS $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS'
-
-
-
-def exists(env):
- return env['PLATFORM'] == 'darwin'
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/ar.py b/3rdParty/SCons/scons-local/SCons/Tool/ar.py
deleted file mode 100644
index fbff55c..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/ar.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""SCons.Tool.ar
-
-Tool-specific initialization for ar (library archive).
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/ar.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-
-def generate(env):
- """Add Builders and construction variables for ar to an Environment."""
- SCons.Tool.createStaticLibBuilder(env)
-
- env['AR'] = 'ar'
- env['ARFLAGS'] = SCons.Util.CLVar('rc')
- env['ARCOM'] = '$AR $ARFLAGS $TARGET $SOURCES'
- env['LIBPREFIX'] = 'lib'
- env['LIBSUFFIX'] = '.a'
-
- if env.Detect('ranlib'):
- env['RANLIB'] = 'ranlib'
- env['RANLIBFLAGS'] = SCons.Util.CLVar('')
- env['RANLIBCOM'] = '$RANLIB $RANLIBFLAGS $TARGET'
-
-def exists(env):
- return env.Detect('ar')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/as.py b/3rdParty/SCons/scons-local/SCons/Tool/as.py
deleted file mode 100644
index 635df6d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/as.py
+++ /dev/null
@@ -1,78 +0,0 @@
-"""SCons.Tool.as
-
-Tool-specific initialization for as, the generic Posix assembler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/as.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-assemblers = ['as']
-
-ASSuffixes = ['.s', '.asm', '.ASM']
-ASPPSuffixes = ['.spp', '.SPP', '.sx']
-if SCons.Util.case_sensitive_suffixes('.s', '.S'):
- ASPPSuffixes.extend(['.S'])
-else:
- ASSuffixes.extend(['.S'])
-
-def generate(env):
- """Add Builders and construction variables for as to an Environment."""
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- for suffix in ASSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.ASAction)
- shared_obj.add_action(suffix, SCons.Defaults.ASAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
- shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
-
- for suffix in ASPPSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.ASPPAction)
- shared_obj.add_action(suffix, SCons.Defaults.ASPPAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
- shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
-
- env['AS'] = env.Detect(assemblers) or 'as'
- env['ASFLAGS'] = SCons.Util.CLVar('')
- env['ASCOM'] = '$AS $ASFLAGS -o $TARGET $SOURCES'
- env['ASPPFLAGS'] = '$ASFLAGS'
- env['ASPPCOM'] = '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES'
-
-def exists(env):
- return env.Detect(assemblers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/bcc32.py b/3rdParty/SCons/scons-local/SCons/Tool/bcc32.py
deleted file mode 100644
index e92b654..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/bcc32.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""SCons.Tool.bcc32
-
-XXX
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/bcc32.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-import string
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-def findIt(program, env):
- # First search in the SCons path and then the OS path:
- borwin = env.WhereIs(program) or SCons.Util.WhereIs(program)
- if borwin:
- dir = os.path.dirname(borwin)
- env.PrependENVPath('PATH', dir)
- return borwin
-
-def generate(env):
- findIt('bcc32', env)
- """Add Builders and construction variables for bcc to an
- Environment."""
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
- for suffix in ['.c', '.cpp']:
- static_obj.add_action(suffix, SCons.Defaults.CAction)
- shared_obj.add_action(suffix, SCons.Defaults.ShCAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
- shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
-
- env['CC'] = 'bcc32'
- env['CCFLAGS'] = SCons.Util.CLVar('')
- env['CFLAGS'] = SCons.Util.CLVar('')
- env['CCCOM'] = '$CC -q $CFLAGS $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o$TARGET $SOURCES'
- env['SHCC'] = '$CC'
- env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS')
- env['SHCFLAGS'] = SCons.Util.CLVar('$CFLAGS')
- env['SHCCCOM'] = '$SHCC -WD $SHCFLAGS $SHCCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o$TARGET $SOURCES'
- env['CPPDEFPREFIX'] = '-D'
- env['CPPDEFSUFFIX'] = ''
- env['INCPREFIX'] = '-I'
- env['INCSUFFIX'] = ''
- env['SHOBJSUFFIX'] = '.dll'
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 0
- env['CFILESUFFIX'] = '.cpp'
-
-def exists(env):
- return findIt('bcc32', env)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/c++.py b/3rdParty/SCons/scons-local/SCons/Tool/c++.py
deleted file mode 100644
index fabcbd7..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/c++.py
+++ /dev/null
@@ -1,99 +0,0 @@
-"""SCons.Tool.c++
-
-Tool-specific initialization for generic Posix C++ compilers.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/c++.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-
-import SCons.Tool
-import SCons.Defaults
-import SCons.Util
-
-compilers = ['CC', 'c++']
-
-CXXSuffixes = ['.cpp', '.cc', '.cxx', '.c++', '.C++', '.mm']
-if SCons.Util.case_sensitive_suffixes('.c', '.C'):
- CXXSuffixes.append('.C')
-
-def iscplusplus(source):
- if not source:
- # Source might be None for unusual cases like SConf.
- return 0
- for s in source:
- if s.sources:
- ext = os.path.splitext(str(s.sources[0]))[1]
- if ext in CXXSuffixes:
- return 1
- return 0
-
-def generate(env):
- """
- Add Builders and construction variables for Visual Age C++ compilers
- to an Environment.
- """
- import SCons.Tool
- import SCons.Tool.cc
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- for suffix in CXXSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.CXXAction)
- shared_obj.add_action(suffix, SCons.Defaults.ShCXXAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
- shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
-
- SCons.Tool.cc.add_common_cc_variables(env)
-
- env['CXX'] = 'c++'
- env['CXXFLAGS'] = SCons.Util.CLVar('')
- env['CXXCOM'] = '$CXX -o $TARGET -c $CXXFLAGS $CCFLAGS $_CCCOMCOM $SOURCES'
- env['SHCXX'] = '$CXX'
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS')
- env['SHCXXCOM'] = '$SHCXX -o $TARGET -c $SHCXXFLAGS $SHCCFLAGS $_CCCOMCOM $SOURCES'
-
- env['CPPDEFPREFIX'] = '-D'
- env['CPPDEFSUFFIX'] = ''
- env['INCPREFIX'] = '-I'
- env['INCSUFFIX'] = ''
- env['SHOBJSUFFIX'] = '.os'
- env['OBJSUFFIX'] = '.o'
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 0
-
- env['CXXFILESUFFIX'] = '.cc'
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/cc.py b/3rdParty/SCons/scons-local/SCons/Tool/cc.py
deleted file mode 100644
index 82d4565..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/cc.py
+++ /dev/null
@@ -1,114 +0,0 @@
-"""SCons.Tool.cc
-
-Tool-specific initialization for generic Posix C compilers.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/cc.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Tool
-import SCons.Defaults
-import SCons.Util
-
-CSuffixes = ['.c', '.m']
-if not SCons.Util.case_sensitive_suffixes('.c', '.C'):
- CSuffixes.append('.C')
-
-def add_common_cc_variables(env):
- """
- Add underlying common "C compiler" variables that
- are used by multiple tools (specifically, c++).
- """
- if not env.has_key('_CCCOMCOM'):
- env['_CCCOMCOM'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS'
- # It's a hack to test for darwin here, but the alternative
- # of creating an applecc.py to contain this seems overkill.
- # Maybe someday the Apple platform will require more setup and
- # this logic will be moved.
- env['FRAMEWORKS'] = SCons.Util.CLVar('')
- env['FRAMEWORKPATH'] = SCons.Util.CLVar('')
- if env['PLATFORM'] == 'darwin':
- env['_CCCOMCOM'] = env['_CCCOMCOM'] + ' $_FRAMEWORKPATH'
-
- if not env.has_key('CCFLAGS'):
- env['CCFLAGS'] = SCons.Util.CLVar('')
-
- if not env.has_key('SHCCFLAGS'):
- env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS')
-
-def generate(env):
- """
- Add Builders and construction variables for C compilers to an Environment.
- """
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- for suffix in CSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.CAction)
- shared_obj.add_action(suffix, SCons.Defaults.ShCAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
- shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
-#<<<<<<< .working
-#
-# env['_CCCOMCOM'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS'
-# # It's a hack to test for darwin here, but the alternative of creating
-# # an applecc.py to contain this seems overkill. Maybe someday the Apple
-# # platform will require more setup and this logic will be moved.
-# env['FRAMEWORKS'] = SCons.Util.CLVar('')
-# env['FRAMEWORKPATH'] = SCons.Util.CLVar('')
-# if env['PLATFORM'] == 'darwin':
-# env['_CCCOMCOM'] = env['_CCCOMCOM'] + ' $_FRAMEWORKPATH'
-#=======
-#>>>>>>> .merge-right.r1907
-
- add_common_cc_variables(env)
-
- env['CC'] = 'cc'
- env['CFLAGS'] = SCons.Util.CLVar('')
- env['CCCOM'] = '$CC -o $TARGET -c $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES'
- env['SHCC'] = '$CC'
- env['SHCFLAGS'] = SCons.Util.CLVar('$CFLAGS')
- env['SHCCCOM'] = '$SHCC -o $TARGET -c $SHCFLAGS $SHCCFLAGS $_CCCOMCOM $SOURCES'
-
- env['CPPDEFPREFIX'] = '-D'
- env['CPPDEFSUFFIX'] = ''
- env['INCPREFIX'] = '-I'
- env['INCSUFFIX'] = ''
- env['SHOBJSUFFIX'] = '.os'
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 0
-
- env['CFILESUFFIX'] = '.c'
-
-def exists(env):
- return env.Detect('cc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/cvf.py b/3rdParty/SCons/scons-local/SCons/Tool/cvf.py
deleted file mode 100644
index e743654..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/cvf.py
+++ /dev/null
@@ -1,58 +0,0 @@
-"""engine.SCons.Tool.cvf
-
-Tool-specific initialization for the Compaq Visual Fortran compiler.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/cvf.py 4043 2009/02/23 09:06:45 scons"
-
-import fortran
-
-compilers = ['f90']
-
-def generate(env):
- """Add Builders and construction variables for compaq visual fortran to an Environment."""
-
- fortran.generate(env)
-
- env['FORTRAN'] = 'f90'
- env['FORTRANCOM'] = '$FORTRAN $FORTRANFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS /compile_only ${SOURCES.windows} /object:${TARGET.windows}'
- env['FORTRANPPCOM'] = '$FORTRAN $FORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS /compile_only ${SOURCES.windows} /object:${TARGET.windows}'
- env['SHFORTRANCOM'] = '$SHFORTRAN $SHFORTRANFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS /compile_only ${SOURCES.windows} /object:${TARGET.windows}'
- env['SHFORTRANPPCOM'] = '$SHFORTRAN $SHFORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS /compile_only ${SOURCES.windows} /object:${TARGET.windows}'
- env['OBJSUFFIX'] = '.obj'
- env['FORTRANMODDIR'] = '${TARGET.dir}'
- env['FORTRANMODDIRPREFIX'] = '/module:'
- env['FORTRANMODDIRSUFFIX'] = ''
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/default.py b/3rdParty/SCons/scons-local/SCons/Tool/default.py
deleted file mode 100644
index a7df8aa..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/default.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""SCons.Tool.default
-
-Initialization with a default tool list.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/default.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Tool
-
-def generate(env):
- """Add default tools."""
- for t in SCons.Tool.tool_list(env['PLATFORM'], env):
- SCons.Tool.Tool(t)(env)
-
-def exists(env):
- return 1
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/dmd.py b/3rdParty/SCons/scons-local/SCons/Tool/dmd.py
deleted file mode 100644
index 1e67822..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/dmd.py
+++ /dev/null
@@ -1,224 +0,0 @@
-"""SCons.Tool.dmd
-
-Tool-specific initialization for the Digital Mars D compiler.
-(http://digitalmars.com/d)
-
-Coded by Andy Friesen (andy@ikagames.com)
-15 November 2003
-
-There are a number of problems with this script at this point in time.
-The one that irritates me the most is the Windows linker setup. The D
-linker doesn't have a way to add lib paths on the commandline, as far
-as I can see. You have to specify paths relative to the SConscript or
-use absolute paths. To hack around it, add '#/blah'. This will link
-blah.lib from the directory where SConstruct resides.
-
-Compiler variables:
- DC - The name of the D compiler to use. Defaults to dmd or gdmd,
- whichever is found.
- DPATH - List of paths to search for import modules.
- DVERSIONS - List of version tags to enable when compiling.
- DDEBUG - List of debug tags to enable when compiling.
-
-Linker related variables:
- LIBS - List of library files to link in.
- DLINK - Name of the linker to use. Defaults to dmd or gdmd.
- DLINKFLAGS - List of linker flags.
-
-Lib tool variables:
- DLIB - Name of the lib tool to use. Defaults to lib.
- DLIBFLAGS - List of flags to pass to the lib tool.
- LIBS - Same as for the linker. (libraries to pull into the .lib)
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/dmd.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import string
-
-import SCons.Action
-import SCons.Builder
-import SCons.Defaults
-import SCons.Scanner.D
-import SCons.Tool
-
-# Adapted from c++.py
-def isD(source):
- if not source:
- return 0
-
- for s in source:
- if s.sources:
- ext = os.path.splitext(str(s.sources[0]))[1]
- if ext == '.d':
- return 1
- return 0
-
-smart_link = {}
-
-smart_lib = {}
-
-def generate(env):
- global smart_link
- global smart_lib
-
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- DAction = SCons.Action.Action('$DCOM', '$DCOMSTR')
-
- static_obj.add_action('.d', DAction)
- shared_obj.add_action('.d', DAction)
- static_obj.add_emitter('.d', SCons.Defaults.StaticObjectEmitter)
- shared_obj.add_emitter('.d', SCons.Defaults.SharedObjectEmitter)
-
- dc = env.Detect(['dmd', 'gdmd'])
- env['DC'] = dc
- env['DCOM'] = '$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS -c -of$TARGET $SOURCES'
- env['_DINCFLAGS'] = '$( ${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
- env['_DVERFLAGS'] = '$( ${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)} $)'
- env['_DDEBUGFLAGS'] = '$( ${_concat(DDEBUGPREFIX, DDEBUG, DDEBUGSUFFIX, __env__)} $)'
- env['_DFLAGS'] = '$( ${_concat(DFLAGPREFIX, DFLAGS, DFLAGSUFFIX, __env__)} $)'
-
- env['DPATH'] = ['#/']
- env['DFLAGS'] = []
- env['DVERSIONS'] = []
- env['DDEBUG'] = []
-
- if dc:
- # Add the path to the standard library.
- # This is merely for the convenience of the dependency scanner.
- dmd_path = env.WhereIs(dc)
- if dmd_path:
- x = string.rindex(dmd_path, dc)
- phobosDir = dmd_path[:x] + '/../src/phobos'
- if os.path.isdir(phobosDir):
- env.Append(DPATH = [phobosDir])
-
- env['DINCPREFIX'] = '-I'
- env['DINCSUFFIX'] = ''
- env['DVERPREFIX'] = '-version='
- env['DVERSUFFIX'] = ''
- env['DDEBUGPREFIX'] = '-debug='
- env['DDEBUGSUFFIX'] = ''
- env['DFLAGPREFIX'] = '-'
- env['DFLAGSUFFIX'] = ''
- env['DFILESUFFIX'] = '.d'
-
- # Need to use the Digital Mars linker/lib on windows.
- # *nix can just use GNU link.
- if env['PLATFORM'] == 'win32':
- env['DLINK'] = '$DC'
- env['DLINKCOM'] = '$DLINK -of$TARGET $SOURCES $DFLAGS $DLINKFLAGS $_DLINKLIBFLAGS'
- env['DLIB'] = 'lib'
- env['DLIBCOM'] = '$DLIB $_DLIBFLAGS -c $TARGET $SOURCES $_DLINKLIBFLAGS'
-
- env['_DLINKLIBFLAGS'] = '$( ${_concat(DLIBLINKPREFIX, LIBS, DLIBLINKSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
- env['_DLIBFLAGS'] = '$( ${_concat(DLIBFLAGPREFIX, DLIBFLAGS, DLIBFLAGSUFFIX, __env__)} $)'
- env['DLINKFLAGS'] = []
- env['DLIBLINKPREFIX'] = ''
- env['DLIBLINKSUFFIX'] = '.lib'
- env['DLIBFLAGPREFIX'] = '-'
- env['DLIBFLAGSUFFIX'] = ''
- env['DLINKFLAGPREFIX'] = '-'
- env['DLINKFLAGSUFFIX'] = ''
-
- SCons.Tool.createStaticLibBuilder(env)
-
- # Basically, we hijack the link and ar builders with our own.
- # these builders check for the presence of D source, and swap out
- # the system's defaults for the Digital Mars tools. If there's no D
- # source, then we silently return the previous settings.
- linkcom = env.get('LINKCOM')
- try:
- env['SMART_LINKCOM'] = smart_link[linkcom]
- except KeyError:
- def _smartLink(source, target, env, for_signature,
- defaultLinker=linkcom):
- if isD(source):
- # XXX I'm not sure how to add a $DLINKCOMSTR variable
- # so that it works with this _smartLink() logic,
- # and I don't have a D compiler/linker to try it out,
- # so we'll leave it alone for now.
- return '$DLINKCOM'
- else:
- return defaultLinker
- env['SMART_LINKCOM'] = smart_link[linkcom] = _smartLink
-
- arcom = env.get('ARCOM')
- try:
- env['SMART_ARCOM'] = smart_lib[arcom]
- except KeyError:
- def _smartLib(source, target, env, for_signature,
- defaultLib=arcom):
- if isD(source):
- # XXX I'm not sure how to add a $DLIBCOMSTR variable
- # so that it works with this _smartLib() logic, and
- # I don't have a D compiler/archiver to try it out,
- # so we'll leave it alone for now.
- return '$DLIBCOM'
- else:
- return defaultLib
- env['SMART_ARCOM'] = smart_lib[arcom] = _smartLib
-
- # It is worth noting that the final space in these strings is
- # absolutely pivotal. SCons sees these as actions and not generators
- # if it is not there. (very bad)
- env['ARCOM'] = '$SMART_ARCOM '
- env['LINKCOM'] = '$SMART_LINKCOM '
- else: # assuming linux
- linkcom = env.get('LINKCOM')
- try:
- env['SMART_LINKCOM'] = smart_link[linkcom]
- except KeyError:
- def _smartLink(source, target, env, for_signature,
- defaultLinker=linkcom, dc=dc):
- if isD(source):
- try:
- libs = env['LIBS']
- except KeyError:
- libs = []
- if 'phobos' not in libs:
- if dc is 'dmd':
- env.Append(LIBS = ['phobos'])
- elif dc is 'gdmd':
- env.Append(LIBS = ['gphobos'])
- if 'pthread' not in libs:
- env.Append(LIBS = ['pthread'])
- if 'm' not in libs:
- env.Append(LIBS = ['m'])
- return defaultLinker
- env['SMART_LINKCOM'] = smart_link[linkcom] = _smartLink
-
- env['LINKCOM'] = '$SMART_LINKCOM '
-
-def exists(env):
- return env.Detect(['dmd', 'gdmd'])
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/dvi.py b/3rdParty/SCons/scons-local/SCons/Tool/dvi.py
deleted file mode 100644
index 8d67697..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/dvi.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""SCons.Tool.dvi
-
-Common DVI Builder definition for various other Tool modules that use it.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/dvi.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Builder
-import SCons.Tool
-
-DVIBuilder = None
-
-def generate(env):
- try:
- env['BUILDERS']['DVI']
- except KeyError:
- global DVIBuilder
-
- if DVIBuilder is None:
- # The suffix is hard-coded to '.dvi', not configurable via a
- # construction variable like $DVISUFFIX, because the output
- # file name is hard-coded within TeX.
- DVIBuilder = SCons.Builder.Builder(action = {},
- source_scanner = SCons.Tool.LaTeXScanner,
- suffix = '.dvi',
- emitter = {},
- source_ext_match = None)
-
- env['BUILDERS']['DVI'] = DVIBuilder
-
-def exists(env):
- # This only puts a skeleton Builder in place, so if someone
- # references this Tool directly, it's always "available."
- return 1
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/dvipdf.py b/3rdParty/SCons/scons-local/SCons/Tool/dvipdf.py
deleted file mode 100644
index 1fbf4b3..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/dvipdf.py
+++ /dev/null
@@ -1,125 +0,0 @@
-"""SCons.Tool.dvipdf
-
-Tool-specific initialization for dvipdf.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/dvipdf.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Defaults
-import SCons.Tool.pdf
-import SCons.Tool.tex
-import SCons.Util
-
-_null = SCons.Scanner.LaTeX._null
-
-def DviPdfPsFunction(XXXDviAction, target = None, source= None, env=None):
- """A builder for DVI files that sets the TEXPICTS environment
- variable before running dvi2ps or dvipdf."""
-
- try:
- abspath = source[0].attributes.path
- except AttributeError :
- abspath = ''
-
- saved_env = SCons.Scanner.LaTeX.modify_env_var(env, 'TEXPICTS', abspath)
-
- result = XXXDviAction(target, source, env)
-
- if saved_env is _null:
- try:
- del env['ENV']['TEXPICTS']
- except KeyError:
- pass # was never set
- else:
- env['ENV']['TEXPICTS'] = saved_env
-
- return result
-
-def DviPdfFunction(target = None, source= None, env=None):
- result = DviPdfPsFunction(PDFAction,target,source,env)
- return result
-
-def DviPdfStrFunction(target = None, source= None, env=None):
- """A strfunction for dvipdf that returns the appropriate
- command string for the no_exec options."""
- if env.GetOption("no_exec"):
- result = env.subst('$DVIPDFCOM',0,target,source)
- else:
- result = ''
- return result
-
-PDFAction = None
-DVIPDFAction = None
-
-def PDFEmitter(target, source, env):
- """Strips any .aux or .log files from the input source list.
- These are created by the TeX Builder that in all likelihood was
- used to generate the .dvi file we're using as input, and we only
- care about the .dvi file.
- """
- def strip_suffixes(n):
- return not SCons.Util.splitext(str(n))[1] in ['.aux', '.log']
- source = filter(strip_suffixes, source)
- return (target, source)
-
-def generate(env):
- """Add Builders and construction variables for dvipdf to an Environment."""
- global PDFAction
- if PDFAction is None:
- PDFAction = SCons.Action.Action('$DVIPDFCOM', '$DVIPDFCOMSTR')
-
- global DVIPDFAction
- if DVIPDFAction is None:
- DVIPDFAction = SCons.Action.Action(DviPdfFunction, strfunction = DviPdfStrFunction)
-
- import pdf
- pdf.generate(env)
-
- bld = env['BUILDERS']['PDF']
- bld.add_action('.dvi', DVIPDFAction)
- bld.add_emitter('.dvi', PDFEmitter)
-
- env['DVIPDF'] = 'dvipdf'
- env['DVIPDFFLAGS'] = SCons.Util.CLVar('')
- env['DVIPDFCOM'] = 'cd ${TARGET.dir} && $DVIPDF $DVIPDFFLAGS ${SOURCE.file} ${TARGET.file}'
-
- # Deprecated synonym.
- env['PDFCOM'] = ['$DVIPDFCOM']
-
-def exists(env):
- return env.Detect('dvipdf')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/dvips.py b/3rdParty/SCons/scons-local/SCons/Tool/dvips.py
deleted file mode 100644
index 7242622..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/dvips.py
+++ /dev/null
@@ -1,94 +0,0 @@
-"""SCons.Tool.dvips
-
-Tool-specific initialization for dvips.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/dvips.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Builder
-import SCons.Tool.dvipdf
-import SCons.Util
-
-def DviPsFunction(target = None, source= None, env=None):
- result = SCons.Tool.dvipdf.DviPdfPsFunction(PSAction,target,source,env)
- return result
-
-def DviPsStrFunction(target = None, source= None, env=None):
- """A strfunction for dvipdf that returns the appropriate
- command string for the no_exec options."""
- if env.GetOption("no_exec"):
- result = env.subst('$PSCOM',0,target,source)
- else:
- result = ''
- return result
-
-PSAction = None
-DVIPSAction = None
-PSBuilder = None
-
-def generate(env):
- """Add Builders and construction variables for dvips to an Environment."""
- global PSAction
- if PSAction is None:
- PSAction = SCons.Action.Action('$PSCOM', '$PSCOMSTR')
-
- global DVIPSAction
- if DVIPSAction is None:
- DVIPSAction = SCons.Action.Action(DviPsFunction, strfunction = DviPsStrFunction)
-
- global PSBuilder
- if PSBuilder is None:
- PSBuilder = SCons.Builder.Builder(action = PSAction,
- prefix = '$PSPREFIX',
- suffix = '$PSSUFFIX',
- src_suffix = '.dvi',
- src_builder = 'DVI',
- single_source=True)
-
- env['BUILDERS']['PostScript'] = PSBuilder
-
- env['DVIPS'] = 'dvips'
- env['DVIPSFLAGS'] = SCons.Util.CLVar('')
- # I'm not quite sure I got the directories and filenames right for variant_dir
- # We need to be in the correct directory for the sake of latex \includegraphics eps included files.
- env['PSCOM'] = 'cd ${TARGET.dir} && $DVIPS $DVIPSFLAGS -o ${TARGET.file} ${SOURCE.file}'
- env['PSPREFIX'] = ''
- env['PSSUFFIX'] = '.ps'
-
-def exists(env):
- return env.Detect('dvips')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/f77.py b/3rdParty/SCons/scons-local/SCons/Tool/f77.py
deleted file mode 100644
index e9299bc..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/f77.py
+++ /dev/null
@@ -1,62 +0,0 @@
-"""engine.SCons.Tool.f77
-
-Tool-specific initialization for the generic Posix f77 Fortran compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/f77.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Scanner.Fortran
-import SCons.Tool
-import SCons.Util
-from SCons.Tool.FortranCommon import add_all_to_env, add_f77_to_env
-
-compilers = ['f77']
-
-def generate(env):
- add_all_to_env(env)
- add_f77_to_env(env)
-
- fcomp = env.Detect(compilers) or 'f77'
- env['F77'] = fcomp
- env['SHF77'] = fcomp
-
- env['FORTRAN'] = fcomp
- env['SHFORTRAN'] = fcomp
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/f90.py b/3rdParty/SCons/scons-local/SCons/Tool/f90.py
deleted file mode 100644
index 58ccc6b..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/f90.py
+++ /dev/null
@@ -1,62 +0,0 @@
-"""engine.SCons.Tool.f90
-
-Tool-specific initialization for the generic Posix f90 Fortran compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/f90.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Scanner.Fortran
-import SCons.Tool
-import SCons.Util
-from SCons.Tool.FortranCommon import add_all_to_env, add_f90_to_env
-
-compilers = ['f90']
-
-def generate(env):
- add_all_to_env(env)
- add_f90_to_env(env)
-
- fc = env.Detect(compilers) or 'f90'
- env['F90'] = fc
- env['SHF90'] = fc
-
- env['FORTRAN'] = fc
- env['SHFORTRAN'] = fc
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/f95.py b/3rdParty/SCons/scons-local/SCons/Tool/f95.py
deleted file mode 100644
index 1097212..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/f95.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""engine.SCons.Tool.f95
-
-Tool-specific initialization for the generic Posix f95 Fortran compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/f95.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-import fortran
-from SCons.Tool.FortranCommon import add_all_to_env, add_f95_to_env
-
-compilers = ['f95']
-
-def generate(env):
- add_all_to_env(env)
- add_f95_to_env(env)
-
- fcomp = env.Detect(compilers) or 'f95'
- env['F95'] = fcomp
- env['SHF95'] = fcomp
-
- env['FORTRAN'] = fcomp
- env['SHFORTRAN'] = fcomp
-
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/filesystem.py b/3rdParty/SCons/scons-local/SCons/Tool/filesystem.py
deleted file mode 100644
index 0c34337..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/filesystem.py
+++ /dev/null
@@ -1,98 +0,0 @@
-"""SCons.Tool.filesystem
-
-Tool-specific initialization for the filesystem tools.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/filesystem.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons
-from SCons.Tool.install import copyFunc
-
-copyToBuilder, copyAsBuilder = None, None
-
-def copyto_emitter(target, source, env):
- """ changes the path of the source to be under the target (which
- are assumed to be directories.
- """
- n_target = []
-
- for t in target:
- n_target = n_target + map( lambda s, t=t: t.File( str( s ) ), source )
-
- return (n_target, source)
-
-def copy_action_func(target, source, env):
- assert( len(target) == len(source) ), "\ntarget: %s\nsource: %s" %(map(str, target),map(str, source))
-
- for t, s in zip(target, source):
- if copyFunc(t.get_path(), s.get_path(), env):
- return 1
-
- return 0
-
-def copy_action_str(target, source, env):
- return env.subst_target_source(env['COPYSTR'], 0, target, source)
-
-copy_action = SCons.Action.Action( copy_action_func, copy_action_str )
-
-def generate(env):
- try:
- env['BUILDERS']['CopyTo']
- env['BUILDERS']['CopyAs']
- except KeyError, e:
- global copyToBuilder
- if copyToBuilder is None:
- copyToBuilder = SCons.Builder.Builder(
- action = copy_action,
- target_factory = env.fs.Dir,
- source_factory = env.fs.Entry,
- multi = 1,
- emitter = [ copyto_emitter, ] )
-
- global copyAsBuilder
- if copyAsBuilder is None:
- copyAsBuilder = SCons.Builder.Builder(
- action = copy_action,
- target_factory = env.fs.Entry,
- source_factory = env.fs.Entry )
-
- env['BUILDERS']['CopyTo'] = copyToBuilder
- env['BUILDERS']['CopyAs'] = copyAsBuilder
-
- env['COPYSTR'] = 'Copy file(s): "$SOURCES" to "$TARGETS"'
-
-def exists(env):
- return 1
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/fortran.py b/3rdParty/SCons/scons-local/SCons/Tool/fortran.py
deleted file mode 100644
index 83dc43a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/fortran.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""SCons.Tool.fortran
-
-Tool-specific initialization for a generic Posix f77/f90 Fortran compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/fortran.py 4043 2009/02/23 09:06:45 scons"
-
-import re
-import string
-
-import SCons.Action
-import SCons.Defaults
-import SCons.Scanner.Fortran
-import SCons.Tool
-import SCons.Util
-from SCons.Tool.FortranCommon import add_all_to_env, add_fortran_to_env
-
-compilers = ['f95', 'f90', 'f77']
-
-def generate(env):
- add_all_to_env(env)
- add_fortran_to_env(env)
-
- fc = env.Detect(compilers) or 'f77'
- env['SHFORTRAN'] = fc
- env['FORTRAN'] = fc
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/g++.py b/3rdParty/SCons/scons-local/SCons/Tool/g++.py
deleted file mode 100644
index d21643b..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/g++.py
+++ /dev/null
@@ -1,90 +0,0 @@
-"""SCons.Tool.g++
-
-Tool-specific initialization for g++.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/g++.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import re
-import subprocess
-
-import SCons.Tool
-import SCons.Util
-
-cplusplus = __import__('c++', globals(), locals(), [])
-
-compilers = ['g++']
-
-def generate(env):
- """Add Builders and construction variables for g++ to an Environment."""
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- cplusplus.generate(env)
-
- env['CXX'] = env.Detect(compilers)
-
- # platform specific settings
- if env['PLATFORM'] == 'aix':
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS -mminimal-toc')
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
- env['SHOBJSUFFIX'] = '$OBJSUFFIX'
- elif env['PLATFORM'] == 'hpux':
- env['SHOBJSUFFIX'] = '.pic.o'
- elif env['PLATFORM'] == 'sunos':
- env['SHOBJSUFFIX'] = '.pic.o'
- # determine compiler version
- if env['CXX']:
- #pipe = SCons.Action._subproc(env, [env['CXX'], '-dumpversion'],
- pipe = SCons.Action._subproc(env, [env['CXX'], '--version'],
- stdin = 'devnull',
- stderr = 'devnull',
- stdout = subprocess.PIPE)
- if pipe.wait() != 0: return
- # -dumpversion was added in GCC 3.0. As long as we're supporting
- # GCC versions older than that, we should use --version and a
- # regular expression.
- #line = pipe.stdout.read().strip()
- #if line:
- # env['CXXVERSION'] = line
- line = pipe.stdout.readline()
- match = re.search(r'[0-9]+(\.[0-9]+)+', line)
- if match:
- env['CXXVERSION'] = match.group(0)
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/g77.py b/3rdParty/SCons/scons-local/SCons/Tool/g77.py
deleted file mode 100644
index 84b0ed9..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/g77.py
+++ /dev/null
@@ -1,73 +0,0 @@
-"""engine.SCons.Tool.g77
-
-Tool-specific initialization for g77.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/g77.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-from SCons.Tool.FortranCommon import add_all_to_env, add_f77_to_env
-
-compilers = ['g77', 'f77']
-
-def generate(env):
- """Add Builders and construction variables for g77 to an Environment."""
- add_all_to_env(env)
- add_f77_to_env(env)
-
- fcomp = env.Detect(compilers) or 'g77'
- if env['PLATFORM'] in ['cygwin', 'win32']:
- env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS')
- env['SHF77FLAGS'] = SCons.Util.CLVar('$F77FLAGS')
- else:
- env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -fPIC')
- env['SHF77FLAGS'] = SCons.Util.CLVar('$F77FLAGS -fPIC')
-
- env['FORTRAN'] = fcomp
- env['SHFORTRAN'] = '$FORTRAN'
-
- env['F77'] = fcomp
- env['SHF77'] = '$F77'
-
- env['INCFORTRANPREFIX'] = "-I"
- env['INCFORTRANSUFFIX'] = ""
-
- env['INCF77PREFIX'] = "-I"
- env['INCF77SUFFIX'] = ""
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/gas.py b/3rdParty/SCons/scons-local/SCons/Tool/gas.py
deleted file mode 100644
index 997690f..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/gas.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""SCons.Tool.gas
-
-Tool-specific initialization for as, the Gnu assembler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/gas.py 4043 2009/02/23 09:06:45 scons"
-
-as_module = __import__('as', globals(), locals(), [])
-
-assemblers = ['as', 'gas']
-
-def generate(env):
- """Add Builders and construction variables for as to an Environment."""
- as_module.generate(env)
-
- env['AS'] = env.Detect(assemblers) or 'as'
-
-def exists(env):
- return env.Detect(assemblers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/gcc.py b/3rdParty/SCons/scons-local/SCons/Tool/gcc.py
deleted file mode 100644
index 90dd4d0..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/gcc.py
+++ /dev/null
@@ -1,80 +0,0 @@
-"""SCons.Tool.gcc
-
-Tool-specific initialization for gcc.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/gcc.py 4043 2009/02/23 09:06:45 scons"
-
-import cc
-import os
-import re
-import subprocess
-
-import SCons.Util
-
-compilers = ['gcc', 'cc']
-
-def generate(env):
- """Add Builders and construction variables for gcc to an Environment."""
- cc.generate(env)
-
- env['CC'] = env.Detect(compilers) or 'gcc'
- if env['PLATFORM'] in ['cygwin', 'win32']:
- env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS')
- else:
- env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS -fPIC')
- # determine compiler version
- if env['CC']:
- #pipe = SCons.Action._subproc(env, [env['CC'], '-dumpversion'],
- pipe = SCons.Action._subproc(env, [env['CC'], '--version'],
- stdin = 'devnull',
- stderr = 'devnull',
- stdout = subprocess.PIPE)
- if pipe.wait() != 0: return
- # -dumpversion was added in GCC 3.0. As long as we're supporting
- # GCC versions older than that, we should use --version and a
- # regular expression.
- #line = pipe.stdout.read().strip()
- #if line:
- # env['CCVERSION'] = line
- line = pipe.stdout.readline()
- match = re.search(r'[0-9]+(\.[0-9]+)+', line)
- if match:
- env['CCVERSION'] = match.group(0)
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/gfortran.py b/3rdParty/SCons/scons-local/SCons/Tool/gfortran.py
deleted file mode 100644
index 0a67b4c..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/gfortran.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""SCons.Tool.gfortran
-
-Tool-specific initialization for gfortran, the GNU Fortran 95/Fortran
-2003 compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/gfortran.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-import fortran
-
-def generate(env):
- """Add Builders and construction variables for gfortran to an
- Environment."""
- fortran.generate(env)
-
- for dialect in ['F77', 'F90', 'FORTRAN', 'F95']:
- env['%s' % dialect] = 'gfortran'
- env['SH%s' % dialect] = '$%s' % dialect
- if env['PLATFORM'] in ['cygwin', 'win32']:
- env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS' % dialect)
- else:
- env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS -fPIC' % dialect)
-
- env['INC%sPREFIX' % dialect] = "-I"
- env['INC%sSUFFIX' % dialect] = ""
-
-def exists(env):
- return env.Detect('gfortran')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/gnulink.py b/3rdParty/SCons/scons-local/SCons/Tool/gnulink.py
deleted file mode 100644
index ca9672e..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/gnulink.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""SCons.Tool.gnulink
-
-Tool-specific initialization for the gnu linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/gnulink.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-import link
-
-linkers = ['g++', 'gcc']
-
-def generate(env):
- """Add Builders and construction variables for gnulink to an Environment."""
- link.generate(env)
-
- if env['PLATFORM'] == 'hpux':
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -shared -fPIC')
-
- # __RPATH is set to $_RPATH in the platform specification if that
- # platform supports it.
- env.Append(LINKFLAGS=['$__RPATH'])
- env['RPATHPREFIX'] = '-Wl,-rpath='
- env['RPATHSUFFIX'] = ''
- env['_RPATH'] = '${_concat(RPATHPREFIX, RPATH, RPATHSUFFIX, __env__)}'
-
-def exists(env):
- return env.Detect(linkers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/gs.py b/3rdParty/SCons/scons-local/SCons/Tool/gs.py
deleted file mode 100644
index 28b14f3..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/gs.py
+++ /dev/null
@@ -1,81 +0,0 @@
-"""SCons.Tool.gs
-
-Tool-specific initialization for Ghostscript.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/gs.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Platform
-import SCons.Util
-
-# Ghostscript goes by different names on different platforms...
-platform = SCons.Platform.platform_default()
-
-if platform == 'os2':
- gs = 'gsos2'
-elif platform == 'win32':
- gs = 'gswin32c'
-else:
- gs = 'gs'
-
-GhostscriptAction = None
-
-def generate(env):
- """Add Builders and construction variables for Ghostscript to an
- Environment."""
-
- global GhostscriptAction
- if GhostscriptAction is None:
- GhostscriptAction = SCons.Action.Action('$GSCOM', '$GSCOMSTR')
-
- import pdf
- pdf.generate(env)
-
- bld = env['BUILDERS']['PDF']
- bld.add_action('.ps', GhostscriptAction)
-
- env['GS'] = gs
- env['GSFLAGS'] = SCons.Util.CLVar('-dNOPAUSE -dBATCH -sDEVICE=pdfwrite')
- env['GSCOM'] = '$GS $GSFLAGS -sOutputFile=$TARGET $SOURCES'
-
-
-def exists(env):
- if env.has_key('PS2PDF'):
- return env.Detect(env['PS2PDF'])
- else:
- return env.Detect(gs) or SCons.Util.WhereIs(gs)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/hpc++.py b/3rdParty/SCons/scons-local/SCons/Tool/hpc++.py
deleted file mode 100644
index 0754611..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/hpc++.py
+++ /dev/null
@@ -1,85 +0,0 @@
-"""SCons.Tool.hpc++
-
-Tool-specific initialization for c++ on HP/UX.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/hpc++.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import string
-
-import SCons.Util
-
-cplusplus = __import__('c++', globals(), locals(), [])
-
-acc = None
-
-# search for the acc compiler and linker front end
-
-try:
- dirs = os.listdir('/opt')
-except (IOError, OSError):
- # Not being able to read the directory because it doesn't exist
- # (IOError) or isn't readable (OSError) is okay.
- dirs = []
-
-for dir in dirs:
- cc = '/opt/' + dir + '/bin/aCC'
- if os.path.exists(cc):
- acc = cc
- break
-
-
-def generate(env):
- """Add Builders and construction variables for g++ to an Environment."""
- cplusplus.generate(env)
-
- if acc:
- env['CXX'] = acc or 'aCC'
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS +Z')
- # determine version of aCC
- line = os.popen(acc + ' -V 2>&1').readline().rstrip()
- if string.find(line, 'aCC: HP ANSI C++') == 0:
- env['CXXVERSION'] = string.split(line)[-1]
-
- if env['PLATFORM'] == 'cygwin':
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS')
- else:
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS +Z')
-
-def exists(env):
- return acc
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/hpcc.py b/3rdParty/SCons/scons-local/SCons/Tool/hpcc.py
deleted file mode 100644
index 2762015..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/hpcc.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""SCons.Tool.hpcc
-
-Tool-specific initialization for HP aCC and cc.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/hpcc.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-import cc
-
-def generate(env):
- """Add Builders and construction variables for aCC & cc to an Environment."""
- cc.generate(env)
-
- env['CXX'] = 'aCC'
- env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS +Z')
-
-def exists(env):
- return env.Detect('aCC')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/hplink.py b/3rdParty/SCons/scons-local/SCons/Tool/hplink.py
deleted file mode 100644
index f47a436..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/hplink.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""SCons.Tool.hplink
-
-Tool-specific initialization for the HP linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/hplink.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-
-import SCons.Util
-
-import link
-
-ccLinker = None
-
-# search for the acc compiler and linker front end
-
-try:
- dirs = os.listdir('/opt')
-except (IOError, OSError):
- # Not being able to read the directory because it doesn't exist
- # (IOError) or isn't readable (OSError) is okay.
- dirs = []
-
-for dir in dirs:
- linker = '/opt/' + dir + '/bin/aCC'
- if os.path.exists(linker):
- ccLinker = linker
- break
-
-def generate(env):
- """
- Add Builders and construction variables for Visual Age linker to
- an Environment.
- """
- link.generate(env)
-
- env['LINKFLAGS'] = SCons.Util.CLVar('-Wl,+s -Wl,+vnocompatwarnings')
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -b')
- env['SHLIBSUFFIX'] = '.sl'
-
-def exists(env):
- return ccLinker
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/icc.py b/3rdParty/SCons/scons-local/SCons/Tool/icc.py
deleted file mode 100644
index e2a7388..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/icc.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""engine.SCons.Tool.icc
-
-Tool-specific initialization for the OS/2 icc compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/icc.py 4043 2009/02/23 09:06:45 scons"
-
-import cc
-
-def generate(env):
- """Add Builders and construction variables for the OS/2 to an Environment."""
- cc.generate(env)
-
- env['CC'] = 'icc'
- env['CCCOM'] = '$CC $CFLAGS $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET'
- env['CXXCOM'] = '$CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET'
- env['CPPDEFPREFIX'] = '/D'
- env['CPPDEFSUFFIX'] = ''
- env['INCPREFIX'] = '/I'
- env['INCSUFFIX'] = ''
- env['CFILESUFFIX'] = '.c'
- env['CXXFILESUFFIX'] = '.cc'
-
-def exists(env):
- return env.Detect('icc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/icl.py b/3rdParty/SCons/scons-local/SCons/Tool/icl.py
deleted file mode 100644
index afead06..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/icl.py
+++ /dev/null
@@ -1,52 +0,0 @@
-"""engine.SCons.Tool.icl
-
-Tool-specific initialization for the Intel C/C++ compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/icl.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Tool.intelc
-
-# This has been completely superceded by intelc.py, which can
-# handle both Windows and Linux versions.
-
-def generate(*args, **kw):
- """Add Builders and construction variables for icl to an Environment."""
- return apply(SCons.Tool.intelc.generate, args, kw)
-
-def exists(*args, **kw):
- return apply(SCons.Tool.intelc.exists, args, kw)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/ifl.py b/3rdParty/SCons/scons-local/SCons/Tool/ifl.py
deleted file mode 100644
index f728ed5..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/ifl.py
+++ /dev/null
@@ -1,72 +0,0 @@
-"""SCons.Tool.ifl
-
-Tool-specific initialization for the Intel Fortran compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/ifl.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-from SCons.Scanner.Fortran import FortranScan
-from FortranCommon import add_all_to_env
-
-def generate(env):
- """Add Builders and construction variables for ifl to an Environment."""
- fscan = FortranScan("FORTRANPATH")
- SCons.Tool.SourceFileScanner.add_scanner('.i', fscan)
- SCons.Tool.SourceFileScanner.add_scanner('.i90', fscan)
-
- if not env.has_key('FORTRANFILESUFFIXES'):
- env['FORTRANFILESUFFIXES'] = ['.i']
- else:
- env['FORTRANFILESUFFIXES'].append('.i')
-
- if not env.has_key('F90FILESUFFIXES'):
- env['F90FILESUFFIXES'] = ['.i90']
- else:
- env['F90FILESUFFIXES'].append('.i90')
-
- add_all_to_env(env)
-
- env['FORTRAN'] = 'ifl'
- env['SHFORTRAN'] = '$FORTRAN'
- env['FORTRANCOM'] = '$FORTRAN $FORTRANFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET'
- env['FORTRANPPCOM'] = '$FORTRAN $FORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET'
- env['SHFORTRANCOM'] = '$SHFORTRAN $SHFORTRANFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET'
- env['SHFORTRANPPCOM'] = '$SHFORTRAN $SHFORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANINCFLAGS /c $SOURCES /Fo$TARGET'
-
-def exists(env):
- return env.Detect('ifl')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/ifort.py b/3rdParty/SCons/scons-local/SCons/Tool/ifort.py
deleted file mode 100644
index 2ef55f3..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/ifort.py
+++ /dev/null
@@ -1,89 +0,0 @@
-"""SCons.Tool.ifort
-
-Tool-specific initialization for newer versions of the Intel Fortran Compiler
-for Linux/Windows (and possibly Mac OS X).
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/ifort.py 4043 2009/02/23 09:06:45 scons"
-
-import string
-
-import SCons.Defaults
-from SCons.Scanner.Fortran import FortranScan
-from FortranCommon import add_all_to_env
-
-def generate(env):
- """Add Builders and construction variables for ifort to an Environment."""
- # ifort supports Fortran 90 and Fortran 95
- # Additionally, ifort recognizes more file extensions.
- fscan = FortranScan("FORTRANPATH")
- SCons.Tool.SourceFileScanner.add_scanner('.i', fscan)
- SCons.Tool.SourceFileScanner.add_scanner('.i90', fscan)
-
- if not env.has_key('FORTRANFILESUFFIXES'):
- env['FORTRANFILESUFFIXES'] = ['.i']
- else:
- env['FORTRANFILESUFFIXES'].append('.i')
-
- if not env.has_key('F90FILESUFFIXES'):
- env['F90FILESUFFIXES'] = ['.i90']
- else:
- env['F90FILESUFFIXES'].append('.i90')
-
- add_all_to_env(env)
-
- fc = 'ifort'
-
- for dialect in ['F77', 'F90', 'FORTRAN', 'F95']:
- env['%s' % dialect] = fc
- env['SH%s' % dialect] = '$%s' % dialect
- env['SH%sFLAGS' % dialect] = SCons.Util.CLVar('$%sFLAGS -fPIC' % dialect)
-
- if env['PLATFORM'] == 'win32':
- # On Windows, the ifort compiler specifies the object on the
- # command line with -object:, not -o. Massage the necessary
- # command-line construction variables.
- for dialect in ['F77', 'F90', 'FORTRAN', 'F95']:
- for var in ['%sCOM' % dialect, '%sPPCOM' % dialect,
- 'SH%sCOM' % dialect, 'SH%sPPCOM' % dialect]:
- env[var] = string.replace(env[var], '-o $TARGET', '-object:$TARGET')
- env['FORTRANMODDIRPREFIX'] = "/module:"
- else:
- env['FORTRANMODDIRPREFIX'] = "-module "
-
-def exists(env):
- return env.Detect('ifort')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/ilink.py b/3rdParty/SCons/scons-local/SCons/Tool/ilink.py
deleted file mode 100644
index 94a6f63..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/ilink.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""SCons.Tool.ilink
-
-Tool-specific initialization for the OS/2 ilink linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/ilink.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-def generate(env):
- """Add Builders and construction variables for ilink to an Environment."""
- SCons.Tool.createProgBuilder(env)
-
- env['LINK'] = 'ilink'
- env['LINKFLAGS'] = SCons.Util.CLVar('')
- env['LINKCOM'] = '$LINK $LINKFLAGS /O:$TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
- env['LIBDIRPREFIX']='/LIBPATH:'
- env['LIBDIRSUFFIX']=''
- env['LIBLINKPREFIX']=''
- env['LIBLINKSUFFIX']='$LIBSUFFIX'
-
-def exists(env):
- return env.Detect('ilink')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/ilink32.py b/3rdParty/SCons/scons-local/SCons/Tool/ilink32.py
deleted file mode 100644
index 474649d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/ilink32.py
+++ /dev/null
@@ -1,60 +0,0 @@
-"""SCons.Tool.ilink32
-
-XXX
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/ilink32.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Tool
-import SCons.Tool.bcc32
-import SCons.Util
-
-def generate(env):
- """Add Builders and construction variables for Borland ilink to an
- Environment."""
- SCons.Tool.createSharedLibBuilder(env)
- SCons.Tool.createProgBuilder(env)
-
- env['LINK'] = '$CC'
- env['LINKFLAGS'] = SCons.Util.CLVar('')
- env['LINKCOM'] = '$LINK -q $LINKFLAGS -e$TARGET $SOURCES $LIBS'
- env['LIBDIRPREFIX']=''
- env['LIBDIRSUFFIX']=''
- env['LIBLINKPREFIX']=''
- env['LIBLINKSUFFIX']='$LIBSUFFIX'
-
-
-def exists(env):
- # Uses bcc32 to do linking as it generally knows where the standard
- # LIBS are and set up the linking correctly
- return SCons.Tool.bcc32.findIt('bcc32', env)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/install.py b/3rdParty/SCons/scons-local/SCons/Tool/install.py
deleted file mode 100644
index 9596db1..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/install.py
+++ /dev/null
@@ -1,229 +0,0 @@
-"""SCons.Tool.install
-
-Tool-specific initialization for the install tool.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/install.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import shutil
-import stat
-
-import SCons.Action
-from SCons.Util import make_path_relative
-
-#
-# We keep track of *all* installed files.
-_INSTALLED_FILES = []
-_UNIQUE_INSTALLED_FILES = None
-
-#
-# Functions doing the actual work of the Install Builder.
-#
-def copyFunc(dest, source, env):
- """Install a source file or directory into a destination by copying,
- (including copying permission/mode bits)."""
-
- if os.path.isdir(source):
- if os.path.exists(dest):
- if not os.path.isdir(dest):
- raise SCons.Errors.UserError, "cannot overwrite non-directory `%s' with a directory `%s'" % (str(dest), str(source))
- else:
- parent = os.path.split(dest)[0]
- if not os.path.exists(parent):
- os.makedirs(parent)
- shutil.copytree(source, dest)
- else:
- shutil.copy2(source, dest)
- st = os.stat(source)
- os.chmod(dest, stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE)
-
- return 0
-
-def installFunc(target, source, env):
- """Install a source file into a target using the function specified
- as the INSTALL construction variable."""
- try:
- install = env['INSTALL']
- except KeyError:
- raise SCons.Errors.UserError('Missing INSTALL construction variable.')
-
- assert len(target)==len(source), \
- "Installing source %s into target %s: target and source lists must have same length."%(map(str, source), map(str, target))
- for t,s in zip(target,source):
- if install(t.get_path(),s.get_path(),env):
- return 1
-
- return 0
-
-def stringFunc(target, source, env):
- installstr = env.get('INSTALLSTR')
- if installstr:
- return env.subst_target_source(installstr, 1, target, source)
- target = str(target[0])
- source = str(source[0])
- if os.path.isdir(source):
- type = 'directory'
- else:
- type = 'file'
- return 'Install %s: "%s" as "%s"' % (type, source, target)
-
-#
-# Emitter functions
-#
-def add_targets_to_INSTALLED_FILES(target, source, env):
- """ an emitter that adds all target files to the list stored in the
- _INSTALLED_FILES global variable. This way all installed files of one
- scons call will be collected.
- """
- global _INSTALLED_FILES, _UNIQUE_INSTALLED_FILES
- _INSTALLED_FILES.extend(target)
- _UNIQUE_INSTALLED_FILES = None
- return (target, source)
-
-class DESTDIR_factory:
- """ a node factory, where all files will be relative to the dir supplied
- in the constructor.
- """
- def __init__(self, env, dir):
- self.env = env
- self.dir = env.arg2nodes( dir, env.fs.Dir )[0]
-
- def Entry(self, name):
- name = make_path_relative(name)
- return self.dir.Entry(name)
-
- def Dir(self, name):
- name = make_path_relative(name)
- return self.dir.Dir(name)
-
-#
-# The Builder Definition
-#
-install_action = SCons.Action.Action(installFunc, stringFunc)
-installas_action = SCons.Action.Action(installFunc, stringFunc)
-
-BaseInstallBuilder = None
-
-def InstallBuilderWrapper(env, target=None, source=None, dir=None, **kw):
- if target and dir:
- import SCons.Errors
- raise SCons.Errors.UserError, "Both target and dir defined for Install(), only one may be defined."
- if not dir:
- dir=target
-
- import SCons.Script
- install_sandbox = SCons.Script.GetOption('install_sandbox')
- if install_sandbox:
- target_factory = DESTDIR_factory(env, install_sandbox)
- else:
- target_factory = env.fs
-
- try:
- dnodes = env.arg2nodes(dir, target_factory.Dir)
- except TypeError:
- raise SCons.Errors.UserError, "Target `%s' of Install() is a file, but should be a directory. Perhaps you have the Install() arguments backwards?" % str(dir)
- sources = env.arg2nodes(source, env.fs.Entry)
- tgt = []
- for dnode in dnodes:
- for src in sources:
- # Prepend './' so the lookup doesn't interpret an initial
- # '#' on the file name portion as meaning the Node should
- # be relative to the top-level SConstruct directory.
- target = env.fs.Entry('.'+os.sep+src.name, dnode)
- #tgt.extend(BaseInstallBuilder(env, target, src, **kw))
- tgt.extend(apply(BaseInstallBuilder, (env, target, src), kw))
- return tgt
-
-def InstallAsBuilderWrapper(env, target=None, source=None, **kw):
- result = []
- for src, tgt in map(lambda x, y: (x, y), source, target):
- #result.extend(BaseInstallBuilder(env, tgt, src, **kw))
- result.extend(apply(BaseInstallBuilder, (env, tgt, src), kw))
- return result
-
-added = None
-
-def generate(env):
-
- from SCons.Script import AddOption, GetOption
- global added
- if not added:
- added = 1
- AddOption('--install-sandbox',
- dest='install_sandbox',
- type="string",
- action="store",
- help='A directory under which all installed files will be placed.')
-
- global BaseInstallBuilder
- if BaseInstallBuilder is None:
- install_sandbox = GetOption('install_sandbox')
- if install_sandbox:
- target_factory = DESTDIR_factory(env, install_sandbox)
- else:
- target_factory = env.fs
-
- BaseInstallBuilder = SCons.Builder.Builder(
- action = install_action,
- target_factory = target_factory.Entry,
- source_factory = env.fs.Entry,
- multi = 1,
- emitter = [ add_targets_to_INSTALLED_FILES, ],
- name = 'InstallBuilder')
-
- env['BUILDERS']['_InternalInstall'] = InstallBuilderWrapper
- env['BUILDERS']['_InternalInstallAs'] = InstallAsBuilderWrapper
-
- # We'd like to initialize this doing something like the following,
- # but there isn't yet support for a ${SOURCE.type} expansion that
- # will print "file" or "directory" depending on what's being
- # installed. For now we punt by not initializing it, and letting
- # the stringFunc() that we put in the action fall back to the
- # hand-crafted default string if it's not set.
- #
- #try:
- # env['INSTALLSTR']
- #except KeyError:
- # env['INSTALLSTR'] = 'Install ${SOURCE.type}: "$SOURCES" as "$TARGETS"'
-
- try:
- env['INSTALL']
- except KeyError:
- env['INSTALL'] = copyFunc
-
-def exists(env):
- return 1
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/intelc.py b/3rdParty/SCons/scons-local/SCons/Tool/intelc.py
deleted file mode 100644
index 3ced16a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/intelc.py
+++ /dev/null
@@ -1,488 +0,0 @@
-"""SCons.Tool.icl
-
-Tool-specific initialization for the Intel C/C++ compiler.
-Supports Linux and Windows compilers, v7 and up.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/intelc.py 4043 2009/02/23 09:06:45 scons"
-
-import math, sys, os.path, glob, string, re
-
-is_windows = sys.platform == 'win32'
-is_win64 = is_windows and (os.environ['PROCESSOR_ARCHITECTURE'] == 'AMD64' or
- (os.environ.has_key('PROCESSOR_ARCHITEW6432') and
- os.environ['PROCESSOR_ARCHITEW6432'] == 'AMD64'))
-is_linux = sys.platform == 'linux2'
-is_mac = sys.platform == 'darwin'
-
-if is_windows:
- import SCons.Tool.msvc
-elif is_linux:
- import SCons.Tool.gcc
-elif is_mac:
- import SCons.Tool.gcc
-import SCons.Util
-import SCons.Warnings
-
-# Exceptions for this tool
-class IntelCError(SCons.Errors.InternalError):
- pass
-class MissingRegistryError(IntelCError): # missing registry entry
- pass
-class MissingDirError(IntelCError): # dir not found
- pass
-class NoRegistryModuleError(IntelCError): # can't read registry at all
- pass
-
-def uniquify(s):
- """Return a sequence containing only one copy of each unique element from input sequence s.
- Does not preserve order.
- Input sequence must be hashable (i.e. must be usable as a dictionary key)."""
- u = {}
- for x in s:
- u[x] = 1
- return u.keys()
-
-def linux_ver_normalize(vstr):
- """Normalize a Linux compiler version number.
- Intel changed from "80" to "9.0" in 2005, so we assume if the number
- is greater than 60 it's an old-style number and otherwise new-style.
- Always returns an old-style float like 80 or 90 for compatibility with Windows.
- Shades of Y2K!"""
- # Check for version number like 9.1.026: return 91.026
- m = re.match(r'([0-9]+)\.([0-9]+)\.([0-9]+)', vstr)
- if m:
- vmaj,vmin,build = m.groups()
- return float(vmaj) * 10 + float(vmin) + float(build) / 1000.;
- else:
- f = float(vstr)
- if is_windows:
- return f
- else:
- if f < 60: return f * 10.0
- else: return f
-
-def check_abi(abi):
- """Check for valid ABI (application binary interface) name,
- and map into canonical one"""
- if not abi:
- return None
- abi = abi.lower()
- # valid_abis maps input name to canonical name
- if is_windows:
- valid_abis = {'ia32' : 'ia32',
- 'x86' : 'ia32',
- 'ia64' : 'ia64',
- 'em64t' : 'em64t',
- 'amd64' : 'em64t'}
- if is_linux:
- valid_abis = {'ia32' : 'ia32',
- 'x86' : 'ia32',
- 'x86_64' : 'x86_64',
- 'em64t' : 'x86_64',
- 'amd64' : 'x86_64'}
- if is_mac:
- valid_abis = {'ia32' : 'ia32',
- 'x86' : 'ia32',
- 'x86_64' : 'x86_64',
- 'em64t' : 'x86_64'}
- try:
- abi = valid_abis[abi]
- except KeyError:
- raise SCons.Errors.UserError, \
- "Intel compiler: Invalid ABI %s, valid values are %s"% \
- (abi, valid_abis.keys())
- return abi
-
-def vercmp(a, b):
- """Compare strings as floats,
- but Intel changed Linux naming convention at 9.0"""
- return cmp(linux_ver_normalize(b), linux_ver_normalize(a))
-
-def get_version_from_list(v, vlist):
- """See if we can match v (string) in vlist (list of strings)
- Linux has to match in a fuzzy way."""
- if is_windows:
- # Simple case, just find it in the list
- if v in vlist: return v
- else: return None
- else:
- # Fuzzy match: normalize version number first, but still return
- # original non-normalized form.
- fuzz = 0.001
- for vi in vlist:
- if math.fabs(linux_ver_normalize(vi) - linux_ver_normalize(v)) < fuzz:
- return vi
- # Not found
- return None
-
-def get_intel_registry_value(valuename, version=None, abi=None):
- """
- Return a value from the Intel compiler registry tree. (Windows only)
- """
- # Open the key:
- if is_win64:
- K = 'Software\\Wow6432Node\\Intel\\Compilers\\C++\\' + version + '\\'+abi.upper()
- else:
- K = 'Software\\Intel\\Compilers\\C++\\' + version + '\\'+abi.upper()
- try:
- k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, K)
- except SCons.Util.RegError:
- raise MissingRegistryError, \
- "%s was not found in the registry, for Intel compiler version %s, abi='%s'"%(K, version,abi)
-
- # Get the value:
- try:
- v = SCons.Util.RegQueryValueEx(k, valuename)[0]
- return v # or v.encode('iso-8859-1', 'replace') to remove unicode?
- except SCons.Util.RegError:
- raise MissingRegistryError, \
- "%s\\%s was not found in the registry."%(K, valuename)
-
-
-def get_all_compiler_versions():
- """Returns a sorted list of strings, like "70" or "80" or "9.0"
- with most recent compiler version first.
- """
- versions=[]
- if is_windows:
- if is_win64:
- keyname = 'Software\\WoW6432Node\\Intel\\Compilers\\C++'
- else:
- keyname = 'Software\\Intel\\Compilers\\C++'
- try:
- k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE,
- keyname)
- except WindowsError:
- return []
- i = 0
- versions = []
- try:
- while i < 100:
- subkey = SCons.Util.RegEnumKey(k, i) # raises EnvironmentError
- # Check that this refers to an existing dir.
- # This is not 100% perfect but should catch common
- # installation issues like when the compiler was installed
- # and then the install directory deleted or moved (rather
- # than uninstalling properly), so the registry values
- # are still there.
- ok = False
- for try_abi in ('IA32', 'IA32e', 'IA64', 'EM64T'):
- try:
- d = get_intel_registry_value('ProductDir', subkey, try_abi)
- except MissingRegistryError:
- continue # not found in reg, keep going
- if os.path.exists(d): ok = True
- if ok:
- versions.append(subkey)
- else:
- try:
- # Registry points to nonexistent dir. Ignore this
- # version.
- value = get_intel_registry_value('ProductDir', subkey, 'IA32')
- except MissingRegistryError, e:
-
- # Registry key is left dangling (potentially
- # after uninstalling).
-
- print \
- "scons: *** Ignoring the registry key for the Intel compiler version %s.\n" \
- "scons: *** It seems that the compiler was uninstalled and that the registry\n" \
- "scons: *** was not cleaned up properly.\n" % subkey
- else:
- print "scons: *** Ignoring "+str(value)
-
- i = i + 1
- except EnvironmentError:
- # no more subkeys
- pass
- elif is_linux:
- for d in glob.glob('/opt/intel_cc_*'):
- # Typical dir here is /opt/intel_cc_80.
- m = re.search(r'cc_(.*)$', d)
- if m:
- versions.append(m.group(1))
- for d in glob.glob('/opt/intel/cc*/*'):
- # Typical dir here is /opt/intel/cc/9.0 for IA32,
- # /opt/intel/cce/9.0 for EMT64 (AMD64)
- m = re.search(r'([0-9.]+)$', d)
- if m:
- versions.append(m.group(1))
- elif is_mac:
- for d in glob.glob('/opt/intel/cc*/*'):
- # Typical dir here is /opt/intel/cc/9.0 for IA32,
- # /opt/intel/cce/9.0 for EMT64 (AMD64)
- m = re.search(r'([0-9.]+)$', d)
- if m:
- versions.append(m.group(1))
- versions = uniquify(versions) # remove dups
- versions.sort(vercmp)
- return versions
-
-def get_intel_compiler_top(version, abi):
- """
- Return the main path to the top-level dir of the Intel compiler,
- using the given version.
- The compiler will be in <top>/bin/icl.exe (icc on linux),
- the include dir is <top>/include, etc.
- """
-
- if is_windows:
- if not SCons.Util.can_read_reg:
- raise NoRegistryModuleError, "No Windows registry module was found"
- top = get_intel_registry_value('ProductDir', version, abi)
- if not os.path.exists(os.path.join(top, "Bin", "icl.exe")):
- raise MissingDirError, \
- "Can't find Intel compiler in %s"%(top)
- elif is_mac or is_linux:
- # first dir is new (>=9.0) style, second is old (8.0) style.
- dirs=('/opt/intel/cc/%s', '/opt/intel_cc_%s')
- if abi == 'x86_64':
- dirs=('/opt/intel/cce/%s',) # 'e' stands for 'em64t', aka x86_64 aka amd64
- top=None
- for d in dirs:
- if os.path.exists(os.path.join(d%version, "bin", "icc")):
- top = d%version
- break
- if not top:
- raise MissingDirError, \
- "Can't find version %s Intel compiler in %s (abi='%s')"%(version,top, abi)
- return top
-
-
-def generate(env, version=None, abi=None, topdir=None, verbose=0):
- """Add Builders and construction variables for Intel C/C++ compiler
- to an Environment.
- args:
- version: (string) compiler version to use, like "80"
- abi: (string) 'win32' or whatever Itanium version wants
- topdir: (string) compiler top dir, like
- "c:\Program Files\Intel\Compiler70"
- If topdir is used, version and abi are ignored.
- verbose: (int) if >0, prints compiler version used.
- """
- if not (is_mac or is_linux or is_windows):
- # can't handle this platform
- return
-
- if is_windows:
- SCons.Tool.msvc.generate(env)
- elif is_linux:
- SCons.Tool.gcc.generate(env)
- elif is_mac:
- SCons.Tool.gcc.generate(env)
-
- # if version is unspecified, use latest
- vlist = get_all_compiler_versions()
- if not version:
- if vlist:
- version = vlist[0]
- else:
- # User may have specified '90' but we need to get actual dirname '9.0'.
- # get_version_from_list does that mapping.
- v = get_version_from_list(version, vlist)
- if not v:
- raise SCons.Errors.UserError, \
- "Invalid Intel compiler version %s: "%version + \
- "installed versions are %s"%(', '.join(vlist))
- version = v
-
- # if abi is unspecified, use ia32
- # alternatives are ia64 for Itanium, or amd64 or em64t or x86_64 (all synonyms here)
- abi = check_abi(abi)
- if abi is None:
- if is_mac or is_linux:
- # Check if we are on 64-bit linux, default to 64 then.
- uname_m = os.uname()[4]
- if uname_m == 'x86_64':
- abi = 'x86_64'
- else:
- abi = 'ia32'
- else:
- if is_win64:
- abi = 'em64t'
- else:
- abi = 'ia32'
-
- if version and not topdir:
- try:
- topdir = get_intel_compiler_top(version, abi)
- except (SCons.Util.RegError, IntelCError):
- topdir = None
-
- if not topdir:
- # Normally this is an error, but it might not be if the compiler is
- # on $PATH and the user is importing their env.
- class ICLTopDirWarning(SCons.Warnings.Warning):
- pass
- if (is_mac or is_linux) and not env.Detect('icc') or \
- is_windows and not env.Detect('icl'):
-
- SCons.Warnings.enableWarningClass(ICLTopDirWarning)
- SCons.Warnings.warn(ICLTopDirWarning,
- "Failed to find Intel compiler for version='%s', abi='%s'"%
- (str(version), str(abi)))
- else:
- # should be cleaned up to say what this other version is
- # since in this case we have some other Intel compiler installed
- SCons.Warnings.enableWarningClass(ICLTopDirWarning)
- SCons.Warnings.warn(ICLTopDirWarning,
- "Can't find Intel compiler top dir for version='%s', abi='%s'"%
- (str(version), str(abi)))
-
- if topdir:
- if verbose:
- print "Intel C compiler: using version %s (%g), abi %s, in '%s'"%\
- (repr(version), linux_ver_normalize(version),abi,topdir)
- if is_linux:
- # Show the actual compiler version by running the compiler.
- os.system('%s/bin/icc --version'%topdir)
- if is_mac:
- # Show the actual compiler version by running the compiler.
- os.system('%s/bin/icc --version'%topdir)
-
- env['INTEL_C_COMPILER_TOP'] = topdir
- if is_linux:
- paths={'INCLUDE' : 'include',
- 'LIB' : 'lib',
- 'PATH' : 'bin',
- 'LD_LIBRARY_PATH' : 'lib'}
- for p in paths.keys():
- env.PrependENVPath(p, os.path.join(topdir, paths[p]))
- if is_mac:
- paths={'INCLUDE' : 'include',
- 'LIB' : 'lib',
- 'PATH' : 'bin',
- 'LD_LIBRARY_PATH' : 'lib'}
- for p in paths.keys():
- env.PrependENVPath(p, os.path.join(topdir, paths[p]))
- if is_windows:
- # env key reg valname default subdir of top
- paths=(('INCLUDE', 'IncludeDir', 'Include'),
- ('LIB' , 'LibDir', 'Lib'),
- ('PATH' , 'BinDir', 'Bin'))
- # We are supposed to ignore version if topdir is set, so set
- # it to the emptry string if it's not already set.
- if version is None:
- version = ''
- # Each path has a registry entry, use that or default to subdir
- for p in paths:
- try:
- path=get_intel_registry_value(p[1], version, abi)
- # These paths may have $(ICInstallDir)
- # which needs to be substituted with the topdir.
- path=path.replace('$(ICInstallDir)', topdir + os.sep)
- except IntelCError:
- # Couldn't get it from registry: use default subdir of topdir
- env.PrependENVPath(p[0], os.path.join(topdir, p[2]))
- else:
- env.PrependENVPath(p[0], string.split(path, os.pathsep))
- # print "ICL %s: %s, final=%s"%(p[0], path, str(env['ENV'][p[0]]))
-
- if is_windows:
- env['CC'] = 'icl'
- env['CXX'] = 'icl'
- env['LINK'] = 'xilink'
- else:
- env['CC'] = 'icc'
- env['CXX'] = 'icpc'
- # Don't reset LINK here;
- # use smart_link which should already be here from link.py.
- #env['LINK'] = '$CC'
- env['AR'] = 'xiar'
- env['LD'] = 'xild' # not used by default
-
- # This is not the exact (detailed) compiler version,
- # just the major version as determined above or specified
- # by the user. It is a float like 80 or 90, in normalized form for Linux
- # (i.e. even for Linux 9.0 compiler, still returns 90 rather than 9.0)
- if version:
- env['INTEL_C_COMPILER_VERSION']=linux_ver_normalize(version)
-
- if is_windows:
- # Look for license file dir
- # in system environment, registry, and default location.
- envlicdir = os.environ.get("INTEL_LICENSE_FILE", '')
- K = ('SOFTWARE\Intel\Licenses')
- try:
- k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, K)
- reglicdir = SCons.Util.RegQueryValueEx(k, "w_cpp")[0]
- except (AttributeError, SCons.Util.RegError):
- reglicdir = ""
- defaultlicdir = r'C:\Program Files\Common Files\Intel\Licenses'
-
- licdir = None
- for ld in [envlicdir, reglicdir]:
- # If the string contains an '@', then assume it's a network
- # license (port@system) and good by definition.
- if ld and (string.find(ld, '@') != -1 or os.path.exists(ld)):
- licdir = ld
- break
- if not licdir:
- licdir = defaultlicdir
- if not os.path.exists(licdir):
- class ICLLicenseDirWarning(SCons.Warnings.Warning):
- pass
- SCons.Warnings.enableWarningClass(ICLLicenseDirWarning)
- SCons.Warnings.warn(ICLLicenseDirWarning,
- "Intel license dir was not found."
- " Tried using the INTEL_LICENSE_FILE environment variable (%s), the registry (%s) and the default path (%s)."
- " Using the default path as a last resort."
- % (envlicdir, reglicdir, defaultlicdir))
- env['ENV']['INTEL_LICENSE_FILE'] = licdir
-
-def exists(env):
- if not (is_mac or is_linux or is_windows):
- # can't handle this platform
- return 0
-
- try:
- versions = get_all_compiler_versions()
- except (SCons.Util.RegError, IntelCError):
- versions = None
- detected = versions is not None and len(versions) > 0
- if not detected:
- # try env.Detect, maybe that will work
- if is_windows:
- return env.Detect('icl')
- elif is_linux:
- return env.Detect('icc')
- elif is_mac:
- return env.Detect('icc')
- return detected
-
-# end of file
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/jar.py b/3rdParty/SCons/scons-local/SCons/Tool/jar.py
deleted file mode 100644
index ddd5f66..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/jar.py
+++ /dev/null
@@ -1,110 +0,0 @@
-"""SCons.Tool.jar
-
-Tool-specific initialization for jar.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/jar.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Subst
-import SCons.Util
-
-def jarSources(target, source, env, for_signature):
- """Only include sources that are not a manifest file."""
- try:
- env['JARCHDIR']
- except KeyError:
- jarchdir_set = False
- else:
- jarchdir_set = True
- jarchdir = env.subst('$JARCHDIR', target=target, source=source)
- if jarchdir:
- jarchdir = env.fs.Dir(jarchdir)
- result = []
- for src in source:
- contents = src.get_text_contents()
- if contents[:16] != "Manifest-Version":
- if jarchdir_set:
- _chdir = jarchdir
- else:
- try:
- _chdir = src.attributes.java_classdir
- except AttributeError:
- _chdir = None
- if _chdir:
- # If we are changing the dir with -C, then sources should
- # be relative to that directory.
- src = SCons.Subst.Literal(src.get_path(_chdir))
- result.append('-C')
- result.append(_chdir)
- result.append(src)
- return result
-
-def jarManifest(target, source, env, for_signature):
- """Look in sources for a manifest file, if any."""
- for src in source:
- contents = src.get_text_contents()
- if contents[:16] == "Manifest-Version":
- return src
- return ''
-
-def jarFlags(target, source, env, for_signature):
- """If we have a manifest, make sure that the 'm'
- flag is specified."""
- jarflags = env.subst('$JARFLAGS', target=target, source=source)
- for src in source:
- contents = src.get_text_contents()
- if contents[:16] == "Manifest-Version":
- if not 'm' in jarflags:
- return jarflags + 'm'
- break
- return jarflags
-
-def generate(env):
- """Add Builders and construction variables for jar to an Environment."""
- SCons.Tool.CreateJarBuilder(env)
-
- env['JAR'] = 'jar'
- env['JARFLAGS'] = SCons.Util.CLVar('cf')
- env['_JARFLAGS'] = jarFlags
- env['_JARMANIFEST'] = jarManifest
- env['_JARSOURCES'] = jarSources
- env['_JARCOM'] = '$JAR $_JARFLAGS $TARGET $_JARMANIFEST $_JARSOURCES'
- env['JARCOM'] = "${TEMPFILE('$_JARCOM')}"
- env['JARSUFFIX'] = '.jar'
-
-def exists(env):
- return env.Detect('jar')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/javac.py b/3rdParty/SCons/scons-local/SCons/Tool/javac.py
deleted file mode 100644
index f528ca2..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/javac.py
+++ /dev/null
@@ -1,234 +0,0 @@
-"""SCons.Tool.javac
-
-Tool-specific initialization for javac.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/javac.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-import string
-
-import SCons.Action
-import SCons.Builder
-from SCons.Node.FS import _my_normcase
-from SCons.Tool.JavaCommon import parse_java_file
-import SCons.Util
-
-def classname(path):
- """Turn a string (path name) into a Java class name."""
- return string.replace(os.path.normpath(path), os.sep, '.')
-
-def emit_java_classes(target, source, env):
- """Create and return lists of source java files
- and their corresponding target class files.
- """
- java_suffix = env.get('JAVASUFFIX', '.java')
- class_suffix = env.get('JAVACLASSSUFFIX', '.class')
-
- target[0].must_be_same(SCons.Node.FS.Dir)
- classdir = target[0]
-
- s = source[0].rentry().disambiguate()
- if isinstance(s, SCons.Node.FS.File):
- sourcedir = s.dir.rdir()
- elif isinstance(s, SCons.Node.FS.Dir):
- sourcedir = s.rdir()
- else:
- raise SCons.Errors.UserError("Java source must be File or Dir, not '%s'" % s.__class__)
-
- slist = []
- js = _my_normcase(java_suffix)
- find_java = lambda n, js=js, ljs=len(js): _my_normcase(n[-ljs:]) == js
- for entry in source:
- entry = entry.rentry().disambiguate()
- if isinstance(entry, SCons.Node.FS.File):
- slist.append(entry)
- elif isinstance(entry, SCons.Node.FS.Dir):
- result = SCons.Util.OrderedDict()
- def visit(arg, dirname, names, fj=find_java, dirnode=entry.rdir()):
- java_files = filter(fj, names)
- # The on-disk entries come back in arbitrary order. Sort
- # them so our target and source lists are determinate.
- java_files.sort()
- mydir = dirnode.Dir(dirname)
- java_paths = map(lambda f, d=mydir: d.File(f), java_files)
- for jp in java_paths:
- arg[jp] = True
-
- os.path.walk(entry.rdir().get_abspath(), visit, result)
- entry.walk(visit, result)
-
- slist.extend(result.keys())
- else:
- raise SCons.Errors.UserError("Java source must be File or Dir, not '%s'" % entry.__class__)
-
- version = env.get('JAVAVERSION', '1.4')
- full_tlist = []
- for f in slist:
- tlist = []
- source_file_based = True
- pkg_dir = None
- if not f.is_derived():
- pkg_dir, classes = parse_java_file(f.rfile().get_abspath(), version)
- if classes:
- source_file_based = False
- if pkg_dir:
- d = target[0].Dir(pkg_dir)
- p = pkg_dir + os.sep
- else:
- d = target[0]
- p = ''
- for c in classes:
- t = d.File(c + class_suffix)
- t.attributes.java_classdir = classdir
- t.attributes.java_sourcedir = sourcedir
- t.attributes.java_classname = classname(p + c)
- tlist.append(t)
-
- if source_file_based:
- base = f.name[:-len(java_suffix)]
- if pkg_dir:
- t = target[0].Dir(pkg_dir).File(base + class_suffix)
- else:
- t = target[0].File(base + class_suffix)
- t.attributes.java_classdir = classdir
- t.attributes.java_sourcedir = f.dir
- t.attributes.java_classname = classname(base)
- tlist.append(t)
-
- for t in tlist:
- t.set_specific_source([f])
-
- full_tlist.extend(tlist)
-
- return full_tlist, slist
-
-JavaAction = SCons.Action.Action('$JAVACCOM', '$JAVACCOMSTR')
-
-JavaBuilder = SCons.Builder.Builder(action = JavaAction,
- emitter = emit_java_classes,
- target_factory = SCons.Node.FS.Entry,
- source_factory = SCons.Node.FS.Entry)
-
-class pathopt:
- """
- Callable object for generating javac-style path options from
- a construction variable (e.g. -classpath, -sourcepath).
- """
- def __init__(self, opt, var, default=None):
- self.opt = opt
- self.var = var
- self.default = default
-
- def __call__(self, target, source, env, for_signature):
- path = env[self.var]
- if path and not SCons.Util.is_List(path):
- path = [path]
- if self.default:
- path = path + [ env[self.default] ]
- if path:
- return [self.opt, string.join(path, os.pathsep)]
- #return self.opt + " " + string.join(path, os.pathsep)
- else:
- return []
- #return ""
-
-def Java(env, target, source, *args, **kw):
- """
- A pseudo-Builder wrapper around the separate JavaClass{File,Dir}
- Builders.
- """
- if not SCons.Util.is_List(target):
- target = [target]
- if not SCons.Util.is_List(source):
- source = [source]
-
- # Pad the target list with repetitions of the last element in the
- # list so we have a target for every source element.
- target = target + ([target[-1]] * (len(source) - len(target)))
-
- java_suffix = env.subst('$JAVASUFFIX')
- result = []
-
- for t, s in zip(target, source):
- if isinstance(s, SCons.Node.FS.Base):
- if isinstance(s, SCons.Node.FS.File):
- b = env.JavaClassFile
- else:
- b = env.JavaClassDir
- else:
- if os.path.isfile(s):
- b = env.JavaClassFile
- elif os.path.isdir(s):
- b = env.JavaClassDir
- elif s[-len(java_suffix):] == java_suffix:
- b = env.JavaClassFile
- else:
- b = env.JavaClassDir
- result.extend(apply(b, (t, s) + args, kw))
-
- return result
-
-def generate(env):
- """Add Builders and construction variables for javac to an Environment."""
- java_file = SCons.Tool.CreateJavaFileBuilder(env)
- java_class = SCons.Tool.CreateJavaClassFileBuilder(env)
- java_class_dir = SCons.Tool.CreateJavaClassDirBuilder(env)
- java_class.add_emitter(None, emit_java_classes)
- java_class.add_emitter(env.subst('$JAVASUFFIX'), emit_java_classes)
- java_class_dir.emitter = emit_java_classes
-
- env.AddMethod(Java)
-
- env['JAVAC'] = 'javac'
- env['JAVACFLAGS'] = SCons.Util.CLVar('')
- env['JAVABOOTCLASSPATH'] = []
- env['JAVACLASSPATH'] = []
- env['JAVASOURCEPATH'] = []
- env['_javapathopt'] = pathopt
- env['_JAVABOOTCLASSPATH'] = '${_javapathopt("-bootclasspath", "JAVABOOTCLASSPATH")} '
- env['_JAVACLASSPATH'] = '${_javapathopt("-classpath", "JAVACLASSPATH")} '
- env['_JAVASOURCEPATH'] = '${_javapathopt("-sourcepath", "JAVASOURCEPATH", "_JAVASOURCEPATHDEFAULT")} '
- env['_JAVASOURCEPATHDEFAULT'] = '${TARGET.attributes.java_sourcedir}'
- env['_JAVACCOM'] = '$JAVAC $JAVACFLAGS $_JAVABOOTCLASSPATH $_JAVACLASSPATH -d ${TARGET.attributes.java_classdir} $_JAVASOURCEPATH $SOURCES'
- env['JAVACCOM'] = "${TEMPFILE('$_JAVACCOM')}"
- env['JAVACLASSSUFFIX'] = '.class'
- env['JAVASUFFIX'] = '.java'
-
-def exists(env):
- return 1
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/javah.py b/3rdParty/SCons/scons-local/SCons/Tool/javah.py
deleted file mode 100644
index dc18a08..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/javah.py
+++ /dev/null
@@ -1,138 +0,0 @@
-"""SCons.Tool.javah
-
-Tool-specific initialization for javah.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/javah.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import string
-
-import SCons.Action
-import SCons.Builder
-import SCons.Node.FS
-import SCons.Tool.javac
-import SCons.Util
-
-def emit_java_headers(target, source, env):
- """Create and return lists of Java stub header files that will
- be created from a set of class files.
- """
- class_suffix = env.get('JAVACLASSSUFFIX', '.class')
- classdir = env.get('JAVACLASSDIR')
-
- if not classdir:
- try:
- s = source[0]
- except IndexError:
- classdir = '.'
- else:
- try:
- classdir = s.attributes.java_classdir
- except AttributeError:
- classdir = '.'
- classdir = env.Dir(classdir).rdir()
-
- if str(classdir) == '.':
- c_ = None
- else:
- c_ = str(classdir) + os.sep
-
- slist = []
- for src in source:
- try:
- classname = src.attributes.java_classname
- except AttributeError:
- classname = str(src)
- if c_ and classname[:len(c_)] == c_:
- classname = classname[len(c_):]
- if class_suffix and classname[-len(class_suffix):] == class_suffix:
- classname = classname[:-len(class_suffix)]
- classname = SCons.Tool.javac.classname(classname)
- s = src.rfile()
- s.attributes.java_classname = classname
- slist.append(s)
-
- s = source[0].rfile()
- if not hasattr(s.attributes, 'java_classdir'):
- s.attributes.java_classdir = classdir
-
- if target[0].__class__ is SCons.Node.FS.File:
- tlist = target
- else:
- if not isinstance(target[0], SCons.Node.FS.Dir):
- target[0].__class__ = SCons.Node.FS.Dir
- target[0]._morph()
- tlist = []
- for s in source:
- fname = string.replace(s.attributes.java_classname, '.', '_') + '.h'
- t = target[0].File(fname)
- t.attributes.java_lookupdir = target[0]
- tlist.append(t)
-
- return tlist, source
-
-def JavaHOutFlagGenerator(target, source, env, for_signature):
- try:
- t = target[0]
- except (AttributeError, IndexError, TypeError):
- t = target
- try:
- return '-d ' + str(t.attributes.java_lookupdir)
- except AttributeError:
- return '-o ' + str(t)
-
-def getJavaHClassPath(env,target, source, for_signature):
- path = "${SOURCE.attributes.java_classdir}"
- if env.has_key('JAVACLASSPATH') and env['JAVACLASSPATH']:
- path = SCons.Util.AppendPath(path, env['JAVACLASSPATH'])
- return "-classpath %s" % (path)
-
-def generate(env):
- """Add Builders and construction variables for javah to an Environment."""
- java_javah = SCons.Tool.CreateJavaHBuilder(env)
- java_javah.emitter = emit_java_headers
-
- env['_JAVAHOUTFLAG'] = JavaHOutFlagGenerator
- env['JAVAH'] = 'javah'
- env['JAVAHFLAGS'] = SCons.Util.CLVar('')
- env['_JAVAHCLASSPATH'] = getJavaHClassPath
- env['JAVAHCOM'] = '$JAVAH $JAVAHFLAGS $_JAVAHOUTFLAG $_JAVAHCLASSPATH ${SOURCES.attributes.java_classname}'
- env['JAVACLASSSUFFIX'] = '.class'
-
-def exists(env):
- return env.Detect('javah')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/latex.py b/3rdParty/SCons/scons-local/SCons/Tool/latex.py
deleted file mode 100644
index 310f1ab..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/latex.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""SCons.Tool.latex
-
-Tool-specific initialization for LaTeX.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/latex.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Defaults
-import SCons.Scanner.LaTeX
-import SCons.Util
-import SCons.Tool
-import SCons.Tool.tex
-
-LaTeXAction = None
-
-def LaTeXAuxFunction(target = None, source= None, env=None):
- result = SCons.Tool.tex.InternalLaTeXAuxAction( LaTeXAction, target, source, env )
- return result
-
-LaTeXAuxAction = SCons.Action.Action(LaTeXAuxFunction,
- strfunction=SCons.Tool.tex.TeXLaTeXStrFunction)
-
-def generate(env):
- """Add Builders and construction variables for LaTeX to an Environment."""
- global LaTeXAction
- if LaTeXAction is None:
- LaTeXAction = SCons.Action.Action('$LATEXCOM', '$LATEXCOMSTR')
-
- import dvi
- dvi.generate(env)
-
- import pdf
- pdf.generate(env)
-
- bld = env['BUILDERS']['DVI']
- bld.add_action('.ltx', LaTeXAuxAction)
- bld.add_action('.latex', LaTeXAuxAction)
- bld.add_emitter('.ltx', SCons.Tool.tex.tex_eps_emitter)
- bld.add_emitter('.latex', SCons.Tool.tex.tex_eps_emitter)
-
- env['LATEX'] = 'latex'
- env['LATEXFLAGS'] = SCons.Util.CLVar('-interaction=nonstopmode')
- env['LATEXCOM'] = 'cd ${TARGET.dir} && $LATEX $LATEXFLAGS ${SOURCE.file}'
- env['LATEXRETRIES'] = 3
-
-def exists(env):
- return env.Detect('latex')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/lex.py b/3rdParty/SCons/scons-local/SCons/Tool/lex.py
deleted file mode 100644
index 656d5a6..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/lex.py
+++ /dev/null
@@ -1,99 +0,0 @@
-"""SCons.Tool.lex
-
-Tool-specific initialization for lex.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/lex.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-
-import string
-
-import SCons.Action
-import SCons.Tool
-import SCons.Util
-
-LexAction = SCons.Action.Action("$LEXCOM", "$LEXCOMSTR")
-
-def lexEmitter(target, source, env):
- sourceBase, sourceExt = os.path.splitext(SCons.Util.to_String(source[0]))
-
- if sourceExt == ".lm": # If using Objective-C
- target = [sourceBase + ".m"] # the extension is ".m".
-
- # This emitter essentially tries to add to the target all extra
- # files generated by flex.
-
- # Different options that are used to trigger the creation of extra files.
- fileGenOptions = ["--header-file=", "--tables-file="]
-
- lexflags = env.subst("$LEXFLAGS", target=target, source=source)
- for option in SCons.Util.CLVar(lexflags):
- for fileGenOption in fileGenOptions:
- l = len(fileGenOption)
- if option[:l] == fileGenOption:
- # A file generating option is present, so add the
- # file name to the target list.
- fileName = string.strip(option[l:])
- target.append(fileName)
- return (target, source)
-
-def generate(env):
- """Add Builders and construction variables for lex to an Environment."""
- c_file, cxx_file = SCons.Tool.createCFileBuilders(env)
-
- # C
- c_file.add_action(".l", LexAction)
- c_file.add_emitter(".l", lexEmitter)
-
- c_file.add_action(".lex", LexAction)
- c_file.add_emitter(".lex", lexEmitter)
-
- # Objective-C
- cxx_file.add_action(".lm", LexAction)
- cxx_file.add_emitter(".lm", lexEmitter)
-
- # C++
- cxx_file.add_action(".ll", LexAction)
- cxx_file.add_emitter(".ll", lexEmitter)
-
- env["LEX"] = env.Detect("flex") or "lex"
- env["LEXFLAGS"] = SCons.Util.CLVar("")
- env["LEXCOM"] = "$LEX $LEXFLAGS -t $SOURCES > $TARGET"
-
-def exists(env):
- return env.Detect(["flex", "lex"])
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/link.py b/3rdParty/SCons/scons-local/SCons/Tool/link.py
deleted file mode 100644
index 8192637..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/link.py
+++ /dev/null
@@ -1,121 +0,0 @@
-"""SCons.Tool.link
-
-Tool-specific initialization for the generic Posix linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/link.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-import SCons.Warnings
-
-from SCons.Tool.FortranCommon import isfortran
-
-cplusplus = __import__('c++', globals(), locals(), [])
-
-issued_mixed_link_warning = False
-
-def smart_link(source, target, env, for_signature):
- has_cplusplus = cplusplus.iscplusplus(source)
- has_fortran = isfortran(env, source)
- if has_cplusplus and has_fortran:
- global issued_mixed_link_warning
- if not issued_mixed_link_warning:
- msg = "Using $CXX to link Fortran and C++ code together.\n\t" + \
- "This may generate a buggy executable if the '%s'\n\t" + \
- "compiler does not know how to deal with Fortran runtimes."
- SCons.Warnings.warn(SCons.Warnings.FortranCxxMixWarning,
- msg % env.subst('$CXX'))
- issued_mixed_link_warning = True
- return '$CXX'
- elif has_fortran:
- return '$FORTRAN'
- elif has_cplusplus:
- return '$CXX'
- return '$CC'
-
-def shlib_emitter(target, source, env):
- for tgt in target:
- tgt.attributes.shared = 1
- return (target, source)
-
-def generate(env):
- """Add Builders and construction variables for gnulink to an Environment."""
- SCons.Tool.createSharedLibBuilder(env)
- SCons.Tool.createProgBuilder(env)
-
- env['SHLINK'] = '$LINK'
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -shared')
- env['SHLINKCOM'] = '$SHLINK -o $TARGET $SHLINKFLAGS $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
- # don't set up the emitter, cause AppendUnique will generate a list
- # starting with None :-(
- env.Append(SHLIBEMITTER = [shlib_emitter])
- env['SMARTLINK'] = smart_link
- env['LINK'] = "$SMARTLINK"
- env['LINKFLAGS'] = SCons.Util.CLVar('')
- env['LINKCOM'] = '$LINK -o $TARGET $LINKFLAGS $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
- env['LIBDIRPREFIX']='-L'
- env['LIBDIRSUFFIX']=''
- env['_LIBFLAGS']='${_stripixes(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__)}'
- env['LIBLINKPREFIX']='-l'
- env['LIBLINKSUFFIX']=''
-
- if env['PLATFORM'] == 'hpux':
- env['SHLIBSUFFIX'] = '.sl'
- elif env['PLATFORM'] == 'aix':
- env['SHLIBSUFFIX'] = '.a'
-
- # For most platforms, a loadable module is the same as a shared
- # library. Platforms which are different can override these, but
- # setting them the same means that LoadableModule works everywhere.
- SCons.Tool.createLoadableModuleBuilder(env)
- env['LDMODULE'] = '$SHLINK'
- # don't set up the emitter, cause AppendUnique will generate a list
- # starting with None :-(
- env.Append(LDMODULEEMITTER='$SHLIBEMITTER')
- env['LDMODULEPREFIX'] = '$SHLIBPREFIX'
- env['LDMODULESUFFIX'] = '$SHLIBSUFFIX'
- env['LDMODULEFLAGS'] = '$SHLINKFLAGS'
- env['LDMODULECOM'] = '$LDMODULE -o $TARGET $LDMODULEFLAGS $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
-
-
-
-def exists(env):
- # This module isn't really a Tool on its own, it's common logic for
- # other linkers.
- return None
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/linkloc.py b/3rdParty/SCons/scons-local/SCons/Tool/linkloc.py
deleted file mode 100644
index 7fd3a3b..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/linkloc.py
+++ /dev/null
@@ -1,112 +0,0 @@
-"""SCons.Tool.linkloc
-
-Tool specification for the LinkLoc linker for the Phar Lap ETS embedded
-operating system.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/linkloc.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import re
-
-import SCons.Action
-import SCons.Defaults
-import SCons.Errors
-import SCons.Tool
-import SCons.Util
-
-from SCons.Tool.MSCommon import detect_msvs, merge_default_version
-from SCons.Tool.PharLapCommon import addPharLapPaths
-
-_re_linker_command = re.compile(r'(\s)@\s*([^\s]+)')
-
-def repl_linker_command(m):
- # Replaces any linker command file directives (e.g. "@foo.lnk") with
- # the actual contents of the file.
- try:
- f=open(m.group(2), "r")
- return m.group(1) + f.read()
- except IOError:
- # the linker should return an error if it can't
- # find the linker command file so we will remain quiet.
- # However, we will replace the @ with a # so we will not continue
- # to find it with recursive substitution
- return m.group(1) + '#' + m.group(2)
-
-class LinklocGenerator:
- def __init__(self, cmdline):
- self.cmdline = cmdline
-
- def __call__(self, env, target, source, for_signature):
- if for_signature:
- # Expand the contents of any linker command files recursively
- subs = 1
- strsub = env.subst(self.cmdline, target=target, source=source)
- while subs:
- strsub, subs = _re_linker_command.subn(repl_linker_command, strsub)
- return strsub
- else:
- return "${TEMPFILE('" + self.cmdline + "')}"
-
-def generate(env):
- """Add Builders and construction variables for ar to an Environment."""
- SCons.Tool.createSharedLibBuilder(env)
- SCons.Tool.createProgBuilder(env)
-
- env['SUBST_CMD_FILE'] = LinklocGenerator
- env['SHLINK'] = '$LINK'
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS')
- env['SHLINKCOM'] = '${SUBST_CMD_FILE("$SHLINK $SHLINKFLAGS $_LIBDIRFLAGS $_LIBFLAGS -dll $TARGET $SOURCES")}'
- env['SHLIBEMITTER']= None
- env['LINK'] = "linkloc"
- env['LINKFLAGS'] = SCons.Util.CLVar('')
- env['LINKCOM'] = '${SUBST_CMD_FILE("$LINK $LINKFLAGS $_LIBDIRFLAGS $_LIBFLAGS -exe $TARGET $SOURCES")}'
- env['LIBDIRPREFIX']='-libpath '
- env['LIBDIRSUFFIX']=''
- env['LIBLINKPREFIX']='-lib '
- env['LIBLINKSUFFIX']='$LIBSUFFIX'
-
- # Set-up ms tools paths for default version
- merge_default_version(env)
-
- addPharLapPaths(env)
-
-def exists(env):
- if detect_msvs():
- return env.Detect('linkloc')
- else:
- return 0
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/m4.py b/3rdParty/SCons/scons-local/SCons/Tool/m4.py
deleted file mode 100644
index 1ce3eac..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/m4.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""SCons.Tool.m4
-
-Tool-specific initialization for m4.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/m4.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Builder
-import SCons.Util
-
-def generate(env):
- """Add Builders and construction variables for m4 to an Environment."""
- M4Action = SCons.Action.Action('$M4COM', '$M4COMSTR')
- bld = SCons.Builder.Builder(action = M4Action, src_suffix = '.m4')
-
- env['BUILDERS']['M4'] = bld
-
- # .m4 files might include other files, and it would be pretty hard
- # to write a scanner for it, so let's just cd to the dir of the m4
- # file and run from there.
- # The src_suffix setup is like so: file.c.m4 -> file.c,
- # file.cpp.m4 -> file.cpp etc.
- env['M4'] = 'm4'
- env['M4FLAGS'] = SCons.Util.CLVar('-E')
- env['M4COM'] = 'cd ${SOURCE.rsrcdir} && $M4 $M4FLAGS < ${SOURCE.file} > ${TARGET.abspath}'
-
-def exists(env):
- return env.Detect('m4')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/masm.py b/3rdParty/SCons/scons-local/SCons/Tool/masm.py
deleted file mode 100644
index b22a514..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/masm.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""SCons.Tool.masm
-
-Tool-specific initialization for the Microsoft Assembler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/masm.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-ASSuffixes = ['.s', '.asm', '.ASM']
-ASPPSuffixes = ['.spp', '.SPP', '.sx']
-if SCons.Util.case_sensitive_suffixes('.s', '.S'):
- ASPPSuffixes.extend(['.S'])
-else:
- ASSuffixes.extend(['.S'])
-
-def generate(env):
- """Add Builders and construction variables for masm to an Environment."""
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- for suffix in ASSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.ASAction)
- shared_obj.add_action(suffix, SCons.Defaults.ASAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
- shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
-
- for suffix in ASPPSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.ASPPAction)
- shared_obj.add_action(suffix, SCons.Defaults.ASPPAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
- shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
-
- env['AS'] = 'ml'
- env['ASFLAGS'] = SCons.Util.CLVar('/nologo')
- env['ASPPFLAGS'] = '$ASFLAGS'
- env['ASCOM'] = '$AS $ASFLAGS /c /Fo$TARGET $SOURCES'
- env['ASPPCOM'] = '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c /Fo$TARGET $SOURCES'
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
-
-def exists(env):
- return env.Detect('ml')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/midl.py b/3rdParty/SCons/scons-local/SCons/Tool/midl.py
deleted file mode 100644
index 4c69358..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/midl.py
+++ /dev/null
@@ -1,90 +0,0 @@
-"""SCons.Tool.midl
-
-Tool-specific initialization for midl (Microsoft IDL compiler).
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/midl.py 4043 2009/02/23 09:06:45 scons"
-
-import string
-
-import SCons.Action
-import SCons.Builder
-import SCons.Defaults
-import SCons.Scanner.IDL
-import SCons.Util
-
-from MSCommon import detect_msvs
-
-def midl_emitter(target, source, env):
- """Produces a list of outputs from the MIDL compiler"""
- base, ext = SCons.Util.splitext(str(target[0]))
- tlb = target[0]
- incl = base + '.h'
- interface = base + '_i.c'
- t = [tlb, incl, interface]
-
- midlcom = env['MIDLCOM']
-
- if string.find(midlcom, '/proxy') != -1:
- proxy = base + '_p.c'
- t.append(proxy)
- if string.find(midlcom, '/dlldata') != -1:
- dlldata = base + '_data.c'
- t.append(dlldata)
-
- return (t,source)
-
-idl_scanner = SCons.Scanner.IDL.IDLScan()
-
-midl_action = SCons.Action.Action('$MIDLCOM', '$MIDLCOMSTR')
-
-midl_builder = SCons.Builder.Builder(action = midl_action,
- src_suffix = '.idl',
- suffix='.tlb',
- emitter = midl_emitter,
- source_scanner = idl_scanner)
-
-def generate(env):
- """Add Builders and construction variables for midl to an Environment."""
-
- env['MIDL'] = 'MIDL.EXE'
- env['MIDLFLAGS'] = SCons.Util.CLVar('/nologo')
- env['MIDLCOM'] = '$MIDL $MIDLFLAGS /tlb ${TARGETS[0]} /h ${TARGETS[1]} /iid ${TARGETS[2]} /proxy ${TARGETS[3]} /dlldata ${TARGETS[4]} $SOURCE 2> NUL'
- env['BUILDERS']['TypeLibrary'] = midl_builder
-
-def exists(env):
- return detect_msvs()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/mingw.py b/3rdParty/SCons/scons-local/SCons/Tool/mingw.py
deleted file mode 100644
index aab45bb..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/mingw.py
+++ /dev/null
@@ -1,159 +0,0 @@
-"""SCons.Tool.gcc
-
-Tool-specific initialization for MinGW (http://www.mingw.org/)
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/mingw.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-import string
-
-import SCons.Action
-import SCons.Builder
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-# This is what we search for to find mingw:
-key_program = 'mingw32-gcc'
-
-def find(env):
- # First search in the SCons path and then the OS path:
- return env.WhereIs(key_program) or SCons.Util.WhereIs(key_program)
-
-def shlib_generator(target, source, env, for_signature):
- cmd = SCons.Util.CLVar(['$SHLINK', '$SHLINKFLAGS'])
-
- dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX')
- if dll: cmd.extend(['-o', dll])
-
- cmd.extend(['$SOURCES', '$_LIBDIRFLAGS', '$_LIBFLAGS'])
-
- implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX')
- if implib: cmd.append('-Wl,--out-implib,'+implib.get_string(for_signature))
-
- def_target = env.FindIxes(target, 'WINDOWSDEFPREFIX', 'WINDOWSDEFSUFFIX')
- insert_def = env.subst("$WINDOWS_INSERT_DEF")
- if not insert_def in ['', '0', 0] and def_target: \
- cmd.append('-Wl,--output-def,'+def_target.get_string(for_signature))
-
- return [cmd]
-
-def shlib_emitter(target, source, env):
- dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX')
- no_import_lib = env.get('no_import_lib', 0)
-
- if not dll:
- raise SCons.Errors.UserError, "A shared library should have exactly one target with the suffix: %s" % env.subst("$SHLIBSUFFIX")
-
- if not no_import_lib and \
- not env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX'):
-
- # Append an import library to the list of targets.
- target.append(env.ReplaceIxes(dll,
- 'SHLIBPREFIX', 'SHLIBSUFFIX',
- 'LIBPREFIX', 'LIBSUFFIX'))
-
- # Append a def file target if there isn't already a def file target
- # or a def file source. There is no option to disable def file
- # target emitting, because I can't figure out why someone would ever
- # want to turn it off.
- def_source = env.FindIxes(source, 'WINDOWSDEFPREFIX', 'WINDOWSDEFSUFFIX')
- def_target = env.FindIxes(target, 'WINDOWSDEFPREFIX', 'WINDOWSDEFSUFFIX')
- if not def_source and not def_target:
- target.append(env.ReplaceIxes(dll,
- 'SHLIBPREFIX', 'SHLIBSUFFIX',
- 'WINDOWSDEFPREFIX', 'WINDOWSDEFSUFFIX'))
-
- return (target, source)
-
-
-shlib_action = SCons.Action.Action(shlib_generator, generator=1)
-
-res_action = SCons.Action.Action('$RCCOM', '$RCCOMSTR')
-
-res_builder = SCons.Builder.Builder(action=res_action, suffix='.o',
- source_scanner=SCons.Tool.SourceFileScanner)
-SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan)
-
-def generate(env):
- mingw = find(env)
- if mingw:
- dir = os.path.dirname(mingw)
- env.PrependENVPath('PATH', dir )
-
-
- # Most of mingw is the same as gcc and friends...
- gnu_tools = ['gcc', 'g++', 'gnulink', 'ar', 'gas', 'm4']
- for tool in gnu_tools:
- SCons.Tool.Tool(tool)(env)
-
- #... but a few things differ:
- env['CC'] = 'gcc'
- env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS')
- env['CXX'] = 'g++'
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS')
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -shared')
- env['SHLINKCOM'] = shlib_action
- env['LDMODULECOM'] = shlib_action
- env.Append(SHLIBEMITTER = [shlib_emitter])
- env['AS'] = 'as'
-
- env['WIN32DEFPREFIX'] = ''
- env['WIN32DEFSUFFIX'] = '.def'
- env['WINDOWSDEFPREFIX'] = '${WIN32DEFPREFIX}'
- env['WINDOWSDEFSUFFIX'] = '${WIN32DEFSUFFIX}'
-
- env['SHOBJSUFFIX'] = '.o'
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
-
- env['RC'] = 'windres'
- env['RCFLAGS'] = SCons.Util.CLVar('')
- env['RCINCFLAGS'] = '$( ${_concat(RCINCPREFIX, CPPPATH, RCINCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
- env['RCINCPREFIX'] = '--include-dir '
- env['RCINCSUFFIX'] = ''
- env['RCCOM'] = '$RC $_CPPDEFFLAGS $RCINCFLAGS ${RCINCPREFIX} ${SOURCE.dir} $RCFLAGS -i $SOURCE -o $TARGET'
- env['BUILDERS']['RES'] = res_builder
-
- # Some setting from the platform also have to be overridden:
- env['OBJSUFFIX'] = '.o'
- env['LIBPREFIX'] = 'lib'
- env['LIBSUFFIX'] = '.a'
-
-def exists(env):
- return find(env)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/mslib.py b/3rdParty/SCons/scons-local/SCons/Tool/mslib.py
deleted file mode 100644
index f76ac9d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/mslib.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""SCons.Tool.mslib
-
-Tool-specific initialization for lib (MicroSoft library archiver).
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/mslib.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Tool.msvs
-import SCons.Tool.msvc
-import SCons.Util
-
-from MSCommon import detect_msvs, merge_default_version
-
-def generate(env):
- """Add Builders and construction variables for lib to an Environment."""
- SCons.Tool.createStaticLibBuilder(env)
-
- # Set-up ms tools paths for default version
- merge_default_version(env)
-
- env['AR'] = 'lib'
- env['ARFLAGS'] = SCons.Util.CLVar('/nologo')
- env['ARCOM'] = "${TEMPFILE('$AR $ARFLAGS /OUT:$TARGET $SOURCES')}"
- env['LIBPREFIX'] = ''
- env['LIBSUFFIX'] = '.lib'
-
-def exists(env):
- return detect_msvs()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/mslink.py b/3rdParty/SCons/scons-local/SCons/Tool/mslink.py
deleted file mode 100644
index 1bad3c9..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/mslink.py
+++ /dev/null
@@ -1,265 +0,0 @@
-"""SCons.Tool.mslink
-
-Tool-specific initialization for the Microsoft linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/mslink.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-
-import SCons.Action
-import SCons.Defaults
-import SCons.Errors
-import SCons.Platform.win32
-import SCons.Tool
-import SCons.Tool.msvc
-import SCons.Tool.msvs
-import SCons.Util
-
-from MSCommon import merge_default_version, detect_msvs
-
-def pdbGenerator(env, target, source, for_signature):
- try:
- return ['/PDB:%s' % target[0].attributes.pdb, '/DEBUG']
- except (AttributeError, IndexError):
- return None
-
-def _dllTargets(target, source, env, for_signature, paramtp):
- listCmd = []
- dll = env.FindIxes(target, '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp)
- if dll: listCmd.append("/out:%s"%dll.get_string(for_signature))
-
- implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX')
- if implib: listCmd.append("/implib:%s"%implib.get_string(for_signature))
-
- return listCmd
-
-def _dllSources(target, source, env, for_signature, paramtp):
- listCmd = []
-
- deffile = env.FindIxes(source, "WINDOWSDEFPREFIX", "WINDOWSDEFSUFFIX")
- for src in source:
- # Check explicitly for a non-None deffile so that the __cmp__
- # method of the base SCons.Util.Proxy class used for some Node
- # proxies doesn't try to use a non-existent __dict__ attribute.
- if deffile and src == deffile:
- # Treat this source as a .def file.
- listCmd.append("/def:%s" % src.get_string(for_signature))
- else:
- # Just treat it as a generic source file.
- listCmd.append(src)
- return listCmd
-
-def windowsShlinkTargets(target, source, env, for_signature):
- return _dllTargets(target, source, env, for_signature, 'SHLIB')
-
-def windowsShlinkSources(target, source, env, for_signature):
- return _dllSources(target, source, env, for_signature, 'SHLIB')
-
-def _windowsLdmodTargets(target, source, env, for_signature):
- """Get targets for loadable modules."""
- return _dllTargets(target, source, env, for_signature, 'LDMODULE')
-
-def _windowsLdmodSources(target, source, env, for_signature):
- """Get sources for loadable modules."""
- return _dllSources(target, source, env, for_signature, 'LDMODULE')
-
-def _dllEmitter(target, source, env, paramtp):
- """Common implementation of dll emitter."""
- SCons.Tool.msvc.validate_vars(env)
-
- extratargets = []
- extrasources = []
-
- dll = env.FindIxes(target, '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp)
- no_import_lib = env.get('no_import_lib', 0)
-
- if not dll:
- raise SCons.Errors.UserError, 'A shared library should have exactly one target with the suffix: %s' % env.subst('$%sSUFFIX' % paramtp)
-
- insert_def = env.subst("$WINDOWS_INSERT_DEF")
- if not insert_def in ['', '0', 0] and \
- not env.FindIxes(source, "WINDOWSDEFPREFIX", "WINDOWSDEFSUFFIX"):
-
- # append a def file to the list of sources
- extrasources.append(
- env.ReplaceIxes(dll,
- '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
- "WINDOWSDEFPREFIX", "WINDOWSDEFSUFFIX"))
-
- version_num, suite = SCons.Tool.msvs.msvs_parse_version(env.get('MSVS_VERSION', '6.0'))
- if version_num >= 8.0 and env.get('WINDOWS_INSERT_MANIFEST', 0):
- # MSVC 8 automatically generates .manifest files that must be installed
- extratargets.append(
- env.ReplaceIxes(dll,
- '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
- "WINDOWSSHLIBMANIFESTPREFIX", "WINDOWSSHLIBMANIFESTSUFFIX"))
-
- if env.has_key('PDB') and env['PDB']:
- pdb = env.arg2nodes('$PDB', target=target, source=source)[0]
- extratargets.append(pdb)
- target[0].attributes.pdb = pdb
-
- if not no_import_lib and \
- not env.FindIxes(target, "LIBPREFIX", "LIBSUFFIX"):
- # Append an import library to the list of targets.
- extratargets.append(
- env.ReplaceIxes(dll,
- '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
- "LIBPREFIX", "LIBSUFFIX"))
- # and .exp file is created if there are exports from a DLL
- extratargets.append(
- env.ReplaceIxes(dll,
- '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
- "WINDOWSEXPPREFIX", "WINDOWSEXPSUFFIX"))
-
- return (target+extratargets, source+extrasources)
-
-def windowsLibEmitter(target, source, env):
- return _dllEmitter(target, source, env, 'SHLIB')
-
-def ldmodEmitter(target, source, env):
- """Emitter for loadable modules.
-
- Loadable modules are identical to shared libraries on Windows, but building
- them is subject to different parameters (LDMODULE*).
- """
- return _dllEmitter(target, source, env, 'LDMODULE')
-
-def prog_emitter(target, source, env):
- SCons.Tool.msvc.validate_vars(env)
-
- extratargets = []
-
- exe = env.FindIxes(target, "PROGPREFIX", "PROGSUFFIX")
- if not exe:
- raise SCons.Errors.UserError, "An executable should have exactly one target with the suffix: %s" % env.subst("$PROGSUFFIX")
-
- version_num, suite = SCons.Tool.msvs.msvs_parse_version(env.get('MSVS_VERSION', '6.0'))
- if version_num >= 8.0 and env.get('WINDOWS_INSERT_MANIFEST', 0):
- # MSVC 8 automatically generates .manifest files that have to be installed
- extratargets.append(
- env.ReplaceIxes(exe,
- "PROGPREFIX", "PROGSUFFIX",
- "WINDOWSPROGMANIFESTPREFIX", "WINDOWSPROGMANIFESTSUFFIX"))
-
- if env.has_key('PDB') and env['PDB']:
- pdb = env.arg2nodes('$PDB', target=target, source=source)[0]
- extratargets.append(pdb)
- target[0].attributes.pdb = pdb
-
- return (target+extratargets,source)
-
-def RegServerFunc(target, source, env):
- if env.has_key('register') and env['register']:
- ret = regServerAction([target[0]], [source[0]], env)
- if ret:
- raise SCons.Errors.UserError, "Unable to register %s" % target[0]
- else:
- print "Registered %s sucessfully" % target[0]
- return ret
- return 0
-
-regServerAction = SCons.Action.Action("$REGSVRCOM", "$REGSVRCOMSTR")
-regServerCheck = SCons.Action.Action(RegServerFunc, None)
-shlibLinkAction = SCons.Action.Action('${TEMPFILE("$SHLINK $SHLINKFLAGS $_SHLINK_TARGETS $_LIBDIRFLAGS $_LIBFLAGS $_PDB $_SHLINK_SOURCES")}')
-compositeShLinkAction = shlibLinkAction + regServerCheck
-ldmodLinkAction = SCons.Action.Action('${TEMPFILE("$LDMODULE $LDMODULEFLAGS $_LDMODULE_TARGETS $_LIBDIRFLAGS $_LIBFLAGS $_PDB $_LDMODULE_SOURCES")}')
-compositeLdmodAction = ldmodLinkAction + regServerCheck
-
-def generate(env):
- """Add Builders and construction variables for ar to an Environment."""
- SCons.Tool.createSharedLibBuilder(env)
- SCons.Tool.createProgBuilder(env)
-
- env['SHLINK'] = '$LINK'
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS /dll')
- env['_SHLINK_TARGETS'] = windowsShlinkTargets
- env['_SHLINK_SOURCES'] = windowsShlinkSources
- env['SHLINKCOM'] = compositeShLinkAction
- env.Append(SHLIBEMITTER = [windowsLibEmitter])
- env['LINK'] = 'link'
- env['LINKFLAGS'] = SCons.Util.CLVar('/nologo')
- env['_PDB'] = pdbGenerator
- env['LINKCOM'] = '${TEMPFILE("$LINK $LINKFLAGS /OUT:$TARGET.windows $_LIBDIRFLAGS $_LIBFLAGS $_PDB $SOURCES.windows")}'
- env.Append(PROGEMITTER = [prog_emitter])
- env['LIBDIRPREFIX']='/LIBPATH:'
- env['LIBDIRSUFFIX']=''
- env['LIBLINKPREFIX']=''
- env['LIBLINKSUFFIX']='$LIBSUFFIX'
-
- env['WIN32DEFPREFIX'] = ''
- env['WIN32DEFSUFFIX'] = '.def'
- env['WIN32_INSERT_DEF'] = 0
- env['WINDOWSDEFPREFIX'] = '${WIN32DEFPREFIX}'
- env['WINDOWSDEFSUFFIX'] = '${WIN32DEFSUFFIX}'
- env['WINDOWS_INSERT_DEF'] = '${WIN32_INSERT_DEF}'
-
- env['WIN32EXPPREFIX'] = ''
- env['WIN32EXPSUFFIX'] = '.exp'
- env['WINDOWSEXPPREFIX'] = '${WIN32EXPPREFIX}'
- env['WINDOWSEXPSUFFIX'] = '${WIN32EXPSUFFIX}'
-
- env['WINDOWSSHLIBMANIFESTPREFIX'] = ''
- env['WINDOWSSHLIBMANIFESTSUFFIX'] = '${SHLIBSUFFIX}.manifest'
- env['WINDOWSPROGMANIFESTPREFIX'] = ''
- env['WINDOWSPROGMANIFESTSUFFIX'] = '${PROGSUFFIX}.manifest'
-
- env['REGSVRACTION'] = regServerCheck
- env['REGSVR'] = os.path.join(SCons.Platform.win32.get_system_root(),'System32','regsvr32')
- env['REGSVRFLAGS'] = '/s '
- env['REGSVRCOM'] = '$REGSVR $REGSVRFLAGS ${TARGET.windows}'
-
- # Set-up ms tools paths for default version
- merge_default_version(env)
-
- # Loadable modules are on Windows the same as shared libraries, but they
- # are subject to different build parameters (LDMODULE* variables).
- # Therefore LDMODULE* variables correspond as much as possible to
- # SHLINK*/SHLIB* ones.
- SCons.Tool.createLoadableModuleBuilder(env)
- env['LDMODULE'] = '$SHLINK'
- env['LDMODULEPREFIX'] = '$SHLIBPREFIX'
- env['LDMODULESUFFIX'] = '$SHLIBSUFFIX'
- env['LDMODULEFLAGS'] = '$SHLINKFLAGS'
- env['_LDMODULE_TARGETS'] = _windowsLdmodTargets
- env['_LDMODULE_SOURCES'] = _windowsLdmodSources
- env['LDMODULEEMITTER'] = [ldmodEmitter]
- env['LDMODULECOM'] = compositeLdmodAction
-
-def exists(env):
- return detect_msvs()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/mssdk.py b/3rdParty/SCons/scons-local/SCons/Tool/mssdk.py
deleted file mode 100644
index 4277d58..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/mssdk.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/mssdk.py 4043 2009/02/23 09:06:45 scons"
-
-"""engine.SCons.Tool.mssdk
-
-Tool-specific initialization for Microsoft SDKs, both Platform
-SDKs and Windows SDKs.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-from SCons.Tool.MSCommon.sdk import detect_sdk, \
- set_default_sdk, \
- set_sdk_by_directory, \
- set_sdk_by_version
-
-def generate(env):
- """Add construction variables for an MS SDK to an Environment."""
- if env.has_key('MSSDK_DIR'):
- set_sdk_by_directory(env, env.subst('$MSSDK_DIR'))
- return
-
- if env.has_key('MSSDK_VERSION'):
- set_sdk_by_version(env, env.subst('$MSSDK_VERSION'))
- return
-
- if env.has_key('MSVS_VERSION'):
- set_default_sdk(env, env['MSVS_VERSION'])
-
- #print "No MSVS_VERSION: this is likely to be a bug"
- return
-
-def exists(env):
- return detect_sdk()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/msvc.py b/3rdParty/SCons/scons-local/SCons/Tool/msvc.py
deleted file mode 100644
index bd29ed0..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/msvc.py
+++ /dev/null
@@ -1,260 +0,0 @@
-"""engine.SCons.Tool.msvc
-
-Tool-specific initialization for Microsoft Visual C/C++.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/msvc.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import re
-import string
-import sys
-
-import SCons.Action
-import SCons.Builder
-import SCons.Errors
-import SCons.Platform.win32
-import SCons.Tool
-import SCons.Tool.msvs
-import SCons.Util
-import SCons.Warnings
-import SCons.Scanner.RC
-
-from MSCommon import merge_default_version, detect_msvs
-
-CSuffixes = ['.c', '.C']
-CXXSuffixes = ['.cc', '.cpp', '.cxx', '.c++', '.C++']
-
-def validate_vars(env):
- """Validate the PCH and PCHSTOP construction variables."""
- if env.has_key('PCH') and env['PCH']:
- if not env.has_key('PCHSTOP'):
- raise SCons.Errors.UserError, "The PCHSTOP construction must be defined if PCH is defined."
- if not SCons.Util.is_String(env['PCHSTOP']):
- raise SCons.Errors.UserError, "The PCHSTOP construction variable must be a string: %r"%env['PCHSTOP']
-
-def pch_emitter(target, source, env):
- """Adds the object file target."""
-
- validate_vars(env)
-
- pch = None
- obj = None
-
- for t in target:
- if SCons.Util.splitext(str(t))[1] == '.pch':
- pch = t
- if SCons.Util.splitext(str(t))[1] == '.obj':
- obj = t
-
- if not obj:
- obj = SCons.Util.splitext(str(pch))[0]+'.obj'
-
- target = [pch, obj] # pch must be first, and obj second for the PCHCOM to work
-
- return (target, source)
-
-def object_emitter(target, source, env, parent_emitter):
- """Sets up the PCH dependencies for an object file."""
-
- validate_vars(env)
-
- parent_emitter(target, source, env)
-
- if env.has_key('PCH') and env['PCH']:
- env.Depends(target, env['PCH'])
-
- return (target, source)
-
-def static_object_emitter(target, source, env):
- return object_emitter(target, source, env,
- SCons.Defaults.StaticObjectEmitter)
-
-def shared_object_emitter(target, source, env):
- return object_emitter(target, source, env,
- SCons.Defaults.SharedObjectEmitter)
-
-pch_action = SCons.Action.Action('$PCHCOM', '$PCHCOMSTR')
-pch_builder = SCons.Builder.Builder(action=pch_action, suffix='.pch',
- emitter=pch_emitter,
- source_scanner=SCons.Tool.SourceFileScanner)
-
-
-# Logic to build .rc files into .res files (resource files)
-res_scanner = SCons.Scanner.RC.RCScan()
-res_action = SCons.Action.Action('$RCCOM', '$RCCOMSTR')
-res_builder = SCons.Builder.Builder(action=res_action,
- src_suffix='.rc',
- suffix='.res',
- src_builder=[],
- source_scanner=res_scanner)
-
-def msvc_batch_key(action, env, target, source):
- """
- Returns a key to identify unique batches of sources for compilation.
-
- If batching is enabled (via the $MSVC_BATCH setting), then all
- target+source pairs that use the same action, defined by the same
- environment, and have the same target and source directories, will
- be batched.
-
- Returning None specifies that the specified target+source should not
- be batched with other compilations.
- """
- b = env.subst('$MSVC_BATCH')
- if b in (None, '', '0'):
- # We're not using batching; return no key.
- return None
- t = target[0]
- s = source[0]
- if os.path.splitext(t.name)[0] != os.path.splitext(s.name)[0]:
- # The base names are different, so this *must* be compiled
- # separately; return no key.
- return None
- return (id(action), id(env), t.dir, s.dir)
-
-def msvc_output_flag(target, source, env, for_signature):
- """
- Returns the correct /Fo flag for batching.
-
- If batching is disabled or there's only one source file, then we
- return an /Fo string that specifies the target explicitly. Otherwise,
- we return an /Fo string that just specifies the first target's
- directory (where the Visual C/C++ compiler will put the .obj files).
- """
- b = env.subst('$MSVC_BATCH')
- if b in (None, '', '0') or len(source) == 1:
- return '/Fo$TARGET'
- else:
- # The Visual C/C++ compiler requires a \ at the end of the /Fo
- # option to indicate an output directory. We use os.sep here so
- # that the test(s) for this can be run on non-Windows systems
- # without having a hard-coded backslash mess up command-line
- # argument parsing.
- return '/Fo${TARGET.dir}' + os.sep
-
-CAction = SCons.Action.Action("$CCCOM", "$CCCOMSTR",
- batch_key=msvc_batch_key,
- targets='$CHANGED_TARGETS')
-ShCAction = SCons.Action.Action("$SHCCCOM", "$SHCCCOMSTR",
- batch_key=msvc_batch_key,
- targets='$CHANGED_TARGETS')
-CXXAction = SCons.Action.Action("$CXXCOM", "$CXXCOMSTR",
- batch_key=msvc_batch_key,
- targets='$CHANGED_TARGETS')
-ShCXXAction = SCons.Action.Action("$SHCXXCOM", "$SHCXXCOMSTR",
- batch_key=msvc_batch_key,
- targets='$CHANGED_TARGETS')
-
-def generate(env):
- """Add Builders and construction variables for MSVC++ to an Environment."""
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- # TODO(batch): shouldn't reach in to cmdgen this way; necessary
- # for now to bypass the checks in Builder.DictCmdGenerator.__call__()
- # and allow .cc and .cpp to be compiled in the same command line.
- static_obj.cmdgen.source_ext_match = False
- shared_obj.cmdgen.source_ext_match = False
-
- for suffix in CSuffixes:
- static_obj.add_action(suffix, CAction)
- shared_obj.add_action(suffix, ShCAction)
- static_obj.add_emitter(suffix, static_object_emitter)
- shared_obj.add_emitter(suffix, shared_object_emitter)
-
- for suffix in CXXSuffixes:
- static_obj.add_action(suffix, CXXAction)
- shared_obj.add_action(suffix, ShCXXAction)
- static_obj.add_emitter(suffix, static_object_emitter)
- shared_obj.add_emitter(suffix, shared_object_emitter)
-
- env['CCPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Z7") or ""}'])
- env['CCPCHFLAGS'] = SCons.Util.CLVar(['${(PCH and "/Yu%s /Fp%s"%(PCHSTOP or "",File(PCH))) or ""}'])
- env['_MSVC_OUTPUT_FLAG'] = msvc_output_flag
- env['_CCCOMCOM'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS $CCPCHFLAGS $CCPDBFLAGS'
- env['CC'] = 'cl'
- env['CCFLAGS'] = SCons.Util.CLVar('/nologo')
- env['CFLAGS'] = SCons.Util.CLVar('')
- env['CCCOM'] = '$CC $_MSVC_OUTPUT_FLAG /c $CHANGED_SOURCES $CFLAGS $CCFLAGS $_CCCOMCOM'
- env['SHCC'] = '$CC'
- env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS')
- env['SHCFLAGS'] = SCons.Util.CLVar('$CFLAGS')
- env['SHCCCOM'] = '$SHCC $_MSVC_OUTPUT_FLAG /c $CHANGED_SOURCES $SHCFLAGS $SHCCFLAGS $_CCCOMCOM'
- env['CXX'] = '$CC'
- env['CXXFLAGS'] = SCons.Util.CLVar('$( /TP $)')
- env['CXXCOM'] = '$CXX $_MSVC_OUTPUT_FLAG /c $CHANGED_SOURCES $CXXFLAGS $CCFLAGS $_CCCOMCOM'
- env['SHCXX'] = '$CXX'
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS')
- env['SHCXXCOM'] = '$SHCXX $_MSVC_OUTPUT_FLAG /c $CHANGED_SOURCES $SHCXXFLAGS $SHCCFLAGS $_CCCOMCOM'
- env['CPPDEFPREFIX'] = '/D'
- env['CPPDEFSUFFIX'] = ''
- env['INCPREFIX'] = '/I'
- env['INCSUFFIX'] = ''
-# env.Append(OBJEMITTER = [static_object_emitter])
-# env.Append(SHOBJEMITTER = [shared_object_emitter])
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
-
- env['RC'] = 'rc'
- env['RCFLAGS'] = SCons.Util.CLVar('')
- env['RCSUFFIXES']=['.rc','.rc2']
- env['RCCOM'] = '$RC $_CPPDEFFLAGS $_CPPINCFLAGS $RCFLAGS /fo$TARGET $SOURCES'
- env['BUILDERS']['RES'] = res_builder
- env['OBJPREFIX'] = ''
- env['OBJSUFFIX'] = '.obj'
- env['SHOBJPREFIX'] = '$OBJPREFIX'
- env['SHOBJSUFFIX'] = '$OBJSUFFIX'
-
- # Set-up ms tools paths for default version
- merge_default_version(env)
-
- import mssdk
- mssdk.generate(env)
-
- env['CFILESUFFIX'] = '.c'
- env['CXXFILESUFFIX'] = '.cc'
-
- env['PCHPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Yd") or ""}'])
- env['PCHCOM'] = '$CXX /Fo${TARGETS[1]} $CXXFLAGS $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Yc$PCHSTOP /Fp${TARGETS[0]} $CCPDBFLAGS $PCHPDBFLAGS'
- env['BUILDERS']['PCH'] = pch_builder
-
- if not env.has_key('ENV'):
- env['ENV'] = {}
- if not env['ENV'].has_key('SystemRoot'): # required for dlls in the winsxs folders
- env['ENV']['SystemRoot'] = SCons.Platform.win32.get_system_root()
-
-def exists(env):
- return detect_msvs()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/msvs.py b/3rdParty/SCons/scons-local/SCons/Tool/msvs.py
deleted file mode 100644
index 11e7dce..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/msvs.py
+++ /dev/null
@@ -1,1433 +0,0 @@
-"""SCons.Tool.msvs
-
-Tool-specific initialization for Microsoft Visual Studio project files.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/msvs.py 4043 2009/02/23 09:06:45 scons"
-
-import base64
-import hashlib
-import ntpath
-import os
-import pickle
-import re
-import string
-import sys
-
-import SCons.Builder
-import SCons.Node.FS
-import SCons.Platform.win32
-import SCons.Script.SConscript
-import SCons.Util
-import SCons.Warnings
-
-from MSCommon import detect_msvs, merge_default_version
-
-##############################################################################
-# Below here are the classes and functions for generation of
-# DSP/DSW/SLN/VCPROJ files.
-##############################################################################
-
-def _hexdigest(s):
- """Return a string as a string of hex characters.
- """
- # NOTE: This routine is a method in the Python 2.0 interface
- # of the native md5 module, but we want SCons to operate all
- # the way back to at least Python 1.5.2, which doesn't have it.
- h = string.hexdigits
- r = ''
- for c in s:
- i = ord(c)
- r = r + h[(i >> 4) & 0xF] + h[i & 0xF]
- return r
-
-def xmlify(s):
- s = string.replace(s, "&", "&amp;") # do this first
- s = string.replace(s, "'", "&apos;")
- s = string.replace(s, '"', "&quot;")
- return s
-
-external_makefile_guid = '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}'
-
-def _generateGUID(slnfile, name):
- """This generates a dummy GUID for the sln file to use. It is
- based on the MD5 signatures of the sln filename plus the name of
- the project. It basically just needs to be unique, and not
- change with each invocation."""
- m = hashlib.md5()
- # Normalize the slnfile path to a Windows path (\ separators) so
- # the generated file has a consistent GUID even if we generate
- # it on a non-Windows platform.
- m.update(ntpath.normpath(str(slnfile)) + str(name))
- # TODO(1.5)
- #solution = m.hexdigest().upper()
- solution = string.upper(_hexdigest(m.digest()))
- # convert most of the signature to GUID form (discard the rest)
- solution = "{" + solution[:8] + "-" + solution[8:12] + "-" + solution[12:16] + "-" + solution[16:20] + "-" + solution[20:32] + "}"
- return solution
-
-version_re = re.compile(r'(\d+\.\d+)(.*)')
-
-def msvs_parse_version(s):
- """
- Split a Visual Studio version, which may in fact be something like
- '7.0Exp', into is version number (returned as a float) and trailing
- "suite" portion.
- """
- num, suite = version_re.match(s).groups()
- return float(num), suite
-
-# This is how we re-invoke SCons from inside MSVS Project files.
-# The problem is that we might have been invoked as either scons.bat
-# or scons.py. If we were invoked directly as scons.py, then we could
-# use sys.argv[0] to find the SCons "executable," but that doesn't work
-# if we were invoked as scons.bat, which uses "python -c" to execute
-# things and ends up with "-c" as sys.argv[0]. Consequently, we have
-# the MSVS Project file invoke SCons the same way that scons.bat does,
-# which works regardless of how we were invoked.
-def getExecScriptMain(env, xml=None):
- scons_home = env.get('SCONS_HOME')
- if not scons_home and os.environ.has_key('SCONS_LIB_DIR'):
- scons_home = os.environ['SCONS_LIB_DIR']
- if scons_home:
- exec_script_main = "from os.path import join; import sys; sys.path = [ r'%s' ] + sys.path; import SCons.Script; SCons.Script.main()" % scons_home
- else:
- version = SCons.__version__
- exec_script_main = "from os.path import join; import sys; sys.path = [ join(sys.prefix, 'Lib', 'site-packages', 'scons-%(version)s'), join(sys.prefix, 'scons-%(version)s'), join(sys.prefix, 'Lib', 'site-packages', 'scons'), join(sys.prefix, 'scons') ] + sys.path; import SCons.Script; SCons.Script.main()" % locals()
- if xml:
- exec_script_main = xmlify(exec_script_main)
- return exec_script_main
-
-# The string for the Python executable we tell the Project file to use
-# is either sys.executable or, if an external PYTHON_ROOT environment
-# variable exists, $(PYTHON)ROOT\\python.exe (generalized a little to
-# pluck the actual executable name from sys.executable).
-try:
- python_root = os.environ['PYTHON_ROOT']
-except KeyError:
- python_executable = sys.executable
-else:
- python_executable = os.path.join('$$(PYTHON_ROOT)',
- os.path.split(sys.executable)[1])
-
-class Config:
- pass
-
-def splitFully(path):
- dir, base = os.path.split(path)
- if dir and dir != '' and dir != path:
- return splitFully(dir)+[base]
- if base == '':
- return []
- return [base]
-
-def makeHierarchy(sources):
- '''Break a list of files into a hierarchy; for each value, if it is a string,
- then it is a file. If it is a dictionary, it is a folder. The string is
- the original path of the file.'''
-
- hierarchy = {}
- for file in sources:
- path = splitFully(file)
- if len(path):
- dict = hierarchy
- for part in path[:-1]:
- if not dict.has_key(part):
- dict[part] = {}
- dict = dict[part]
- dict[path[-1]] = file
- #else:
- # print 'Warning: failed to decompose path for '+str(file)
- return hierarchy
-
-class _DSPGenerator:
- """ Base class for DSP generators """
-
- srcargs = [
- 'srcs',
- 'incs',
- 'localincs',
- 'resources',
- 'misc']
-
- def __init__(self, dspfile, source, env):
- self.dspfile = str(dspfile)
- try:
- get_abspath = dspfile.get_abspath
- except AttributeError:
- self.dspabs = os.path.abspath(dspfile)
- else:
- self.dspabs = get_abspath()
-
- if not env.has_key('variant'):
- raise SCons.Errors.InternalError, \
- "You must specify a 'variant' argument (i.e. 'Debug' or " +\
- "'Release') to create an MSVSProject."
- elif SCons.Util.is_String(env['variant']):
- variants = [env['variant']]
- elif SCons.Util.is_List(env['variant']):
- variants = env['variant']
-
- if not env.has_key('buildtarget') or env['buildtarget'] == None:
- buildtarget = ['']
- elif SCons.Util.is_String(env['buildtarget']):
- buildtarget = [env['buildtarget']]
- elif SCons.Util.is_List(env['buildtarget']):
- if len(env['buildtarget']) != len(variants):
- raise SCons.Errors.InternalError, \
- "Sizes of 'buildtarget' and 'variant' lists must be the same."
- buildtarget = []
- for bt in env['buildtarget']:
- if SCons.Util.is_String(bt):
- buildtarget.append(bt)
- else:
- buildtarget.append(bt.get_abspath())
- else:
- buildtarget = [env['buildtarget'].get_abspath()]
- if len(buildtarget) == 1:
- bt = buildtarget[0]
- buildtarget = []
- for _ in variants:
- buildtarget.append(bt)
-
- if not env.has_key('outdir') or env['outdir'] == None:
- outdir = ['']
- elif SCons.Util.is_String(env['outdir']):
- outdir = [env['outdir']]
- elif SCons.Util.is_List(env['outdir']):
- if len(env['outdir']) != len(variants):
- raise SCons.Errors.InternalError, \
- "Sizes of 'outdir' and 'variant' lists must be the same."
- outdir = []
- for s in env['outdir']:
- if SCons.Util.is_String(s):
- outdir.append(s)
- else:
- outdir.append(s.get_abspath())
- else:
- outdir = [env['outdir'].get_abspath()]
- if len(outdir) == 1:
- s = outdir[0]
- outdir = []
- for v in variants:
- outdir.append(s)
-
- if not env.has_key('runfile') or env['runfile'] == None:
- runfile = buildtarget[-1:]
- elif SCons.Util.is_String(env['runfile']):
- runfile = [env['runfile']]
- elif SCons.Util.is_List(env['runfile']):
- if len(env['runfile']) != len(variants):
- raise SCons.Errors.InternalError, \
- "Sizes of 'runfile' and 'variant' lists must be the same."
- runfile = []
- for s in env['runfile']:
- if SCons.Util.is_String(s):
- runfile.append(s)
- else:
- runfile.append(s.get_abspath())
- else:
- runfile = [env['runfile'].get_abspath()]
- if len(runfile) == 1:
- s = runfile[0]
- runfile = []
- for v in variants:
- runfile.append(s)
-
- self.sconscript = env['MSVSSCONSCRIPT']
-
- cmdargs = env.get('cmdargs', '')
-
- self.env = env
-
- if self.env.has_key('name'):
- self.name = self.env['name']
- else:
- self.name = os.path.basename(SCons.Util.splitext(self.dspfile)[0])
- self.name = self.env.subst(self.name)
-
- sourcenames = [
- 'Source Files',
- 'Header Files',
- 'Local Headers',
- 'Resource Files',
- 'Other Files']
-
- self.sources = {}
- for n in sourcenames:
- self.sources[n] = []
-
- self.configs = {}
-
- self.nokeep = 0
- if env.has_key('nokeep') and env['variant'] != 0:
- self.nokeep = 1
-
- if self.nokeep == 0 and os.path.exists(self.dspabs):
- self.Parse()
-
- for t in zip(sourcenames,self.srcargs):
- if self.env.has_key(t[1]):
- if SCons.Util.is_List(self.env[t[1]]):
- for i in self.env[t[1]]:
- if not i in self.sources[t[0]]:
- self.sources[t[0]].append(i)
- else:
- if not self.env[t[1]] in self.sources[t[0]]:
- self.sources[t[0]].append(self.env[t[1]])
-
- for n in sourcenames:
- # TODO(1.5):
- #self.sources[n].sort(lambda a, b: cmp(a.lower(), b.lower()))
- self.sources[n].sort(lambda a, b: cmp(string.lower(a), string.lower(b)))
-
- def AddConfig(self, variant, buildtarget, outdir, runfile, cmdargs, dspfile=dspfile):
- config = Config()
- config.buildtarget = buildtarget
- config.outdir = outdir
- config.cmdargs = cmdargs
- config.runfile = runfile
-
- match = re.match('(.*)\|(.*)', variant)
- if match:
- config.variant = match.group(1)
- config.platform = match.group(2)
- else:
- config.variant = variant
- config.platform = 'Win32'
-
- self.configs[variant] = config
- print "Adding '" + self.name + ' - ' + config.variant + '|' + config.platform + "' to '" + str(dspfile) + "'"
-
- for i in range(len(variants)):
- AddConfig(self, variants[i], buildtarget[i], outdir[i], runfile[i], cmdargs)
-
- self.platforms = []
- for key in self.configs.keys():
- platform = self.configs[key].platform
- if not platform in self.platforms:
- self.platforms.append(platform)
-
- def Build(self):
- pass
-
-V6DSPHeader = """\
-# Microsoft Developer Studio Project File - Name="%(name)s" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) External Target" 0x0106
-
-CFG=%(name)s - Win32 %(confkey)s
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "%(name)s.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "%(name)s.mak" CFG="%(name)s - Win32 %(confkey)s"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-"""
-
-class _GenerateV6DSP(_DSPGenerator):
- """Generates a Project file for MSVS 6.0"""
-
- def PrintHeader(self):
- # pick a default config
- confkeys = self.configs.keys()
- confkeys.sort()
-
- name = self.name
- confkey = confkeys[0]
-
- self.file.write(V6DSPHeader % locals())
-
- for kind in confkeys:
- self.file.write('!MESSAGE "%s - Win32 %s" (based on "Win32 (x86) External Target")\n' % (name, kind))
-
- self.file.write('!MESSAGE \n\n')
-
- def PrintProject(self):
- name = self.name
- self.file.write('# Begin Project\n'
- '# PROP AllowPerConfigDependencies 0\n'
- '# PROP Scc_ProjName ""\n'
- '# PROP Scc_LocalPath ""\n\n')
-
- first = 1
- confkeys = self.configs.keys()
- confkeys.sort()
- for kind in confkeys:
- outdir = self.configs[kind].outdir
- buildtarget = self.configs[kind].buildtarget
- if first == 1:
- self.file.write('!IF "$(CFG)" == "%s - Win32 %s"\n\n' % (name, kind))
- first = 0
- else:
- self.file.write('\n!ELSEIF "$(CFG)" == "%s - Win32 %s"\n\n' % (name, kind))
-
- env_has_buildtarget = self.env.has_key('MSVSBUILDTARGET')
- if not env_has_buildtarget:
- self.env['MSVSBUILDTARGET'] = buildtarget
-
- # have to write this twice, once with the BASE settings, and once without
- for base in ("BASE ",""):
- self.file.write('# PROP %sUse_MFC 0\n'
- '# PROP %sUse_Debug_Libraries ' % (base, base))
- # TODO(1.5):
- #if kind.lower().find('debug') < 0:
- if string.find(string.lower(kind), 'debug') < 0:
- self.file.write('0\n')
- else:
- self.file.write('1\n')
- self.file.write('# PROP %sOutput_Dir "%s"\n'
- '# PROP %sIntermediate_Dir "%s"\n' % (base,outdir,base,outdir))
- cmd = 'echo Starting SCons && ' + self.env.subst('$MSVSBUILDCOM', 1)
- self.file.write('# PROP %sCmd_Line "%s"\n'
- '# PROP %sRebuild_Opt "-c && %s"\n'
- '# PROP %sTarget_File "%s"\n'
- '# PROP %sBsc_Name ""\n'
- '# PROP %sTarget_Dir ""\n'\
- %(base,cmd,base,cmd,base,buildtarget,base,base))
-
- if not env_has_buildtarget:
- del self.env['MSVSBUILDTARGET']
-
- self.file.write('\n!ENDIF\n\n'
- '# Begin Target\n\n')
- for kind in confkeys:
- self.file.write('# Name "%s - Win32 %s"\n' % (name,kind))
- self.file.write('\n')
- first = 0
- for kind in confkeys:
- if first == 0:
- self.file.write('!IF "$(CFG)" == "%s - Win32 %s"\n\n' % (name,kind))
- first = 1
- else:
- self.file.write('!ELSEIF "$(CFG)" == "%s - Win32 %s"\n\n' % (name,kind))
- self.file.write('!ENDIF \n\n')
- self.PrintSourceFiles()
- self.file.write('# End Target\n'
- '# End Project\n')
-
- if self.nokeep == 0:
- # now we pickle some data and add it to the file -- MSDEV will ignore it.
- pdata = pickle.dumps(self.configs,1)
- pdata = base64.encodestring(pdata)
- self.file.write(pdata + '\n')
- pdata = pickle.dumps(self.sources,1)
- pdata = base64.encodestring(pdata)
- self.file.write(pdata + '\n')
-
- def PrintSourceFiles(self):
- categories = {'Source Files': 'cpp|c|cxx|l|y|def|odl|idl|hpj|bat',
- 'Header Files': 'h|hpp|hxx|hm|inl',
- 'Local Headers': 'h|hpp|hxx|hm|inl',
- 'Resource Files': 'r|rc|ico|cur|bmp|dlg|rc2|rct|bin|cnt|rtf|gif|jpg|jpeg|jpe',
- 'Other Files': ''}
-
- cats = categories.keys()
- # TODO(1.5):
- #cats.sort(lambda a, b: cmp(a.lower(), b.lower()))
- cats.sort(lambda a, b: cmp(string.lower(a), string.lower(b)))
- for kind in cats:
- if not self.sources[kind]:
- continue # skip empty groups
-
- self.file.write('# Begin Group "' + kind + '"\n\n')
- # TODO(1.5)
- #typelist = categories[kind].replace('|', ';')
- typelist = string.replace(categories[kind], '|', ';')
- self.file.write('# PROP Default_Filter "' + typelist + '"\n')
-
- for file in self.sources[kind]:
- file = os.path.normpath(file)
- self.file.write('# Begin Source File\n\n'
- 'SOURCE="' + file + '"\n'
- '# End Source File\n')
- self.file.write('# End Group\n')
-
- # add the SConscript file outside of the groups
- self.file.write('# Begin Source File\n\n'
- 'SOURCE="' + str(self.sconscript) + '"\n'
- '# End Source File\n')
-
- def Parse(self):
- try:
- dspfile = open(self.dspabs,'r')
- except IOError:
- return # doesn't exist yet, so can't add anything to configs.
-
- line = dspfile.readline()
- while line:
- # TODO(1.5):
- #if line.find("# End Project") > -1:
- if string.find(line, "# End Project") > -1:
- break
- line = dspfile.readline()
-
- line = dspfile.readline()
- datas = line
- while line and line != '\n':
- line = dspfile.readline()
- datas = datas + line
-
- # OK, we've found our little pickled cache of data.
- try:
- datas = base64.decodestring(datas)
- data = pickle.loads(datas)
- except KeyboardInterrupt:
- raise
- except:
- return # unable to unpickle any data for some reason
-
- self.configs.update(data)
-
- data = None
- line = dspfile.readline()
- datas = line
- while line and line != '\n':
- line = dspfile.readline()
- datas = datas + line
-
- # OK, we've found our little pickled cache of data.
- # it has a "# " in front of it, so we strip that.
- try:
- datas = base64.decodestring(datas)
- data = pickle.loads(datas)
- except KeyboardInterrupt:
- raise
- except:
- return # unable to unpickle any data for some reason
-
- self.sources.update(data)
-
- def Build(self):
- try:
- self.file = open(self.dspabs,'w')
- except IOError, detail:
- raise SCons.Errors.InternalError, 'Unable to open "' + self.dspabs + '" for writing:' + str(detail)
- else:
- self.PrintHeader()
- self.PrintProject()
- self.file.close()
-
-V7DSPHeader = """\
-<?xml version="1.0" encoding = "%(encoding)s"?>
-<VisualStudioProject
-\tProjectType="Visual C++"
-\tVersion="%(versionstr)s"
-\tName="%(name)s"
-%(scc_attrs)s
-\tKeyword="MakeFileProj">
-"""
-
-V7DSPConfiguration = """\
-\t\t<Configuration
-\t\t\tName="%(variant)s|%(platform)s"
-\t\t\tOutputDirectory="%(outdir)s"
-\t\t\tIntermediateDirectory="%(outdir)s"
-\t\t\tConfigurationType="0"
-\t\t\tUseOfMFC="0"
-\t\t\tATLMinimizesCRunTimeLibraryUsage="FALSE">
-\t\t\t<Tool
-\t\t\t\tName="VCNMakeTool"
-\t\t\t\tBuildCommandLine="%(buildcmd)s"
-\t\t\t\tCleanCommandLine="%(cleancmd)s"
-\t\t\t\tRebuildCommandLine="%(rebuildcmd)s"
-\t\t\t\tOutput="%(runfile)s"/>
-\t\t</Configuration>
-"""
-
-V8DSPHeader = """\
-<?xml version="1.0" encoding="%(encoding)s"?>
-<VisualStudioProject
-\tProjectType="Visual C++"
-\tVersion="%(versionstr)s"
-\tName="%(name)s"
-%(scc_attrs)s
-\tRootNamespace="%(name)s"
-\tKeyword="MakeFileProj">
-"""
-
-V8DSPConfiguration = """\
-\t\t<Configuration
-\t\t\tName="%(variant)s|%(platform)s"
-\t\t\tConfigurationType="0"
-\t\t\tUseOfMFC="0"
-\t\t\tATLMinimizesCRunTimeLibraryUsage="false"
-\t\t\t>
-\t\t\t<Tool
-\t\t\t\tName="VCNMakeTool"
-\t\t\t\tBuildCommandLine="%(buildcmd)s"
-\t\t\t\tReBuildCommandLine="%(rebuildcmd)s"
-\t\t\t\tCleanCommandLine="%(cleancmd)s"
-\t\t\t\tOutput="%(runfile)s"
-\t\t\t\tPreprocessorDefinitions="%(preprocdefs)s"
-\t\t\t\tIncludeSearchPath="%(includepath)s"
-\t\t\t\tForcedIncludes=""
-\t\t\t\tAssemblySearchPath=""
-\t\t\t\tForcedUsingAssemblies=""
-\t\t\t\tCompileAsManaged=""
-\t\t\t/>
-\t\t</Configuration>
-"""
-class _GenerateV7DSP(_DSPGenerator):
- """Generates a Project file for MSVS .NET"""
-
- def __init__(self, dspfile, source, env):
- _DSPGenerator.__init__(self, dspfile, source, env)
- self.version = env['MSVS_VERSION']
- self.version_num, self.suite = msvs_parse_version(self.version)
- if self.version_num >= 8.0:
- self.versionstr = '8.00'
- self.dspheader = V8DSPHeader
- self.dspconfiguration = V8DSPConfiguration
- else:
- if self.version_num >= 7.1:
- self.versionstr = '7.10'
- else:
- self.versionstr = '7.00'
- self.dspheader = V7DSPHeader
- self.dspconfiguration = V7DSPConfiguration
- self.file = None
-
- def PrintHeader(self):
- env = self.env
- versionstr = self.versionstr
- name = self.name
- encoding = self.env.subst('$MSVSENCODING')
- scc_provider = env.get('MSVS_SCC_PROVIDER', '')
- scc_project_name = env.get('MSVS_SCC_PROJECT_NAME', '')
- scc_aux_path = env.get('MSVS_SCC_AUX_PATH', '')
- scc_local_path = env.get('MSVS_SCC_LOCAL_PATH', '')
- project_guid = env.get('MSVS_PROJECT_GUID', '')
- if self.version_num >= 8.0 and not project_guid:
- project_guid = _generateGUID(self.dspfile, '')
- if scc_provider != '':
- scc_attrs = ('\tProjectGUID="%s"\n'
- '\tSccProjectName="%s"\n'
- '\tSccAuxPath="%s"\n'
- '\tSccLocalPath="%s"\n'
- '\tSccProvider="%s"' % (project_guid, scc_project_name, scc_aux_path, scc_local_path, scc_provider))
- else:
- scc_attrs = ('\tProjectGUID="%s"\n'
- '\tSccProjectName="%s"\n'
- '\tSccLocalPath="%s"' % (project_guid, scc_project_name, scc_local_path))
-
- self.file.write(self.dspheader % locals())
-
- self.file.write('\t<Platforms>\n')
- for platform in self.platforms:
- self.file.write(
- '\t\t<Platform\n'
- '\t\t\tName="%s"/>\n' % platform)
- self.file.write('\t</Platforms>\n')
-
- if self.version_num >= 8.0:
- self.file.write('\t<ToolFiles>\n'
- '\t</ToolFiles>\n')
-
- def PrintProject(self):
- self.file.write('\t<Configurations>\n')
-
- confkeys = self.configs.keys()
- confkeys.sort()
- for kind in confkeys:
- variant = self.configs[kind].variant
- platform = self.configs[kind].platform
- outdir = self.configs[kind].outdir
- buildtarget = self.configs[kind].buildtarget
- runfile = self.configs[kind].runfile
- cmdargs = self.configs[kind].cmdargs
-
- env_has_buildtarget = self.env.has_key('MSVSBUILDTARGET')
- if not env_has_buildtarget:
- self.env['MSVSBUILDTARGET'] = buildtarget
-
- starting = 'echo Starting SCons && '
- if cmdargs:
- cmdargs = ' ' + cmdargs
- else:
- cmdargs = ''
- buildcmd = xmlify(starting + self.env.subst('$MSVSBUILDCOM', 1) + cmdargs)
- rebuildcmd = xmlify(starting + self.env.subst('$MSVSREBUILDCOM', 1) + cmdargs)
- cleancmd = xmlify(starting + self.env.subst('$MSVSCLEANCOM', 1) + cmdargs)
-
- # TODO(1.5)
- #preprocdefs = xmlify(';'.join(self.env.get('CPPDEFINES', [])))
- #includepath = xmlify(';'.join(self.env.get('CPPPATH', [])))
- preprocdefs = xmlify(string.join(self.env.get('CPPDEFINES', []), ';'))
- includepath = xmlify(string.join(self.env.get('CPPPATH', []), ';'))
-
- if not env_has_buildtarget:
- del self.env['MSVSBUILDTARGET']
-
- self.file.write(self.dspconfiguration % locals())
-
- self.file.write('\t</Configurations>\n')
-
- if self.version_num >= 7.1:
- self.file.write('\t<References>\n'
- '\t</References>\n')
-
- self.PrintSourceFiles()
-
- self.file.write('</VisualStudioProject>\n')
-
- if self.nokeep == 0:
- # now we pickle some data and add it to the file -- MSDEV will ignore it.
- pdata = pickle.dumps(self.configs,1)
- pdata = base64.encodestring(pdata)
- self.file.write('<!-- SCons Data:\n' + pdata + '\n')
- pdata = pickle.dumps(self.sources,1)
- pdata = base64.encodestring(pdata)
- self.file.write(pdata + '-->\n')
-
- def printSources(self, hierarchy, commonprefix):
- sorteditems = hierarchy.items()
- # TODO(1.5):
- #sorteditems.sort(lambda a, b: cmp(a[0].lower(), b[0].lower()))
- sorteditems.sort(lambda a, b: cmp(string.lower(a[0]), string.lower(b[0])))
-
- # First folders, then files
- for key, value in sorteditems:
- if SCons.Util.is_Dict(value):
- self.file.write('\t\t\t<Filter\n'
- '\t\t\t\tName="%s"\n'
- '\t\t\t\tFilter="">\n' % (key))
- self.printSources(value, commonprefix)
- self.file.write('\t\t\t</Filter>\n')
-
- for key, value in sorteditems:
- if SCons.Util.is_String(value):
- file = value
- if commonprefix:
- file = os.path.join(commonprefix, value)
- file = os.path.normpath(file)
- self.file.write('\t\t\t<File\n'
- '\t\t\t\tRelativePath="%s">\n'
- '\t\t\t</File>\n' % (file))
-
- def PrintSourceFiles(self):
- categories = {'Source Files': 'cpp;c;cxx;l;y;def;odl;idl;hpj;bat',
- 'Header Files': 'h;hpp;hxx;hm;inl',
- 'Local Headers': 'h;hpp;hxx;hm;inl',
- 'Resource Files': 'r;rc;ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe',
- 'Other Files': ''}
-
- self.file.write('\t<Files>\n')
-
- cats = categories.keys()
- # TODO(1.5)
- #cats.sort(lambda a, b: cmp(a.lower(), b.lower()))
- cats.sort(lambda a, b: cmp(string.lower(a), string.lower(b)))
- cats = filter(lambda k, s=self: s.sources[k], cats)
- for kind in cats:
- if len(cats) > 1:
- self.file.write('\t\t<Filter\n'
- '\t\t\tName="%s"\n'
- '\t\t\tFilter="%s">\n' % (kind, categories[kind]))
-
- sources = self.sources[kind]
-
- # First remove any common prefix
- commonprefix = None
- if len(sources) > 1:
- s = map(os.path.normpath, sources)
- # take the dirname because the prefix may include parts
- # of the filenames (e.g. if you have 'dir\abcd' and
- # 'dir\acde' then the cp will be 'dir\a' )
- cp = os.path.dirname( os.path.commonprefix(s) )
- if cp and s[0][len(cp)] == os.sep:
- # +1 because the filename starts after the separator
- sources = map(lambda s, l=len(cp)+1: s[l:], sources)
- commonprefix = cp
- elif len(sources) == 1:
- commonprefix = os.path.dirname( sources[0] )
- sources[0] = os.path.basename( sources[0] )
-
- hierarchy = makeHierarchy(sources)
- self.printSources(hierarchy, commonprefix=commonprefix)
-
- if len(cats)>1:
- self.file.write('\t\t</Filter>\n')
-
- # add the SConscript file outside of the groups
- self.file.write('\t\t<File\n'
- '\t\t\tRelativePath="%s">\n'
- '\t\t</File>\n' % str(self.sconscript))
-
- self.file.write('\t</Files>\n'
- '\t<Globals>\n'
- '\t</Globals>\n')
-
- def Parse(self):
- try:
- dspfile = open(self.dspabs,'r')
- except IOError:
- return # doesn't exist yet, so can't add anything to configs.
-
- line = dspfile.readline()
- while line:
- # TODO(1.5)
- #if line.find('<!-- SCons Data:') > -1:
- if string.find(line, '<!-- SCons Data:') > -1:
- break
- line = dspfile.readline()
-
- line = dspfile.readline()
- datas = line
- while line and line != '\n':
- line = dspfile.readline()
- datas = datas + line
-
- # OK, we've found our little pickled cache of data.
- try:
- datas = base64.decodestring(datas)
- data = pickle.loads(datas)
- except KeyboardInterrupt:
- raise
- except:
- return # unable to unpickle any data for some reason
-
- self.configs.update(data)
-
- data = None
- line = dspfile.readline()
- datas = line
- while line and line != '\n':
- line = dspfile.readline()
- datas = datas + line
-
- # OK, we've found our little pickled cache of data.
- try:
- datas = base64.decodestring(datas)
- data = pickle.loads(datas)
- except KeyboardInterrupt:
- raise
- except:
- return # unable to unpickle any data for some reason
-
- self.sources.update(data)
-
- def Build(self):
- try:
- self.file = open(self.dspabs,'w')
- except IOError, detail:
- raise SCons.Errors.InternalError, 'Unable to open "' + self.dspabs + '" for writing:' + str(detail)
- else:
- self.PrintHeader()
- self.PrintProject()
- self.file.close()
-
-class _DSWGenerator:
- """ Base class for DSW generators """
- def __init__(self, dswfile, source, env):
- self.dswfile = os.path.normpath(str(dswfile))
- self.env = env
-
- if not env.has_key('projects'):
- raise SCons.Errors.UserError, \
- "You must specify a 'projects' argument to create an MSVSSolution."
- projects = env['projects']
- if not SCons.Util.is_List(projects):
- raise SCons.Errors.InternalError, \
- "The 'projects' argument must be a list of nodes."
- projects = SCons.Util.flatten(projects)
- if len(projects) < 1:
- raise SCons.Errors.UserError, \
- "You must specify at least one project to create an MSVSSolution."
- self.dspfiles = map(str, projects)
-
- if self.env.has_key('name'):
- self.name = self.env['name']
- else:
- self.name = os.path.basename(SCons.Util.splitext(self.dswfile)[0])
- self.name = self.env.subst(self.name)
-
- def Build(self):
- pass
-
-class _GenerateV7DSW(_DSWGenerator):
- """Generates a Solution file for MSVS .NET"""
- def __init__(self, dswfile, source, env):
- _DSWGenerator.__init__(self, dswfile, source, env)
-
- self.file = None
- self.version = self.env['MSVS_VERSION']
- self.version_num, self.suite = msvs_parse_version(self.version)
- self.versionstr = '7.00'
- if self.version_num >= 8.0:
- self.versionstr = '9.00'
- elif self.version_num >= 7.1:
- self.versionstr = '8.00'
- if self.version_num >= 8.0:
- self.versionstr = '9.00'
-
- if env.has_key('slnguid') and env['slnguid']:
- self.slnguid = env['slnguid']
- else:
- self.slnguid = _generateGUID(dswfile, self.name)
-
- self.configs = {}
-
- self.nokeep = 0
- if env.has_key('nokeep') and env['variant'] != 0:
- self.nokeep = 1
-
- if self.nokeep == 0 and os.path.exists(self.dswfile):
- self.Parse()
-
- def AddConfig(self, variant, dswfile=dswfile):
- config = Config()
-
- match = re.match('(.*)\|(.*)', variant)
- if match:
- config.variant = match.group(1)
- config.platform = match.group(2)
- else:
- config.variant = variant
- config.platform = 'Win32'
-
- self.configs[variant] = config
- print "Adding '" + self.name + ' - ' + config.variant + '|' + config.platform + "' to '" + str(dswfile) + "'"
-
- if not env.has_key('variant'):
- raise SCons.Errors.InternalError, \
- "You must specify a 'variant' argument (i.e. 'Debug' or " +\
- "'Release') to create an MSVS Solution File."
- elif SCons.Util.is_String(env['variant']):
- AddConfig(self, env['variant'])
- elif SCons.Util.is_List(env['variant']):
- for variant in env['variant']:
- AddConfig(self, variant)
-
- self.platforms = []
- for key in self.configs.keys():
- platform = self.configs[key].platform
- if not platform in self.platforms:
- self.platforms.append(platform)
-
- def Parse(self):
- try:
- dswfile = open(self.dswfile,'r')
- except IOError:
- return # doesn't exist yet, so can't add anything to configs.
-
- line = dswfile.readline()
- while line:
- if line[:9] == "EndGlobal":
- break
- line = dswfile.readline()
-
- line = dswfile.readline()
- datas = line
- while line:
- line = dswfile.readline()
- datas = datas + line
-
- # OK, we've found our little pickled cache of data.
- try:
- datas = base64.decodestring(datas)
- data = pickle.loads(datas)
- except KeyboardInterrupt:
- raise
- except:
- return # unable to unpickle any data for some reason
-
- self.configs.update(data)
-
- def PrintSolution(self):
- """Writes a solution file"""
- self.file.write('Microsoft Visual Studio Solution File, Format Version %s\n' % self.versionstr )
- if self.version_num >= 8.0:
- self.file.write('# Visual Studio 2005\n')
- for p in self.dspfiles:
- name = os.path.basename(p)
- base, suffix = SCons.Util.splitext(name)
- if suffix == '.vcproj':
- name = base
- guid = _generateGUID(p, '')
- self.file.write('Project("%s") = "%s", "%s", "%s"\n'
- % ( external_makefile_guid, name, p, guid ) )
- if self.version_num >= 7.1 and self.version_num < 8.0:
- self.file.write('\tProjectSection(ProjectDependencies) = postProject\n'
- '\tEndProjectSection\n')
- self.file.write('EndProject\n')
-
- self.file.write('Global\n')
-
- env = self.env
- if env.has_key('MSVS_SCC_PROVIDER'):
- dspfile_base = os.path.basename(self.dspfile)
- slnguid = self.slnguid
- scc_provider = env.get('MSVS_SCC_PROVIDER', '')
- scc_provider = string.replace(scc_provider, ' ', r'\u0020')
- scc_project_name = env.get('MSVS_SCC_PROJECT_NAME', '')
- # scc_aux_path = env.get('MSVS_SCC_AUX_PATH', '')
- scc_local_path = env.get('MSVS_SCC_LOCAL_PATH', '')
- scc_project_base_path = env.get('MSVS_SCC_PROJECT_BASE_PATH', '')
- # project_guid = env.get('MSVS_PROJECT_GUID', '')
-
- self.file.write('\tGlobalSection(SourceCodeControl) = preSolution\n'
- '\t\tSccNumberOfProjects = 2\n'
- '\t\tSccProjectUniqueName0 = %(dspfile_base)s\n'
- '\t\tSccLocalPath0 = %(scc_local_path)s\n'
- '\t\tCanCheckoutShared = true\n'
- '\t\tSccProjectFilePathRelativizedFromConnection0 = %(scc_project_base_path)s\n'
- '\t\tSccProjectName1 = %(scc_project_name)s\n'
- '\t\tSccLocalPath1 = %(scc_local_path)s\n'
- '\t\tSccProvider1 = %(scc_provider)s\n'
- '\t\tCanCheckoutShared = true\n'
- '\t\tSccProjectFilePathRelativizedFromConnection1 = %(scc_project_base_path)s\n'
- '\t\tSolutionUniqueID = %(slnguid)s\n'
- '\tEndGlobalSection\n' % locals())
-
- if self.version_num >= 8.0:
- self.file.write('\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n')
- else:
- self.file.write('\tGlobalSection(SolutionConfiguration) = preSolution\n')
-
- confkeys = self.configs.keys()
- confkeys.sort()
- cnt = 0
- for name in confkeys:
- variant = self.configs[name].variant
- platform = self.configs[name].platform
- if self.version_num >= 8.0:
- self.file.write('\t\t%s|%s = %s|%s\n' % (variant, platform, variant, platform))
- else:
- self.file.write('\t\tConfigName.%d = %s\n' % (cnt, variant))
- cnt = cnt + 1
- self.file.write('\tEndGlobalSection\n')
- if self.version_num < 7.1:
- self.file.write('\tGlobalSection(ProjectDependencies) = postSolution\n'
- '\tEndGlobalSection\n')
- if self.version_num >= 8.0:
- self.file.write('\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n')
- else:
- self.file.write('\tGlobalSection(ProjectConfiguration) = postSolution\n')
-
- for name in confkeys:
- variant = self.configs[name].variant
- platform = self.configs[name].platform
- if self.version_num >= 8.0:
- for p in self.dspfiles:
- guid = _generateGUID(p, '')
- self.file.write('\t\t%s.%s|%s.ActiveCfg = %s|%s\n'
- '\t\t%s.%s|%s.Build.0 = %s|%s\n' % (guid,variant,platform,variant,platform,guid,variant,platform,variant,platform))
- else:
- for p in self.dspfiles:
- guid = _generateGUID(p, '')
- self.file.write('\t\t%s.%s.ActiveCfg = %s|%s\n'
- '\t\t%s.%s.Build.0 = %s|%s\n' %(guid,variant,variant,platform,guid,variant,variant,platform))
-
- self.file.write('\tEndGlobalSection\n')
-
- if self.version_num >= 8.0:
- self.file.write('\tGlobalSection(SolutionProperties) = preSolution\n'
- '\t\tHideSolutionNode = FALSE\n'
- '\tEndGlobalSection\n')
- else:
- self.file.write('\tGlobalSection(ExtensibilityGlobals) = postSolution\n'
- '\tEndGlobalSection\n'
- '\tGlobalSection(ExtensibilityAddIns) = postSolution\n'
- '\tEndGlobalSection\n')
- self.file.write('EndGlobal\n')
- if self.nokeep == 0:
- pdata = pickle.dumps(self.configs,1)
- pdata = base64.encodestring(pdata)
- self.file.write(pdata + '\n')
-
- def Build(self):
- try:
- self.file = open(self.dswfile,'w')
- except IOError, detail:
- raise SCons.Errors.InternalError, 'Unable to open "' + self.dswfile + '" for writing:' + str(detail)
- else:
- self.PrintSolution()
- self.file.close()
-
-V6DSWHeader = """\
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "%(name)s"="%(dspfile)s" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-"""
-
-class _GenerateV6DSW(_DSWGenerator):
- """Generates a Workspace file for MSVS 6.0"""
-
- def PrintWorkspace(self):
- """ writes a DSW file """
- name = self.name
- dspfile = self.dspfiles[0]
- self.file.write(V6DSWHeader % locals())
-
- def Build(self):
- try:
- self.file = open(self.dswfile,'w')
- except IOError, detail:
- raise SCons.Errors.InternalError, 'Unable to open "' + self.dswfile + '" for writing:' + str(detail)
- else:
- self.PrintWorkspace()
- self.file.close()
-
-
-def GenerateDSP(dspfile, source, env):
- """Generates a Project file based on the version of MSVS that is being used"""
-
- version_num = 6.0
- if env.has_key('MSVS_VERSION'):
- version_num, suite = msvs_parse_version(env['MSVS_VERSION'])
- if version_num >= 7.0:
- g = _GenerateV7DSP(dspfile, source, env)
- g.Build()
- else:
- g = _GenerateV6DSP(dspfile, source, env)
- g.Build()
-
-def GenerateDSW(dswfile, source, env):
- """Generates a Solution/Workspace file based on the version of MSVS that is being used"""
-
- version_num = 6.0
- if env.has_key('MSVS_VERSION'):
- version_num, suite = msvs_parse_version(env['MSVS_VERSION'])
- if version_num >= 7.0:
- g = _GenerateV7DSW(dswfile, source, env)
- g.Build()
- else:
- g = _GenerateV6DSW(dswfile, source, env)
- g.Build()
-
-
-##############################################################################
-# Above here are the classes and functions for generation of
-# DSP/DSW/SLN/VCPROJ files.
-##############################################################################
-
-def GetMSVSProjectSuffix(target, source, env, for_signature):
- return env['MSVS']['PROJECTSUFFIX']
-
-def GetMSVSSolutionSuffix(target, source, env, for_signature):
- return env['MSVS']['SOLUTIONSUFFIX']
-
-def GenerateProject(target, source, env):
- # generate the dsp file, according to the version of MSVS.
- builddspfile = target[0]
- dspfile = builddspfile.srcnode()
-
- # this detects whether or not we're using a VariantDir
- if not dspfile is builddspfile:
- try:
- bdsp = open(str(builddspfile), "w+")
- except IOError, detail:
- print 'Unable to open "' + str(dspfile) + '" for writing:',detail,'\n'
- raise
-
- bdsp.write("This is just a placeholder file.\nThe real project file is here:\n%s\n" % dspfile.get_abspath())
-
- GenerateDSP(dspfile, source, env)
-
- if env.get('auto_build_solution', 1):
- builddswfile = target[1]
- dswfile = builddswfile.srcnode()
-
- if not dswfile is builddswfile:
-
- try:
- bdsw = open(str(builddswfile), "w+")
- except IOError, detail:
- print 'Unable to open "' + str(dspfile) + '" for writing:',detail,'\n'
- raise
-
- bdsw.write("This is just a placeholder file.\nThe real workspace file is here:\n%s\n" % dswfile.get_abspath())
-
- GenerateDSW(dswfile, source, env)
-
-def GenerateSolution(target, source, env):
- GenerateDSW(target[0], source, env)
-
-def projectEmitter(target, source, env):
- """Sets up the DSP dependencies."""
-
- # todo: Not sure what sets source to what user has passed as target,
- # but this is what happens. When that is fixed, we also won't have
- # to make the user always append env['MSVSPROJECTSUFFIX'] to target.
- if source[0] == target[0]:
- source = []
-
- # make sure the suffix is correct for the version of MSVS we're running.
- (base, suff) = SCons.Util.splitext(str(target[0]))
- suff = env.subst('$MSVSPROJECTSUFFIX')
- target[0] = base + suff
-
- if not source:
- source = 'prj_inputs:'
- source = source + env.subst('$MSVSSCONSCOM', 1)
- source = source + env.subst('$MSVSENCODING', 1)
-
- if env.has_key('buildtarget') and env['buildtarget'] != None:
- if SCons.Util.is_String(env['buildtarget']):
- source = source + ' "%s"' % env['buildtarget']
- elif SCons.Util.is_List(env['buildtarget']):
- for bt in env['buildtarget']:
- if SCons.Util.is_String(bt):
- source = source + ' "%s"' % bt
- else:
- try: source = source + ' "%s"' % bt.get_abspath()
- except AttributeError: raise SCons.Errors.InternalError, \
- "buildtarget can be a string, a node, a list of strings or nodes, or None"
- else:
- try: source = source + ' "%s"' % env['buildtarget'].get_abspath()
- except AttributeError: raise SCons.Errors.InternalError, \
- "buildtarget can be a string, a node, a list of strings or nodes, or None"
-
- if env.has_key('outdir') and env['outdir'] != None:
- if SCons.Util.is_String(env['outdir']):
- source = source + ' "%s"' % env['outdir']
- elif SCons.Util.is_List(env['outdir']):
- for s in env['outdir']:
- if SCons.Util.is_String(s):
- source = source + ' "%s"' % s
- else:
- try: source = source + ' "%s"' % s.get_abspath()
- except AttributeError: raise SCons.Errors.InternalError, \
- "outdir can be a string, a node, a list of strings or nodes, or None"
- else:
- try: source = source + ' "%s"' % env['outdir'].get_abspath()
- except AttributeError: raise SCons.Errors.InternalError, \
- "outdir can be a string, a node, a list of strings or nodes, or None"
-
- if env.has_key('name'):
- if SCons.Util.is_String(env['name']):
- source = source + ' "%s"' % env['name']
- else:
- raise SCons.Errors.InternalError, "name must be a string"
-
- if env.has_key('variant'):
- if SCons.Util.is_String(env['variant']):
- source = source + ' "%s"' % env['variant']
- elif SCons.Util.is_List(env['variant']):
- for variant in env['variant']:
- if SCons.Util.is_String(variant):
- source = source + ' "%s"' % variant
- else:
- raise SCons.Errors.InternalError, "name must be a string or a list of strings"
- else:
- raise SCons.Errors.InternalError, "variant must be a string or a list of strings"
- else:
- raise SCons.Errors.InternalError, "variant must be specified"
-
- for s in _DSPGenerator.srcargs:
- if env.has_key(s):
- if SCons.Util.is_String(env[s]):
- source = source + ' "%s' % env[s]
- elif SCons.Util.is_List(env[s]):
- for t in env[s]:
- if SCons.Util.is_String(t):
- source = source + ' "%s"' % t
- else:
- raise SCons.Errors.InternalError, s + " must be a string or a list of strings"
- else:
- raise SCons.Errors.InternalError, s + " must be a string or a list of strings"
-
- source = source + ' "%s"' % str(target[0])
- source = [SCons.Node.Python.Value(source)]
-
- targetlist = [target[0]]
- sourcelist = source
-
- if env.get('auto_build_solution', 1):
- env['projects'] = targetlist
- t, s = solutionEmitter(target, target, env)
- targetlist = targetlist + t
-
- return (targetlist, sourcelist)
-
-def solutionEmitter(target, source, env):
- """Sets up the DSW dependencies."""
-
- # todo: Not sure what sets source to what user has passed as target,
- # but this is what happens. When that is fixed, we also won't have
- # to make the user always append env['MSVSSOLUTIONSUFFIX'] to target.
- if source[0] == target[0]:
- source = []
-
- # make sure the suffix is correct for the version of MSVS we're running.
- (base, suff) = SCons.Util.splitext(str(target[0]))
- suff = env.subst('$MSVSSOLUTIONSUFFIX')
- target[0] = base + suff
-
- if not source:
- source = 'sln_inputs:'
-
- if env.has_key('name'):
- if SCons.Util.is_String(env['name']):
- source = source + ' "%s"' % env['name']
- else:
- raise SCons.Errors.InternalError, "name must be a string"
-
- if env.has_key('variant'):
- if SCons.Util.is_String(env['variant']):
- source = source + ' "%s"' % env['variant']
- elif SCons.Util.is_List(env['variant']):
- for variant in env['variant']:
- if SCons.Util.is_String(variant):
- source = source + ' "%s"' % variant
- else:
- raise SCons.Errors.InternalError, "name must be a string or a list of strings"
- else:
- raise SCons.Errors.InternalError, "variant must be a string or a list of strings"
- else:
- raise SCons.Errors.InternalError, "variant must be specified"
-
- if env.has_key('slnguid'):
- if SCons.Util.is_String(env['slnguid']):
- source = source + ' "%s"' % env['slnguid']
- else:
- raise SCons.Errors.InternalError, "slnguid must be a string"
-
- if env.has_key('projects'):
- if SCons.Util.is_String(env['projects']):
- source = source + ' "%s"' % env['projects']
- elif SCons.Util.is_List(env['projects']):
- for t in env['projects']:
- if SCons.Util.is_String(t):
- source = source + ' "%s"' % t
-
- source = source + ' "%s"' % str(target[0])
- source = [SCons.Node.Python.Value(source)]
-
- return ([target[0]], source)
-
-projectAction = SCons.Action.Action(GenerateProject, None)
-
-solutionAction = SCons.Action.Action(GenerateSolution, None)
-
-projectBuilder = SCons.Builder.Builder(action = '$MSVSPROJECTCOM',
- suffix = '$MSVSPROJECTSUFFIX',
- emitter = projectEmitter)
-
-solutionBuilder = SCons.Builder.Builder(action = '$MSVSSOLUTIONCOM',
- suffix = '$MSVSSOLUTIONSUFFIX',
- emitter = solutionEmitter)
-
-default_MSVS_SConscript = None
-
-def generate(env):
- """Add Builders and construction variables for Microsoft Visual
- Studio project files to an Environment."""
- try:
- env['BUILDERS']['MSVSProject']
- except KeyError:
- env['BUILDERS']['MSVSProject'] = projectBuilder
-
- try:
- env['BUILDERS']['MSVSSolution']
- except KeyError:
- env['BUILDERS']['MSVSSolution'] = solutionBuilder
-
- env['MSVSPROJECTCOM'] = projectAction
- env['MSVSSOLUTIONCOM'] = solutionAction
-
- if SCons.Script.call_stack:
- # XXX Need to find a way to abstract this; the build engine
- # shouldn't depend on anything in SCons.Script.
- env['MSVSSCONSCRIPT'] = SCons.Script.call_stack[0].sconscript
- else:
- global default_MSVS_SConscript
- if default_MSVS_SConscript is None:
- default_MSVS_SConscript = env.File('SConstruct')
- env['MSVSSCONSCRIPT'] = default_MSVS_SConscript
-
- env['MSVSSCONS'] = '"%s" -c "%s"' % (python_executable, getExecScriptMain(env))
- env['MSVSSCONSFLAGS'] = '-C "${MSVSSCONSCRIPT.dir.abspath}" -f ${MSVSSCONSCRIPT.name}'
- env['MSVSSCONSCOM'] = '$MSVSSCONS $MSVSSCONSFLAGS'
- env['MSVSBUILDCOM'] = '$MSVSSCONSCOM "$MSVSBUILDTARGET"'
- env['MSVSREBUILDCOM'] = '$MSVSSCONSCOM "$MSVSBUILDTARGET"'
- env['MSVSCLEANCOM'] = '$MSVSSCONSCOM -c "$MSVSBUILDTARGET"'
- env['MSVSENCODING'] = 'Windows-1252'
-
- # Set-up ms tools paths for default version
- merge_default_version(env)
-
- version_num, suite = msvs_parse_version(env['MSVS_VERSION'])
- if (version_num < 7.0):
- env['MSVS']['PROJECTSUFFIX'] = '.dsp'
- env['MSVS']['SOLUTIONSUFFIX'] = '.dsw'
- else:
- env['MSVS']['PROJECTSUFFIX'] = '.vcproj'
- env['MSVS']['SOLUTIONSUFFIX'] = '.sln'
-
- env['GET_MSVSPROJECTSUFFIX'] = GetMSVSProjectSuffix
- env['GET_MSVSSOLUTIONSUFFIX'] = GetMSVSSolutionSuffix
- env['MSVSPROJECTSUFFIX'] = '${GET_MSVSPROJECTSUFFIX}'
- env['MSVSSOLUTIONSUFFIX'] = '${GET_MSVSSOLUTIONSUFFIX}'
- env['SCONS_HOME'] = os.environ.get('SCONS_HOME')
-
-def exists(env):
- return detect_msvs()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/mwcc.py b/3rdParty/SCons/scons-local/SCons/Tool/mwcc.py
deleted file mode 100644
index f2966d2..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/mwcc.py
+++ /dev/null
@@ -1,208 +0,0 @@
-"""SCons.Tool.mwcc
-
-Tool-specific initialization for the Metrowerks CodeWarrior compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/mwcc.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-import string
-
-import SCons.Util
-
-def set_vars(env):
- """Set MWCW_VERSION, MWCW_VERSIONS, and some codewarrior environment vars
-
- MWCW_VERSIONS is set to a list of objects representing installed versions
-
- MWCW_VERSION is set to the version object that will be used for building.
- MWCW_VERSION can be set to a string during Environment
- construction to influence which version is chosen, otherwise
- the latest one from MWCW_VERSIONS is used.
-
- Returns true if at least one version is found, false otherwise
- """
- desired = env.get('MWCW_VERSION', '')
-
- # return right away if the variables are already set
- if isinstance(desired, MWVersion):
- return 1
- elif desired is None:
- return 0
-
- versions = find_versions()
- version = None
-
- if desired:
- for v in versions:
- if str(v) == desired:
- version = v
- elif versions:
- version = versions[-1]
-
- env['MWCW_VERSIONS'] = versions
- env['MWCW_VERSION'] = version
-
- if version is None:
- return 0
-
- env.PrependENVPath('PATH', version.clpath)
- env.PrependENVPath('PATH', version.dllpath)
- ENV = env['ENV']
- ENV['CWFolder'] = version.path
- ENV['LM_LICENSE_FILE'] = version.license
- plus = lambda x: '+%s' % x
- ENV['MWCIncludes'] = string.join(map(plus, version.includes), os.pathsep)
- ENV['MWLibraries'] = string.join(map(plus, version.libs), os.pathsep)
- return 1
-
-
-def find_versions():
- """Return a list of MWVersion objects representing installed versions"""
- versions = []
-
- ### This function finds CodeWarrior by reading from the registry on
- ### Windows. Some other method needs to be implemented for other
- ### platforms, maybe something that calls env.WhereIs('mwcc')
-
- if SCons.Util.can_read_reg:
- try:
- HLM = SCons.Util.HKEY_LOCAL_MACHINE
- product = 'SOFTWARE\\Metrowerks\\CodeWarrior\\Product Versions'
- product_key = SCons.Util.RegOpenKeyEx(HLM, product)
-
- i = 0
- while 1:
- name = product + '\\' + SCons.Util.RegEnumKey(product_key, i)
- name_key = SCons.Util.RegOpenKeyEx(HLM, name)
-
- try:
- version = SCons.Util.RegQueryValueEx(name_key, 'VERSION')
- path = SCons.Util.RegQueryValueEx(name_key, 'PATH')
- mwv = MWVersion(version[0], path[0], 'Win32-X86')
- versions.append(mwv)
- except SCons.Util.RegError:
- pass
-
- i = i + 1
-
- except SCons.Util.RegError:
- pass
-
- return versions
-
-
-class MWVersion:
- def __init__(self, version, path, platform):
- self.version = version
- self.path = path
- self.platform = platform
- self.clpath = os.path.join(path, 'Other Metrowerks Tools',
- 'Command Line Tools')
- self.dllpath = os.path.join(path, 'Bin')
-
- # The Metrowerks tools don't store any configuration data so they
- # are totally dumb when it comes to locating standard headers,
- # libraries, and other files, expecting all the information
- # to be handed to them in environment variables. The members set
- # below control what information scons injects into the environment
-
- ### The paths below give a normal build environment in CodeWarrior for
- ### Windows, other versions of CodeWarrior might need different paths.
-
- msl = os.path.join(path, 'MSL')
- support = os.path.join(path, '%s Support' % platform)
-
- self.license = os.path.join(path, 'license.dat')
- self.includes = [msl, support]
- self.libs = [msl, support]
-
- def __str__(self):
- return self.version
-
-
-CSuffixes = ['.c', '.C']
-CXXSuffixes = ['.cc', '.cpp', '.cxx', '.c++', '.C++']
-
-
-def generate(env):
- """Add Builders and construction variables for the mwcc to an Environment."""
- import SCons.Defaults
- import SCons.Tool
-
- set_vars(env)
-
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- for suffix in CSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.CAction)
- shared_obj.add_action(suffix, SCons.Defaults.ShCAction)
-
- for suffix in CXXSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.CXXAction)
- shared_obj.add_action(suffix, SCons.Defaults.ShCXXAction)
-
- env['CCCOMFLAGS'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -nolink -o $TARGET $SOURCES'
-
- env['CC'] = 'mwcc'
- env['CCCOM'] = '$CC $CFLAGS $CCFLAGS $CCCOMFLAGS'
-
- env['CXX'] = 'mwcc'
- env['CXXCOM'] = '$CXX $CXXFLAGS $CCCOMFLAGS'
-
- env['SHCC'] = '$CC'
- env['SHCCFLAGS'] = '$CCFLAGS'
- env['SHCFLAGS'] = '$CFLAGS'
- env['SHCCCOM'] = '$SHCC $SHCFLAGS $SHCCFLAGS $CCCOMFLAGS'
-
- env['SHCXX'] = '$CXX'
- env['SHCXXFLAGS'] = '$CXXFLAGS'
- env['SHCXXCOM'] = '$SHCXX $SHCXXFLAGS $CCCOMFLAGS'
-
- env['CFILESUFFIX'] = '.c'
- env['CXXFILESUFFIX'] = '.cpp'
- env['CPPDEFPREFIX'] = '-D'
- env['CPPDEFSUFFIX'] = ''
- env['INCPREFIX'] = '-I'
- env['INCSUFFIX'] = ''
-
- #env['PCH'] = ?
- #env['PCHSTOP'] = ?
-
-
-def exists(env):
- return set_vars(env)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/mwld.py b/3rdParty/SCons/scons-local/SCons/Tool/mwld.py
deleted file mode 100644
index 6d1bde8..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/mwld.py
+++ /dev/null
@@ -1,107 +0,0 @@
-"""SCons.Tool.mwld
-
-Tool-specific initialization for the Metrowerks CodeWarrior linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/mwld.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Tool
-
-
-def generate(env):
- """Add Builders and construction variables for lib to an Environment."""
- SCons.Tool.createStaticLibBuilder(env)
- SCons.Tool.createSharedLibBuilder(env)
- SCons.Tool.createProgBuilder(env)
-
- env['AR'] = 'mwld'
- env['ARCOM'] = '$AR $ARFLAGS -library -o $TARGET $SOURCES'
-
- env['LIBDIRPREFIX'] = '-L'
- env['LIBDIRSUFFIX'] = ''
- env['LIBLINKPREFIX'] = '-l'
- env['LIBLINKSUFFIX'] = '.lib'
-
- env['LINK'] = 'mwld'
- env['LINKCOM'] = '$LINK $LINKFLAGS -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
-
- env['SHLINK'] = '$LINK'
- env['SHLINKFLAGS'] = '$LINKFLAGS'
- env['SHLINKCOM'] = shlib_action
- env['SHLIBEMITTER']= shlib_emitter
-
-
-def exists(env):
- import SCons.Tool.mwcc
- return SCons.Tool.mwcc.set_vars(env)
-
-
-def shlib_generator(target, source, env, for_signature):
- cmd = ['$SHLINK', '$SHLINKFLAGS', '-shared']
-
- no_import_lib = env.get('no_import_lib', 0)
- if no_import_lib: cmd.extend('-noimplib')
-
- dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX')
- if dll: cmd.extend(['-o', dll])
-
- implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX')
- if implib: cmd.extend(['-implib', implib.get_string(for_signature)])
-
- cmd.extend(['$SOURCES', '$_LIBDIRFLAGS', '$_LIBFLAGS'])
-
- return [cmd]
-
-
-def shlib_emitter(target, source, env):
- dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX')
- no_import_lib = env.get('no_import_lib', 0)
-
- if not dll:
- raise SCons.Errors.UserError, "A shared library should have exactly one target with the suffix: %s" % env.subst("$SHLIBSUFFIX")
-
- if not no_import_lib and \
- not env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX'):
-
- # Append an import library to the list of targets.
- target.append(env.ReplaceIxes(dll,
- 'SHLIBPREFIX', 'SHLIBSUFFIX',
- 'LIBPREFIX', 'LIBSUFFIX'))
-
- return target, source
-
-
-shlib_action = SCons.Action.Action(shlib_generator, generator=1)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/nasm.py b/3rdParty/SCons/scons-local/SCons/Tool/nasm.py
deleted file mode 100644
index ee4fd35..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/nasm.py
+++ /dev/null
@@ -1,72 +0,0 @@
-"""SCons.Tool.nasm
-
-Tool-specific initialization for nasm, the famous Netwide Assembler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/nasm.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-ASSuffixes = ['.s', '.asm', '.ASM']
-ASPPSuffixes = ['.spp', '.SPP', '.sx']
-if SCons.Util.case_sensitive_suffixes('.s', '.S'):
- ASPPSuffixes.extend(['.S'])
-else:
- ASSuffixes.extend(['.S'])
-
-def generate(env):
- """Add Builders and construction variables for nasm to an Environment."""
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
- for suffix in ASSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.ASAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
-
- for suffix in ASPPSuffixes:
- static_obj.add_action(suffix, SCons.Defaults.ASPPAction)
- static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
-
- env['AS'] = 'nasm'
- env['ASFLAGS'] = SCons.Util.CLVar('')
- env['ASPPFLAGS'] = '$ASFLAGS'
- env['ASCOM'] = '$AS $ASFLAGS -o $TARGET $SOURCES'
- env['ASPPCOM'] = '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES'
-
-def exists(env):
- return env.Detect('nasm')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/__init__.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/__init__.py
deleted file mode 100644
index 77a9c7a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/__init__.py
+++ /dev/null
@@ -1,314 +0,0 @@
-"""SCons.Tool.Packaging
-
-SCons Packaging Tool.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Environment
-from SCons.Variables import *
-from SCons.Errors import *
-from SCons.Util import is_List, make_path_relative
-from SCons.Warnings import warn, Warning
-
-import os, imp
-import SCons.Defaults
-
-__all__ = [ 'src_targz', 'src_tarbz2', 'src_zip', 'tarbz2', 'targz', 'zip', 'rpm', 'msi', 'ipk' ]
-
-#
-# Utility and Builder function
-#
-def Tag(env, target, source, *more_tags, **kw_tags):
- """ Tag a file with the given arguments, just sets the accordingly named
- attribute on the file object.
-
- TODO: FIXME
- """
- if not target:
- target=source
- first_tag=None
- else:
- first_tag=source
-
- if first_tag:
- kw_tags[first_tag[0]] = ''
-
- if len(kw_tags) == 0 and len(more_tags) == 0:
- raise UserError, "No tags given."
-
- # XXX: sanity checks
- for x in more_tags:
- kw_tags[x] = ''
-
- if not SCons.Util.is_List(target):
- target=[target]
- else:
- # hmm, sometimes the target list, is a list of a list
- # make sure it is flattened prior to processing.
- # TODO: perhaps some bug ?!?
- target=env.Flatten(target)
-
- for t in target:
- for (k,v) in kw_tags.items():
- # all file tags have to start with PACKAGING_, so we can later
- # differentiate between "normal" object attributes and the
- # packaging attributes. As the user should not be bothered with
- # that, the prefix will be added here if missing.
- #if not k.startswith('PACKAGING_'):
- if k[:10] != 'PACKAGING_':
- k='PACKAGING_'+k
- setattr(t, k, v)
-
-def Package(env, target=None, source=None, **kw):
- """ Entry point for the package tool.
- """
- # check if we need to find the source files ourself
- if not source:
- source = env.FindInstalledFiles()
-
- if len(source)==0:
- raise UserError, "No source for Package() given"
-
- # decide which types of packages shall be built. Can be defined through
- # four mechanisms: command line argument, keyword argument,
- # environment argument and default selection( zip or tar.gz ) in that
- # order.
- try: kw['PACKAGETYPE']=env['PACKAGETYPE']
- except KeyError: pass
-
- if not kw.get('PACKAGETYPE'):
- from SCons.Script import GetOption
- kw['PACKAGETYPE'] = GetOption('package_type')
-
- if kw['PACKAGETYPE'] == None:
- if env['BUILDERS'].has_key('Tar'):
- kw['PACKAGETYPE']='targz'
- elif env['BUILDERS'].has_key('Zip'):
- kw['PACKAGETYPE']='zip'
- else:
- raise UserError, "No type for Package() given"
-
- PACKAGETYPE=kw['PACKAGETYPE']
- if not is_List(PACKAGETYPE):
- PACKAGETYPE=string.split(PACKAGETYPE, ',')
-
- # load the needed packagers.
- def load_packager(type):
- try:
- file,path,desc=imp.find_module(type, __path__)
- return imp.load_module(type, file, path, desc)
- except ImportError, e:
- raise EnvironmentError("packager %s not available: %s"%(type,str(e)))
-
- packagers=map(load_packager, PACKAGETYPE)
-
- # set up targets and the PACKAGEROOT
- try:
- # fill up the target list with a default target name until the PACKAGETYPE
- # list is of the same size as the target list.
- if not target: target = []
-
- size_diff = len(PACKAGETYPE)-len(target)
- default_name = "%(NAME)s-%(VERSION)s"
-
- if size_diff>0:
- default_target = default_name%kw
- target.extend( [default_target]*size_diff )
-
- if not kw.has_key('PACKAGEROOT'):
- kw['PACKAGEROOT'] = default_name%kw
-
- except KeyError, e:
- raise SCons.Errors.UserError( "Missing Packagetag '%s'"%e.args[0] )
-
- # setup the source files
- source=env.arg2nodes(source, env.fs.Entry)
-
- # call the packager to setup the dependencies.
- targets=[]
- try:
- for packager in packagers:
- t=[target.pop(0)]
- t=apply(packager.package, [env,t,source], kw)
- targets.extend(t)
-
- assert( len(target) == 0 )
-
- except KeyError, e:
- raise SCons.Errors.UserError( "Missing Packagetag '%s' for %s packager"\
- % (e.args[0],packager.__name__) )
- except TypeError, e:
- # this exception means that a needed argument for the packager is
- # missing. As our packagers get their "tags" as named function
- # arguments we need to find out which one is missing.
- from inspect import getargspec
- args,varargs,varkw,defaults=getargspec(packager.package)
- if defaults!=None:
- args=args[:-len(defaults)] # throw away arguments with default values
- args.remove('env')
- args.remove('target')
- args.remove('source')
- # now remove any args for which we have a value in kw.
- #args=[x for x in args if not kw.has_key(x)]
- args=filter(lambda x, kw=kw: not kw.has_key(x), args)
-
- if len(args)==0:
- raise # must be a different error, so reraise
- elif len(args)==1:
- raise SCons.Errors.UserError( "Missing Packagetag '%s' for %s packager"\
- % (args[0],packager.__name__) )
- else:
- raise SCons.Errors.UserError( "Missing Packagetags '%s' for %s packager"\
- % (", ".join(args),packager.__name__) )
-
- target=env.arg2nodes(target, env.fs.Entry)
- targets.extend(env.Alias( 'package', targets ))
- return targets
-
-#
-# SCons tool initialization functions
-#
-
-added = None
-
-def generate(env):
- from SCons.Script import AddOption
- global added
- if not added:
- added = 1
- AddOption('--package-type',
- dest='package_type',
- default=None,
- type="string",
- action="store",
- help='The type of package to create.')
-
- try:
- env['BUILDERS']['Package']
- env['BUILDERS']['Tag']
- except KeyError:
- env['BUILDERS']['Package'] = Package
- env['BUILDERS']['Tag'] = Tag
-
-def exists(env):
- return 1
-
-# XXX
-def options(opts):
- opts.AddVariables(
- EnumVariable( 'PACKAGETYPE',
- 'the type of package to create.',
- None, allowed_values=map( str, __all__ ),
- ignorecase=2
- )
- )
-
-#
-# Internal utility functions
-#
-
-def copy_attr(f1, f2):
- """ copies the special packaging file attributes from f1 to f2.
- """
- #pattrs = [x for x in dir(f1) if not hasattr(f2, x) and\
- # x.startswith('PACKAGING_')]
- copyit = lambda x, f2=f2: not hasattr(f2, x) and x[:10] == 'PACKAGING_'
- pattrs = filter(copyit, dir(f1))
- for attr in pattrs:
- setattr(f2, attr, getattr(f1, attr))
-def putintopackageroot(target, source, env, pkgroot, honor_install_location=1):
- """ Uses the CopyAs builder to copy all source files to the directory given
- in pkgroot.
-
- If honor_install_location is set and the copied source file has an
- PACKAGING_INSTALL_LOCATION attribute, the PACKAGING_INSTALL_LOCATION is
- used as the new name of the source file under pkgroot.
-
- The source file will not be copied if it is already under the the pkgroot
- directory.
-
- All attributes of the source file will be copied to the new file.
- """
- # make sure the packageroot is a Dir object.
- if SCons.Util.is_String(pkgroot): pkgroot=env.Dir(pkgroot)
- if not SCons.Util.is_List(source): source=[source]
-
- new_source = []
- for file in source:
- if SCons.Util.is_String(file): file = env.File(file)
-
- if file.is_under(pkgroot):
- new_source.append(file)
- else:
- if hasattr(file, 'PACKAGING_INSTALL_LOCATION') and\
- honor_install_location:
- new_name=make_path_relative(file.PACKAGING_INSTALL_LOCATION)
- else:
- new_name=make_path_relative(file.get_path())
-
- new_file=pkgroot.File(new_name)
- new_file=env.CopyAs(new_file, file)[0]
- copy_attr(file, new_file)
- new_source.append(new_file)
-
- return (target, new_source)
-
-def stripinstallbuilder(target, source, env):
- """ strips the install builder action from the source list and stores
- the final installation location as the "PACKAGING_INSTALL_LOCATION" of
- the source of the source file. This effectively removes the final installed
- files from the source list while remembering the installation location.
-
- It also warns about files which have no install builder attached.
- """
- def has_no_install_location(file):
- return not (file.has_builder() and\
- hasattr(file.builder, 'name') and\
- (file.builder.name=="InstallBuilder" or\
- file.builder.name=="InstallAsBuilder"))
-
- if len(filter(has_no_install_location, source)):
- warn(Warning, "there are files to package which have no\
- InstallBuilder attached, this might lead to irreproducible packages")
-
- n_source=[]
- for s in source:
- if has_no_install_location(s):
- n_source.append(s)
- else:
- for ss in s.sources:
- n_source.append(ss)
- copy_attr(s, ss)
- setattr(ss, 'PACKAGING_INSTALL_LOCATION', s.get_path())
-
- return (target, n_source)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/ipk.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/ipk.py
deleted file mode 100644
index cca98c2..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/ipk.py
+++ /dev/null
@@ -1,185 +0,0 @@
-"""SCons.Tool.Packaging.ipk
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/ipk.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Builder
-import SCons.Node.FS
-import os
-
-from SCons.Tool.packaging import stripinstallbuilder, putintopackageroot
-
-def package(env, target, source, PACKAGEROOT, NAME, VERSION, DESCRIPTION,
- SUMMARY, X_IPK_PRIORITY, X_IPK_SECTION, SOURCE_URL,
- X_IPK_MAINTAINER, X_IPK_DEPENDS, **kw):
- """ this function prepares the packageroot directory for packaging with the
- ipkg builder.
- """
- SCons.Tool.Tool('ipkg').generate(env)
-
- # setup the Ipkg builder
- bld = env['BUILDERS']['Ipkg']
- target, source = stripinstallbuilder(target, source, env)
- target, source = putintopackageroot(target, source, env, PACKAGEROOT)
-
- # This should be overridable from the construction environment,
- # which it is by using ARCHITECTURE=.
- # Guessing based on what os.uname() returns at least allows it
- # to work for both i386 and x86_64 Linux systems.
- archmap = {
- 'i686' : 'i386',
- 'i586' : 'i386',
- 'i486' : 'i386',
- }
-
- buildarchitecture = os.uname()[4]
- buildarchitecture = archmap.get(buildarchitecture, buildarchitecture)
-
- if kw.has_key('ARCHITECTURE'):
- buildarchitecture = kw['ARCHITECTURE']
-
- # setup the kw to contain the mandatory arguments to this fucntion.
- # do this before calling any builder or setup function
- loc=locals()
- del loc['kw']
- kw.update(loc)
- del kw['source'], kw['target'], kw['env']
-
- # generate the specfile
- specfile = gen_ipk_dir(PACKAGEROOT, source, env, kw)
-
- # override the default target.
- if str(target[0])=="%s-%s"%(NAME, VERSION):
- target=[ "%s_%s_%s.ipk"%(NAME, VERSION, buildarchitecture) ]
-
- # now apply the Ipkg builder
- return apply(bld, [env, target, specfile], kw)
-
-def gen_ipk_dir(proot, source, env, kw):
- # make sure the packageroot is a Dir object.
- if SCons.Util.is_String(proot): proot=env.Dir(proot)
-
- # create the specfile builder
- s_bld=SCons.Builder.Builder(
- action = build_specfiles,
- )
-
- # create the specfile targets
- spec_target=[]
- control=proot.Dir('CONTROL')
- spec_target.append(control.File('control'))
- spec_target.append(control.File('conffiles'))
- spec_target.append(control.File('postrm'))
- spec_target.append(control.File('prerm'))
- spec_target.append(control.File('postinst'))
- spec_target.append(control.File('preinst'))
-
- # apply the builder to the specfile targets
- apply(s_bld, [env, spec_target, source], kw)
-
- # the packageroot directory does now contain the specfiles.
- return proot
-
-def build_specfiles(source, target, env):
- """ filter the targets for the needed files and use the variables in env
- to create the specfile.
- """
- #
- # At first we care for the CONTROL/control file, which is the main file for ipk.
- #
- # For this we need to open multiple files in random order, so we store into
- # a dict so they can be easily accessed.
- #
- #
- opened_files={}
- def open_file(needle, haystack):
- try:
- return opened_files[needle]
- except KeyError:
- file=filter(lambda x: x.get_path().rfind(needle)!=-1, haystack)[0]
- opened_files[needle]=open(file.abspath, 'w')
- return opened_files[needle]
-
- control_file=open_file('control', target)
-
- if not env.has_key('X_IPK_DESCRIPTION'):
- env['X_IPK_DESCRIPTION']="%s\n %s"%(env['SUMMARY'],
- env['DESCRIPTION'].replace('\n', '\n '))
-
-
- content = """
-Package: $NAME
-Version: $VERSION
-Priority: $X_IPK_PRIORITY
-Section: $X_IPK_SECTION
-Source: $SOURCE_URL
-Architecture: $ARCHITECTURE
-Maintainer: $X_IPK_MAINTAINER
-Depends: $X_IPK_DEPENDS
-Description: $X_IPK_DESCRIPTION
-"""
-
- control_file.write(env.subst(content))
-
- #
- # now handle the various other files, which purpose it is to set post-,
- # pre-scripts and mark files as config files.
- #
- # We do so by filtering the source files for files which are marked with
- # the "config" tag and afterwards we do the same for x_ipk_postrm,
- # x_ipk_prerm, x_ipk_postinst and x_ipk_preinst tags.
- #
- # The first one will write the name of the file into the file
- # CONTROL/configfiles, the latter add the content of the x_ipk_* variable
- # into the same named file.
- #
- for f in [x for x in source if 'PACKAGING_CONFIG' in dir(x)]:
- config=open_file('conffiles')
- config.write(f.PACKAGING_INSTALL_LOCATION)
- config.write('\n')
-
- for str in 'POSTRM PRERM POSTINST PREINST'.split():
- name="PACKAGING_X_IPK_%s"%str
- for f in [x for x in source if name in dir(x)]:
- file=open_file(name)
- file.write(env[str])
-
- #
- # close all opened files
- for f in opened_files.values():
- f.close()
-
- # call a user specified function
- if env.has_key('CHANGE_SPECFILE'):
- content += env['CHANGE_SPECFILE'](target)
-
- return 0
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/msi.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/msi.py
deleted file mode 100644
index fd61e0b..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/msi.py
+++ /dev/null
@@ -1,526 +0,0 @@
-"""SCons.Tool.packaging.msi
-
-The msi packager.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/msi.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import SCons
-from SCons.Action import Action
-from SCons.Builder import Builder
-
-from xml.dom.minidom import *
-from xml.sax.saxutils import escape
-
-from SCons.Tool.packaging import stripinstallbuilder
-
-#
-# Utility functions
-#
-def convert_to_id(s, id_set):
- """ Some parts of .wxs need an Id attribute (for example: The File and
- Directory directives. The charset is limited to A-Z, a-z, digits,
- underscores, periods. Each Id must begin with a letter or with a
- underscore. Google for "CNDL0015" for information about this.
-
- Requirements:
- * the string created must only contain chars from the target charset.
- * the string created must have a minimal editing distance from the
- original string.
- * the string created must be unique for the whole .wxs file.
-
- Observation:
- * There are 62 chars in the charset.
-
- Idea:
- * filter out forbidden characters. Check for a collision with the help
- of the id_set. Add the number of the number of the collision at the
- end of the created string. Furthermore care for a correct start of
- the string.
- """
- charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789_.'
- if s[0] in '0123456789.':
- s += '_'+s
- id = filter( lambda c : c in charset, s )
-
- # did we already generate an id for this file?
- try:
- return id_set[id][s]
- except KeyError:
- # no we did not so initialize with the id
- if not id_set.has_key(id): id_set[id] = { s : id }
- # there is a collision, generate an id which is unique by appending
- # the collision number
- else: id_set[id][s] = id + str(len(id_set[id]))
-
- return id_set[id][s]
-
-def is_dos_short_file_name(file):
- """ examine if the given file is in the 8.3 form.
- """
- fname, ext = os.path.splitext(file)
- proper_ext = len(ext) == 0 or (2 <= len(ext) <= 4) # the ext contains the dot
- proper_fname = file.isupper() and len(fname) <= 8
-
- return proper_ext and proper_fname
-
-def gen_dos_short_file_name(file, filename_set):
- """ see http://support.microsoft.com/default.aspx?scid=kb;en-us;Q142982
-
- These are no complete 8.3 dos short names. The ~ char is missing and
- replaced with one character from the filename. WiX warns about such
- filenames, since a collision might occur. Google for "CNDL1014" for
- more information.
- """
- # guard this to not confuse the generation
- if is_dos_short_file_name(file):
- return file
-
- fname, ext = os.path.splitext(file) # ext contains the dot
-
- # first try if it suffices to convert to upper
- file = file.upper()
- if is_dos_short_file_name(file):
- return file
-
- # strip forbidden characters.
- forbidden = '."/[]:;=, '
- fname = filter( lambda c : c not in forbidden, fname )
-
- # check if we already generated a filename with the same number:
- # thisis1.txt, thisis2.txt etc.
- duplicate, num = not None, 1
- while duplicate:
- shortname = "%s%s" % (fname[:8-len(str(num))].upper(),\
- str(num))
- if len(ext) >= 2:
- shortname = "%s%s" % (shortname, ext[:4].upper())
-
- duplicate, num = shortname in filename_set, num+1
-
- assert( is_dos_short_file_name(shortname) ), 'shortname is %s, longname is %s' % (shortname, file)
- filename_set.append(shortname)
- return shortname
-
-def create_feature_dict(files):
- """ X_MSI_FEATURE and doc FileTag's can be used to collect files in a
- hierarchy. This function collects the files into this hierarchy.
- """
- dict = {}
-
- def add_to_dict( feature, file ):
- if not SCons.Util.is_List( feature ):
- feature = [ feature ]
-
- for f in feature:
- if not dict.has_key( f ):
- dict[ f ] = [ file ]
- else:
- dict[ f ].append( file )
-
- for file in files:
- if hasattr( file, 'PACKAGING_X_MSI_FEATURE' ):
- add_to_dict(file.PACKAGING_X_MSI_FEATURE, file)
- elif hasattr( file, 'PACKAGING_DOC' ):
- add_to_dict( 'PACKAGING_DOC', file )
- else:
- add_to_dict( 'default', file )
-
- return dict
-
-def generate_guids(root):
- """ generates globally unique identifiers for parts of the xml which need
- them.
-
- Component tags have a special requirement. Their UUID is only allowed to
- change if the list of their contained resources has changed. This allows
- for clean removal and proper updates.
-
- To handle this requirement, the uuid is generated with an md5 hashing the
- whole subtree of a xml node.
- """
- from md5 import md5
-
- # specify which tags need a guid and in which attribute this should be stored.
- needs_id = { 'Product' : 'Id',
- 'Package' : 'Id',
- 'Component' : 'Guid',
- }
-
- # find all XMl nodes matching the key, retrieve their attribute, hash their
- # subtree, convert hash to string and add as a attribute to the xml node.
- for (key,value) in needs_id.items():
- node_list = root.getElementsByTagName(key)
- attribute = value
- for node in node_list:
- hash = md5(node.toxml()).hexdigest()
- hash_str = '%s-%s-%s-%s-%s' % ( hash[:8], hash[8:12], hash[12:16], hash[16:20], hash[20:] )
- node.attributes[attribute] = hash_str
-
-
-
-def string_wxsfile(target, source, env):
- return "building WiX file %s"%( target[0].path )
-
-def build_wxsfile(target, source, env):
- """ compiles a .wxs file from the keywords given in env['msi_spec'] and
- by analyzing the tree of source nodes and their tags.
- """
- file = open(target[0].abspath, 'w')
-
- try:
- # Create a document with the Wix root tag
- doc = Document()
- root = doc.createElement( 'Wix' )
- root.attributes['xmlns']='http://schemas.microsoft.com/wix/2003/01/wi'
- doc.appendChild( root )
-
- filename_set = [] # this is to circumvent duplicates in the shortnames
- id_set = {} # this is to circumvent duplicates in the ids
-
- # Create the content
- build_wxsfile_header_section(root, env)
- build_wxsfile_file_section(root, source, env['NAME'], env['VERSION'], env['VENDOR'], filename_set, id_set)
- generate_guids(root)
- build_wxsfile_features_section(root, source, env['NAME'], env['VERSION'], env['SUMMARY'], id_set)
- build_wxsfile_default_gui(root)
- build_license_file(target[0].get_dir(), env)
-
- # write the xml to a file
- file.write( doc.toprettyxml() )
-
- # call a user specified function
- if env.has_key('CHANGE_SPECFILE'):
- env['CHANGE_SPECFILE'](target, source)
-
- except KeyError, e:
- raise SCons.Errors.UserError( '"%s" package field for MSI is missing.' % e.args[0] )
-
-#
-# setup function
-#
-def create_default_directory_layout(root, NAME, VERSION, VENDOR, filename_set):
- """ Create the wix default target directory layout and return the innermost
- directory.
-
- We assume that the XML tree delivered in the root argument already contains
- the Product tag.
-
- Everything is put under the PFiles directory property defined by WiX.
- After that a directory with the 'VENDOR' tag is placed and then a
- directory with the name of the project and its VERSION. This leads to the
- following TARGET Directory Layout:
- C:\<PFiles>\<Vendor>\<Projectname-Version>\
- Example: C:\Programme\Company\Product-1.2\
- """
- doc = Document()
- d1 = doc.createElement( 'Directory' )
- d1.attributes['Id'] = 'TARGETDIR'
- d1.attributes['Name'] = 'SourceDir'
-
- d2 = doc.createElement( 'Directory' )
- d2.attributes['Id'] = 'ProgramFilesFolder'
- d2.attributes['Name'] = 'PFiles'
-
- d3 = doc.createElement( 'Directory' )
- d3.attributes['Id'] = 'VENDOR_folder'
- d3.attributes['Name'] = escape( gen_dos_short_file_name( VENDOR, filename_set ) )
- d3.attributes['LongName'] = escape( VENDOR )
-
- d4 = doc.createElement( 'Directory' )
- project_folder = "%s-%s" % ( NAME, VERSION )
- d4.attributes['Id'] = 'MY_DEFAULT_FOLDER'
- d4.attributes['Name'] = escape( gen_dos_short_file_name( project_folder, filename_set ) )
- d4.attributes['LongName'] = escape( project_folder )
-
- d1.childNodes.append( d2 )
- d2.childNodes.append( d3 )
- d3.childNodes.append( d4 )
-
- root.getElementsByTagName('Product')[0].childNodes.append( d1 )
-
- return d4
-
-#
-# mandatory and optional file tags
-#
-def build_wxsfile_file_section(root, files, NAME, VERSION, VENDOR, filename_set, id_set):
- """ builds the Component sections of the wxs file with their included files.
-
- Files need to be specified in 8.3 format and in the long name format, long
- filenames will be converted automatically.
-
- Features are specficied with the 'X_MSI_FEATURE' or 'DOC' FileTag.
- """
- root = create_default_directory_layout( root, NAME, VERSION, VENDOR, filename_set )
- components = create_feature_dict( files )
- factory = Document()
-
- def get_directory( node, dir ):
- """ returns the node under the given node representing the directory.
-
- Returns the component node if dir is None or empty.
- """
- if dir == '' or not dir:
- return node
-
- Directory = node
- dir_parts = dir.split(os.path.sep)
-
- # to make sure that our directory ids are unique, the parent folders are
- # consecutively added to upper_dir
- upper_dir = ''
-
- # walk down the xml tree finding parts of the directory
- dir_parts = filter( lambda d: d != '', dir_parts )
- for d in dir_parts[:]:
- already_created = filter( lambda c: c.nodeName == 'Directory' and c.attributes['LongName'].value == escape(d), Directory.childNodes )
-
- if already_created != []:
- Directory = already_created[0]
- dir_parts.remove(d)
- upper_dir += d
- else:
- break
-
- for d in dir_parts:
- nDirectory = factory.createElement( 'Directory' )
- nDirectory.attributes['LongName'] = escape( d )
- nDirectory.attributes['Name'] = escape( gen_dos_short_file_name( d, filename_set ) )
- upper_dir += d
- nDirectory.attributes['Id'] = convert_to_id( upper_dir, id_set )
-
- Directory.childNodes.append( nDirectory )
- Directory = nDirectory
-
- return Directory
-
- for file in files:
- drive, path = os.path.splitdrive( file.PACKAGING_INSTALL_LOCATION )
- filename = os.path.basename( path )
- dirname = os.path.dirname( path )
-
- h = {
- # tagname : default value
- 'PACKAGING_X_MSI_VITAL' : 'yes',
- 'PACKAGING_X_MSI_FILEID' : convert_to_id(filename, id_set),
- 'PACKAGING_X_MSI_LONGNAME' : filename,
- 'PACKAGING_X_MSI_SHORTNAME' : gen_dos_short_file_name(filename, filename_set),
- 'PACKAGING_X_MSI_SOURCE' : file.get_path(),
- }
-
- # fill in the default tags given above.
- for k,v in [ (k, v) for (k,v) in h.items() if not hasattr(file, k) ]:
- setattr( file, k, v )
-
- File = factory.createElement( 'File' )
- File.attributes['LongName'] = escape( file.PACKAGING_X_MSI_LONGNAME )
- File.attributes['Name'] = escape( file.PACKAGING_X_MSI_SHORTNAME )
- File.attributes['Source'] = escape( file.PACKAGING_X_MSI_SOURCE )
- File.attributes['Id'] = escape( file.PACKAGING_X_MSI_FILEID )
- File.attributes['Vital'] = escape( file.PACKAGING_X_MSI_VITAL )
-
- # create the <Component> Tag under which this file should appear
- Component = factory.createElement('Component')
- Component.attributes['DiskId'] = '1'
- Component.attributes['Id'] = convert_to_id( filename, id_set )
-
- # hang the component node under the root node and the file node
- # under the component node.
- Directory = get_directory( root, dirname )
- Directory.childNodes.append( Component )
- Component.childNodes.append( File )
-
-#
-# additional functions
-#
-def build_wxsfile_features_section(root, files, NAME, VERSION, SUMMARY, id_set):
- """ This function creates the <features> tag based on the supplied xml tree.
-
- This is achieved by finding all <component>s and adding them to a default target.
-
- It should be called after the tree has been built completly. We assume
- that a MY_DEFAULT_FOLDER Property is defined in the wxs file tree.
-
- Furthermore a top-level with the name and VERSION of the software will be created.
-
- An PACKAGING_X_MSI_FEATURE can either be a string, where the feature
- DESCRIPTION will be the same as its title or a Tuple, where the first
- part will be its title and the second its DESCRIPTION.
- """
- factory = Document()
- Feature = factory.createElement('Feature')
- Feature.attributes['Id'] = 'complete'
- Feature.attributes['ConfigurableDirectory'] = 'MY_DEFAULT_FOLDER'
- Feature.attributes['Level'] = '1'
- Feature.attributes['Title'] = escape( '%s %s' % (NAME, VERSION) )
- Feature.attributes['Description'] = escape( SUMMARY )
- Feature.attributes['Display'] = 'expand'
-
- for (feature, files) in create_feature_dict(files).items():
- SubFeature = factory.createElement('Feature')
- SubFeature.attributes['Level'] = '1'
-
- if SCons.Util.is_Tuple(feature):
- SubFeature.attributes['Id'] = convert_to_id( feature[0], id_set )
- SubFeature.attributes['Title'] = escape(feature[0])
- SubFeature.attributes['Description'] = escape(feature[1])
- else:
- SubFeature.attributes['Id'] = convert_to_id( feature, id_set )
- if feature=='default':
- SubFeature.attributes['Description'] = 'Main Part'
- SubFeature.attributes['Title'] = 'Main Part'
- elif feature=='PACKAGING_DOC':
- SubFeature.attributes['Description'] = 'Documentation'
- SubFeature.attributes['Title'] = 'Documentation'
- else:
- SubFeature.attributes['Description'] = escape(feature)
- SubFeature.attributes['Title'] = escape(feature)
-
- # build the componentrefs. As one of the design decision is that every
- # file is also a component we walk the list of files and create a
- # reference.
- for f in files:
- ComponentRef = factory.createElement('ComponentRef')
- ComponentRef.attributes['Id'] = convert_to_id( os.path.basename(f.get_path()), id_set )
- SubFeature.childNodes.append(ComponentRef)
-
- Feature.childNodes.append(SubFeature)
-
- root.getElementsByTagName('Product')[0].childNodes.append(Feature)
-
-def build_wxsfile_default_gui(root):
- """ this function adds a default GUI to the wxs file
- """
- factory = Document()
- Product = root.getElementsByTagName('Product')[0]
-
- UIRef = factory.createElement('UIRef')
- UIRef.attributes['Id'] = 'WixUI_Mondo'
- Product.childNodes.append(UIRef)
-
- UIRef = factory.createElement('UIRef')
- UIRef.attributes['Id'] = 'WixUI_ErrorProgressText'
- Product.childNodes.append(UIRef)
-
-def build_license_file(directory, spec):
- """ creates a License.rtf file with the content of "X_MSI_LICENSE_TEXT"
- in the given directory
- """
- name, text = '', ''
-
- try:
- name = spec['LICENSE']
- text = spec['X_MSI_LICENSE_TEXT']
- except KeyError:
- pass # ignore this as X_MSI_LICENSE_TEXT is optional
-
- if name!='' or text!='':
- file = open( os.path.join(directory.get_path(), 'License.rtf'), 'w' )
- file.write('{\\rtf')
- if text!='':
- file.write(text.replace('\n', '\\par '))
- else:
- file.write(name+'\\par\\par')
- file.write('}')
- file.close()
-
-#
-# mandatory and optional package tags
-#
-def build_wxsfile_header_section(root, spec):
- """ Adds the xml file node which define the package meta-data.
- """
- # Create the needed DOM nodes and add them at the correct position in the tree.
- factory = Document()
- Product = factory.createElement( 'Product' )
- Package = factory.createElement( 'Package' )
-
- root.childNodes.append( Product )
- Product.childNodes.append( Package )
-
- # set "mandatory" default values
- if not spec.has_key('X_MSI_LANGUAGE'):
- spec['X_MSI_LANGUAGE'] = '1033' # select english
-
- # mandatory sections, will throw a KeyError if the tag is not available
- Product.attributes['Name'] = escape( spec['NAME'] )
- Product.attributes['Version'] = escape( spec['VERSION'] )
- Product.attributes['Manufacturer'] = escape( spec['VENDOR'] )
- Product.attributes['Language'] = escape( spec['X_MSI_LANGUAGE'] )
- Package.attributes['Description'] = escape( spec['SUMMARY'] )
-
- # now the optional tags, for which we avoid the KeyErrror exception
- if spec.has_key( 'DESCRIPTION' ):
- Package.attributes['Comments'] = escape( spec['DESCRIPTION'] )
-
- if spec.has_key( 'X_MSI_UPGRADE_CODE' ):
- Package.attributes['X_MSI_UPGRADE_CODE'] = escape( spec['X_MSI_UPGRADE_CODE'] )
-
- # We hardcode the media tag as our current model cannot handle it.
- Media = factory.createElement('Media')
- Media.attributes['Id'] = '1'
- Media.attributes['Cabinet'] = 'default.cab'
- Media.attributes['EmbedCab'] = 'yes'
- root.getElementsByTagName('Product')[0].childNodes.append(Media)
-
-# this builder is the entry-point for .wxs file compiler.
-wxs_builder = Builder(
- action = Action( build_wxsfile, string_wxsfile ),
- ensure_suffix = '.wxs' )
-
-def package(env, target, source, PACKAGEROOT, NAME, VERSION,
- DESCRIPTION, SUMMARY, VENDOR, X_MSI_LANGUAGE, **kw):
- # make sure that the Wix Builder is in the environment
- SCons.Tool.Tool('wix').generate(env)
-
- # get put the keywords for the specfile compiler. These are the arguments
- # given to the package function and all optional ones stored in kw, minus
- # the the source, target and env one.
- loc = locals()
- del loc['kw']
- kw.update(loc)
- del kw['source'], kw['target'], kw['env']
-
- # strip the install builder from the source files
- target, source = stripinstallbuilder(target, source, env)
-
- # put the arguments into the env and call the specfile builder.
- env['msi_spec'] = kw
- specfile = apply( wxs_builder, [env, target, source], kw )
-
- # now call the WiX Tool with the built specfile added as a source.
- msifile = env.WiX(target, specfile)
-
- # return the target and source tuple.
- return (msifile, source+[specfile])
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/rpm.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/rpm.py
deleted file mode 100644
index 0380121..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/rpm.py
+++ /dev/null
@@ -1,367 +0,0 @@
-"""SCons.Tool.Packaging.rpm
-
-The rpm packager.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/rpm.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import string
-
-import SCons.Builder
-
-from SCons.Environment import OverrideEnvironment
-from SCons.Tool.packaging import stripinstallbuilder, src_targz
-from SCons.Errors import UserError
-
-def package(env, target, source, PACKAGEROOT, NAME, VERSION,
- PACKAGEVERSION, DESCRIPTION, SUMMARY, X_RPM_GROUP, LICENSE,
- **kw):
- # initialize the rpm tool
- SCons.Tool.Tool('rpm').generate(env)
-
- bld = env['BUILDERS']['Rpm']
-
- # Generate a UserError whenever the target name has been set explicitly,
- # since rpm does not allow for controlling it. This is detected by
- # checking if the target has been set to the default by the Package()
- # Environment function.
- if str(target[0])!="%s-%s"%(NAME, VERSION):
- raise UserError( "Setting target is not supported for rpm." )
- else:
- # This should be overridable from the construction environment,
- # which it is by using ARCHITECTURE=.
- # Guessing based on what os.uname() returns at least allows it
- # to work for both i386 and x86_64 Linux systems.
- archmap = {
- 'i686' : 'i386',
- 'i586' : 'i386',
- 'i486' : 'i386',
- }
-
- buildarchitecture = os.uname()[4]
- buildarchitecture = archmap.get(buildarchitecture, buildarchitecture)
-
- if kw.has_key('ARCHITECTURE'):
- buildarchitecture = kw['ARCHITECTURE']
-
- fmt = '%s-%s-%s.%s.rpm'
- srcrpm = fmt % (NAME, VERSION, PACKAGEVERSION, 'src')
- binrpm = fmt % (NAME, VERSION, PACKAGEVERSION, buildarchitecture)
-
- target = [ srcrpm, binrpm ]
-
- # get the correct arguments into the kw hash
- loc=locals()
- del loc['kw']
- kw.update(loc)
- del kw['source'], kw['target'], kw['env']
-
- # if no "SOURCE_URL" tag is given add a default one.
- if not kw.has_key('SOURCE_URL'):
- #kw['SOURCE_URL']=(str(target[0])+".tar.gz").replace('.rpm', '')
- kw['SOURCE_URL']=string.replace(str(target[0])+".tar.gz", '.rpm', '')
-
- # mangle the source and target list for the rpmbuild
- env = OverrideEnvironment(env, kw)
- target, source = stripinstallbuilder(target, source, env)
- target, source = addspecfile(target, source, env)
- target, source = collectintargz(target, source, env)
-
- # now call the rpm builder to actually build the packet.
- return apply(bld, [env, target, source], kw)
-
-def collectintargz(target, source, env):
- """ Puts all source files into a tar.gz file. """
- # the rpm tool depends on a source package, until this is chagned
- # this hack needs to be here that tries to pack all sources in.
- sources = env.FindSourceFiles()
-
- # filter out the target we are building the source list for.
- #sources = [s for s in sources if not (s in target)]
- sources = filter(lambda s, t=target: not (s in t), sources)
-
- # find the .spec file for rpm and add it since it is not necessarily found
- # by the FindSourceFiles function.
- #sources.extend( [s for s in source if str(s).rfind('.spec')!=-1] )
- spec_file = lambda s: string.rfind(str(s), '.spec') != -1
- sources.extend( filter(spec_file, source) )
-
- # as the source contains the url of the source package this rpm package
- # is built from, we extract the target name
- #tarball = (str(target[0])+".tar.gz").replace('.rpm', '')
- tarball = string.replace(str(target[0])+".tar.gz", '.rpm', '')
- try:
- #tarball = env['SOURCE_URL'].split('/')[-1]
- tarball = string.split(env['SOURCE_URL'], '/')[-1]
- except KeyError, e:
- raise SCons.Errors.UserError( "Missing PackageTag '%s' for RPM packager" % e.args[0] )
-
- tarball = src_targz.package(env, source=sources, target=tarball,
- PACKAGEROOT=env['PACKAGEROOT'], )
-
- return (target, tarball)
-
-def addspecfile(target, source, env):
- specfile = "%s-%s" % (env['NAME'], env['VERSION'])
-
- bld = SCons.Builder.Builder(action = build_specfile,
- suffix = '.spec',
- target_factory = SCons.Node.FS.File)
-
- source.extend(bld(env, specfile, source))
-
- return (target,source)
-
-def build_specfile(target, source, env):
- """ Builds a RPM specfile from a dictionary with string metadata and
- by analyzing a tree of nodes.
- """
- file = open(target[0].abspath, 'w')
- str = ""
-
- try:
- file.write( build_specfile_header(env) )
- file.write( build_specfile_sections(env) )
- file.write( build_specfile_filesection(env, source) )
- file.close()
-
- # call a user specified function
- if env.has_key('CHANGE_SPECFILE'):
- env['CHANGE_SPECFILE'](target, source)
-
- except KeyError, e:
- raise SCons.Errors.UserError( '"%s" package field for RPM is missing.' % e.args[0] )
-
-
-#
-# mandatory and optional package tag section
-#
-def build_specfile_sections(spec):
- """ Builds the sections of a rpm specfile.
- """
- str = ""
-
- mandatory_sections = {
- 'DESCRIPTION' : '\n%%description\n%s\n\n', }
-
- str = str + SimpleTagCompiler(mandatory_sections).compile( spec )
-
- optional_sections = {
- 'DESCRIPTION_' : '%%description -l %s\n%s\n\n',
- 'CHANGELOG' : '%%changelog\n%s\n\n',
- 'X_RPM_PREINSTALL' : '%%pre\n%s\n\n',
- 'X_RPM_POSTINSTALL' : '%%post\n%s\n\n',
- 'X_RPM_PREUNINSTALL' : '%%preun\n%s\n\n',
- 'X_RPM_POSTUNINSTALL' : '%%postun\n%s\n\n',
- 'X_RPM_VERIFY' : '%%verify\n%s\n\n',
-
- # These are for internal use but could possibly be overriden
- 'X_RPM_PREP' : '%%prep\n%s\n\n',
- 'X_RPM_BUILD' : '%%build\n%s\n\n',
- 'X_RPM_INSTALL' : '%%install\n%s\n\n',
- 'X_RPM_CLEAN' : '%%clean\n%s\n\n',
- }
-
- # Default prep, build, install and clean rules
- # TODO: optimize those build steps, to not compile the project a second time
- if not spec.has_key('X_RPM_PREP'):
- spec['X_RPM_PREP'] = '[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"' + '\n%setup -q'
-
- if not spec.has_key('X_RPM_BUILD'):
- spec['X_RPM_BUILD'] = 'mkdir "$RPM_BUILD_ROOT"'
-
- if not spec.has_key('X_RPM_INSTALL'):
- spec['X_RPM_INSTALL'] = 'scons --install-sandbox="$RPM_BUILD_ROOT" "$RPM_BUILD_ROOT"'
-
- if not spec.has_key('X_RPM_CLEAN'):
- spec['X_RPM_CLEAN'] = '[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"'
-
- str = str + SimpleTagCompiler(optional_sections, mandatory=0).compile( spec )
-
- return str
-
-def build_specfile_header(spec):
- """ Builds all section but the %file of a rpm specfile
- """
- str = ""
-
- # first the mandatory sections
- mandatory_header_fields = {
- 'NAME' : '%%define name %s\nName: %%{name}\n',
- 'VERSION' : '%%define version %s\nVersion: %%{version}\n',
- 'PACKAGEVERSION' : '%%define release %s\nRelease: %%{release}\n',
- 'X_RPM_GROUP' : 'Group: %s\n',
- 'SUMMARY' : 'Summary: %s\n',
- 'LICENSE' : 'License: %s\n', }
-
- str = str + SimpleTagCompiler(mandatory_header_fields).compile( spec )
-
- # now the optional tags
- optional_header_fields = {
- 'VENDOR' : 'Vendor: %s\n',
- 'X_RPM_URL' : 'Url: %s\n',
- 'SOURCE_URL' : 'Source: %s\n',
- 'SUMMARY_' : 'Summary(%s): %s\n',
- 'X_RPM_DISTRIBUTION' : 'Distribution: %s\n',
- 'X_RPM_ICON' : 'Icon: %s\n',
- 'X_RPM_PACKAGER' : 'Packager: %s\n',
- 'X_RPM_GROUP_' : 'Group(%s): %s\n',
-
- 'X_RPM_REQUIRES' : 'Requires: %s\n',
- 'X_RPM_PROVIDES' : 'Provides: %s\n',
- 'X_RPM_CONFLICTS' : 'Conflicts: %s\n',
- 'X_RPM_BUILDREQUIRES' : 'BuildRequires: %s\n',
-
- 'X_RPM_SERIAL' : 'Serial: %s\n',
- 'X_RPM_EPOCH' : 'Epoch: %s\n',
- 'X_RPM_AUTOREQPROV' : 'AutoReqProv: %s\n',
- 'X_RPM_EXCLUDEARCH' : 'ExcludeArch: %s\n',
- 'X_RPM_EXCLUSIVEARCH' : 'ExclusiveArch: %s\n',
- 'X_RPM_PREFIX' : 'Prefix: %s\n',
- 'X_RPM_CONFLICTS' : 'Conflicts: %s\n',
-
- # internal use
- 'X_RPM_BUILDROOT' : 'BuildRoot: %s\n', }
-
- # fill in default values:
- # Adding a BuildRequires renders the .rpm unbuildable under System, which
- # are not managed by rpm, since the database to resolve this dependency is
- # missing (take Gentoo as an example)
-# if not s.has_key('x_rpm_BuildRequires'):
-# s['x_rpm_BuildRequires'] = 'scons'
-
- if not spec.has_key('X_RPM_BUILDROOT'):
- spec['X_RPM_BUILDROOT'] = '%{_tmppath}/%{name}-%{version}-%{release}'
-
- str = str + SimpleTagCompiler(optional_header_fields, mandatory=0).compile( spec )
- return str
-
-#
-# mandatory and optional file tags
-#
-def build_specfile_filesection(spec, files):
- """ builds the %file section of the specfile
- """
- str = '%files\n'
-
- if not spec.has_key('X_RPM_DEFATTR'):
- spec['X_RPM_DEFATTR'] = '(-,root,root)'
-
- str = str + '%%defattr %s\n' % spec['X_RPM_DEFATTR']
-
- supported_tags = {
- 'PACKAGING_CONFIG' : '%%config %s',
- 'PACKAGING_CONFIG_NOREPLACE' : '%%config(noreplace) %s',
- 'PACKAGING_DOC' : '%%doc %s',
- 'PACKAGING_UNIX_ATTR' : '%%attr %s',
- 'PACKAGING_LANG_' : '%%lang(%s) %s',
- 'PACKAGING_X_RPM_VERIFY' : '%%verify %s',
- 'PACKAGING_X_RPM_DIR' : '%%dir %s',
- 'PACKAGING_X_RPM_DOCDIR' : '%%docdir %s',
- 'PACKAGING_X_RPM_GHOST' : '%%ghost %s', }
-
- for file in files:
- # build the tagset
- tags = {}
- for k in supported_tags.keys():
- try:
- tags[k]=getattr(file, k)
- except AttributeError:
- pass
-
- # compile the tagset
- str = str + SimpleTagCompiler(supported_tags, mandatory=0).compile( tags )
-
- str = str + ' '
- str = str + file.PACKAGING_INSTALL_LOCATION
- str = str + '\n\n'
-
- return str
-
-class SimpleTagCompiler:
- """ This class is a simple string substition utility:
- the replacement specfication is stored in the tagset dictionary, something
- like:
- { "abc" : "cdef %s ",
- "abc_" : "cdef %s %s" }
-
- the compile function gets a value dictionary, which may look like:
- { "abc" : "ghij",
- "abc_gh" : "ij" }
-
- The resulting string will be:
- "cdef ghij cdef gh ij"
- """
- def __init__(self, tagset, mandatory=1):
- self.tagset = tagset
- self.mandatory = mandatory
-
- def compile(self, values):
- """ compiles the tagset and returns a str containing the result
- """
- def is_international(tag):
- #return tag.endswith('_')
- return tag[-1:] == '_'
-
- def get_country_code(tag):
- return tag[-2:]
-
- def strip_country_code(tag):
- return tag[:-2]
-
- replacements = self.tagset.items()
-
- str = ""
- #domestic = [ (k,v) for k,v in replacements if not is_international(k) ]
- domestic = filter(lambda t, i=is_international: not i(t[0]), replacements)
- for key, replacement in domestic:
- try:
- str = str + replacement % values[key]
- except KeyError, e:
- if self.mandatory:
- raise e
-
- #international = [ (k,v) for k,v in replacements if is_international(k) ]
- international = filter(lambda t, i=is_international: i(t[0]), replacements)
- for key, replacement in international:
- try:
- #int_values_for_key = [ (get_country_code(k),v) for k,v in values.items() if strip_country_code(k) == key ]
- x = filter(lambda t,key=key,s=strip_country_code: s(t[0]) == key, values.items())
- int_values_for_key = map(lambda t,g=get_country_code: (g(t[0]),t[1]), x)
- for v in int_values_for_key:
- str = str + replacement % v
- except KeyError, e:
- if self.mandatory:
- raise e
-
- return str
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_tarbz2.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_tarbz2.py
deleted file mode 100644
index 54daddd..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_tarbz2.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""SCons.Tool.Packaging.tarbz2
-
-The tarbz2 SRC packager.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/src_tarbz2.py 4043 2009/02/23 09:06:45 scons"
-
-from SCons.Tool.packaging import putintopackageroot
-
-def package(env, target, source, PACKAGEROOT, **kw):
- bld = env['BUILDERS']['Tar']
- bld.set_suffix('.tar.bz2')
- target, source = putintopackageroot(target, source, env, PACKAGEROOT, honor_install_location=0)
- return bld(env, target, source, TARFLAGS='-jc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_targz.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_targz.py
deleted file mode 100644
index 6ec6336..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_targz.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""SCons.Tool.Packaging.targz
-
-The targz SRC packager.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/src_targz.py 4043 2009/02/23 09:06:45 scons"
-
-from SCons.Tool.packaging import putintopackageroot
-
-def package(env, target, source, PACKAGEROOT, **kw):
- bld = env['BUILDERS']['Tar']
- bld.set_suffix('.tar.gz')
- target, source = putintopackageroot(target, source, env, PACKAGEROOT, honor_install_location=0)
- return bld(env, target, source, TARFLAGS='-zc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_zip.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_zip.py
deleted file mode 100644
index 54a3a12..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/src_zip.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""SCons.Tool.Packaging.zip
-
-The zip SRC packager.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/src_zip.py 4043 2009/02/23 09:06:45 scons"
-
-from SCons.Tool.packaging import putintopackageroot
-
-def package(env, target, source, PACKAGEROOT, **kw):
- bld = env['BUILDERS']['Zip']
- bld.set_suffix('.zip')
- target, source = putintopackageroot(target, source, env, PACKAGEROOT, honor_install_location=0)
- return bld(env, target, source)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/tarbz2.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/tarbz2.py
deleted file mode 100644
index 9e3df17..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/tarbz2.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""SCons.Tool.Packaging.tarbz2
-
-The tarbz2 SRC packager.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/tarbz2.py 4043 2009/02/23 09:06:45 scons"
-
-from SCons.Tool.packaging import stripinstallbuilder, putintopackageroot
-
-def package(env, target, source, PACKAGEROOT, **kw):
- bld = env['BUILDERS']['Tar']
- bld.set_suffix('.tar.gz')
- target, source = putintopackageroot(target, source, env, PACKAGEROOT)
- target, source = stripinstallbuilder(target, source, env)
- return bld(env, target, source, TARFLAGS='-jc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/targz.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/targz.py
deleted file mode 100644
index a3714a5..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/targz.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""SCons.Tool.Packaging.targz
-
-The targz SRC packager.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/targz.py 4043 2009/02/23 09:06:45 scons"
-
-from SCons.Tool.packaging import stripinstallbuilder, putintopackageroot
-
-def package(env, target, source, PACKAGEROOT, **kw):
- bld = env['BUILDERS']['Tar']
- bld.set_suffix('.tar.gz')
- target, source = stripinstallbuilder(target, source, env)
- target, source = putintopackageroot(target, source, env, PACKAGEROOT)
- return bld(env, target, source, TARFLAGS='-zc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/packaging/zip.py b/3rdParty/SCons/scons-local/SCons/Tool/packaging/zip.py
deleted file mode 100644
index d955c3d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/packaging/zip.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""SCons.Tool.Packaging.zip
-
-The zip SRC packager.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/packaging/zip.py 4043 2009/02/23 09:06:45 scons"
-
-from SCons.Tool.packaging import stripinstallbuilder, putintopackageroot
-
-def package(env, target, source, PACKAGEROOT, **kw):
- bld = env['BUILDERS']['Zip']
- bld.set_suffix('.zip')
- target, source = stripinstallbuilder(target, source, env)
- target, source = putintopackageroot(target, source, env, PACKAGEROOT)
- return bld(env, target, source)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/pdf.py b/3rdParty/SCons/scons-local/SCons/Tool/pdf.py
deleted file mode 100644
index 333f84f..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/pdf.py
+++ /dev/null
@@ -1,78 +0,0 @@
-"""SCons.Tool.pdf
-
-Common PDF Builder definition for various other Tool modules that use it.
-Add an explicit action to run epstopdf to convert .eps files to .pdf
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/pdf.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Builder
-import SCons.Tool
-
-PDFBuilder = None
-
-EpsPdfAction = SCons.Action.Action('$EPSTOPDFCOM', '$EPSTOPDFCOMSTR')
-
-def generate(env):
- try:
- env['BUILDERS']['PDF']
- except KeyError:
- global PDFBuilder
- if PDFBuilder is None:
- PDFBuilder = SCons.Builder.Builder(action = {},
- source_scanner = SCons.Tool.PDFLaTeXScanner,
- prefix = '$PDFPREFIX',
- suffix = '$PDFSUFFIX',
- emitter = {},
- source_ext_match = None,
- single_source=True)
- env['BUILDERS']['PDF'] = PDFBuilder
-
- env['PDFPREFIX'] = ''
- env['PDFSUFFIX'] = '.pdf'
-
-# put the epstopdf builder in this routine so we can add it after
-# the pdftex builder so that one is the default for no source suffix
-def generate2(env):
- bld = env['BUILDERS']['PDF']
- #bld.add_action('.ps', EpsPdfAction) # this is covered by direct Ghostcript action in gs.py
- bld.add_action('.eps', EpsPdfAction)
-
- env['EPSTOPDF'] = 'epstopdf'
- env['EPSTOPDFFLAGS'] = SCons.Util.CLVar('')
- env['EPSTOPDFCOM'] = '$EPSTOPDF $EPSTOPDFFLAGS ${SOURCE} -o ${TARGET}'
-
-def exists(env):
- # This only puts a skeleton Builder in place, so if someone
- # references this Tool directly, it's always "available."
- return 1
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/pdflatex.py b/3rdParty/SCons/scons-local/SCons/Tool/pdflatex.py
deleted file mode 100644
index d5da5b1..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/pdflatex.py
+++ /dev/null
@@ -1,81 +0,0 @@
-"""SCons.Tool.pdflatex
-
-Tool-specific initialization for pdflatex.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/pdflatex.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Util
-import SCons.Tool.pdf
-import SCons.Tool.tex
-
-PDFLaTeXAction = None
-
-def PDFLaTeXAuxFunction(target = None, source= None, env=None):
- result = SCons.Tool.tex.InternalLaTeXAuxAction( PDFLaTeXAction, target, source, env )
- return result
-
-PDFLaTeXAuxAction = None
-
-def generate(env):
- """Add Builders and construction variables for pdflatex to an Environment."""
- global PDFLaTeXAction
- if PDFLaTeXAction is None:
- PDFLaTeXAction = SCons.Action.Action('$PDFLATEXCOM', '$PDFLATEXCOMSTR')
-
- global PDFLaTeXAuxAction
- if PDFLaTeXAuxAction is None:
- PDFLaTeXAuxAction = SCons.Action.Action(PDFLaTeXAuxFunction,
- strfunction=SCons.Tool.tex.TeXLaTeXStrFunction)
-
- import pdf
- pdf.generate(env)
-
- bld = env['BUILDERS']['PDF']
- bld.add_action('.ltx', PDFLaTeXAuxAction)
- bld.add_action('.latex', PDFLaTeXAuxAction)
- bld.add_emitter('.ltx', SCons.Tool.tex.tex_pdf_emitter)
- bld.add_emitter('.latex', SCons.Tool.tex.tex_pdf_emitter)
-
- env['PDFLATEX'] = 'pdflatex'
- env['PDFLATEXFLAGS'] = SCons.Util.CLVar('-interaction=nonstopmode')
- env['PDFLATEXCOM'] = 'cd ${TARGET.dir} && $PDFLATEX $PDFLATEXFLAGS ${SOURCE.file}'
- env['LATEXRETRIES'] = 3
-
-def exists(env):
- return env.Detect('pdflatex')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/pdftex.py b/3rdParty/SCons/scons-local/SCons/Tool/pdftex.py
deleted file mode 100644
index c6e2e30..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/pdftex.py
+++ /dev/null
@@ -1,105 +0,0 @@
-"""SCons.Tool.pdftex
-
-Tool-specific initialization for pdftex.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/pdftex.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Util
-import SCons.Tool.tex
-
-PDFTeXAction = None
-
-# This action might be needed more than once if we are dealing with
-# labels and bibtex.
-PDFLaTeXAction = None
-
-def PDFLaTeXAuxAction(target = None, source= None, env=None):
- result = SCons.Tool.tex.InternalLaTeXAuxAction( PDFLaTeXAction, target, source, env )
- return result
-
-def PDFTeXLaTeXFunction(target = None, source= None, env=None):
- """A builder for TeX and LaTeX that scans the source file to
- decide the "flavor" of the source and then executes the appropriate
- program."""
- if SCons.Tool.tex.is_LaTeX(source):
- result = PDFLaTeXAuxAction(target,source,env)
- else:
- result = PDFTeXAction(target,source,env)
- return result
-
-PDFTeXLaTeXAction = None
-
-def generate(env):
- """Add Builders and construction variables for pdftex to an Environment."""
- global PDFTeXAction
- if PDFTeXAction is None:
- PDFTeXAction = SCons.Action.Action('$PDFTEXCOM', '$PDFTEXCOMSTR')
-
- global PDFLaTeXAction
- if PDFLaTeXAction is None:
- PDFLaTeXAction = SCons.Action.Action("$PDFLATEXCOM", "$PDFLATEXCOMSTR")
-
- global PDFTeXLaTeXAction
- if PDFTeXLaTeXAction is None:
- PDFTeXLaTeXAction = SCons.Action.Action(PDFTeXLaTeXFunction,
- strfunction=SCons.Tool.tex.TeXLaTeXStrFunction)
-
- import pdf
- pdf.generate(env)
-
- bld = env['BUILDERS']['PDF']
- bld.add_action('.tex', PDFTeXLaTeXAction)
- bld.add_emitter('.tex', SCons.Tool.tex.tex_pdf_emitter)
-
- # Add the epstopdf builder after the pdftex builder
- # so pdftex is the default for no source suffix
- pdf.generate2(env)
-
- env['PDFTEX'] = 'pdftex'
- env['PDFTEXFLAGS'] = SCons.Util.CLVar('-interaction=nonstopmode')
- env['PDFTEXCOM'] = 'cd ${TARGET.dir} && $PDFTEX $PDFTEXFLAGS ${SOURCE.file}'
-
- # Duplicate from latex.py. If latex.py goes away, then this is still OK.
- env['PDFLATEX'] = 'pdflatex'
- env['PDFLATEXFLAGS'] = SCons.Util.CLVar('-interaction=nonstopmode')
- env['PDFLATEXCOM'] = 'cd ${TARGET.dir} && $PDFLATEX $PDFLATEXFLAGS ${SOURCE.file}'
- env['LATEXRETRIES'] = 3
-
-def exists(env):
- return env.Detect('pdftex')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/qt.py b/3rdParty/SCons/scons-local/SCons/Tool/qt.py
deleted file mode 100644
index cf99080..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/qt.py
+++ /dev/null
@@ -1,336 +0,0 @@
-
-"""SCons.Tool.qt
-
-Tool-specific initialization for Qt.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/qt.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import re
-
-import SCons.Action
-import SCons.Builder
-import SCons.Defaults
-import SCons.Scanner
-import SCons.Tool
-import SCons.Util
-
-class ToolQtWarning(SCons.Warnings.Warning):
- pass
-
-class GeneratedMocFileNotIncluded(ToolQtWarning):
- pass
-
-class QtdirNotFound(ToolQtWarning):
- pass
-
-SCons.Warnings.enableWarningClass(ToolQtWarning)
-
-header_extensions = [".h", ".hxx", ".hpp", ".hh"]
-if SCons.Util.case_sensitive_suffixes('.h', '.H'):
- header_extensions.append('.H')
-cplusplus = __import__('c++', globals(), locals(), [])
-cxx_suffixes = cplusplus.CXXSuffixes
-
-def checkMocIncluded(target, source, env):
- moc = target[0]
- cpp = source[0]
- # looks like cpp.includes is cleared before the build stage :-(
- # not really sure about the path transformations (moc.cwd? cpp.cwd?) :-/
- path = SCons.Defaults.CScan.path(env, moc.cwd)
- includes = SCons.Defaults.CScan(cpp, env, path)
- if not moc in includes:
- SCons.Warnings.warn(
- GeneratedMocFileNotIncluded,
- "Generated moc file '%s' is not included by '%s'" %
- (str(moc), str(cpp)))
-
-def find_file(filename, paths, node_factory):
- for dir in paths:
- node = node_factory(filename, dir)
- if node.rexists():
- return node
- return None
-
-class _Automoc:
- """
- Callable class, which works as an emitter for Programs, SharedLibraries and
- StaticLibraries.
- """
-
- def __init__(self, objBuilderName):
- self.objBuilderName = objBuilderName
-
- def __call__(self, target, source, env):
- """
- Smart autoscan function. Gets the list of objects for the Program
- or Lib. Adds objects and builders for the special qt files.
- """
- try:
- if int(env.subst('$QT_AUTOSCAN')) == 0:
- return target, source
- except ValueError:
- pass
- try:
- debug = int(env.subst('$QT_DEBUG'))
- except ValueError:
- debug = 0
-
- # some shortcuts used in the scanner
- splitext = SCons.Util.splitext
- objBuilder = getattr(env, self.objBuilderName)
-
- # some regular expressions:
- # Q_OBJECT detection
- q_object_search = re.compile(r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]')
- # cxx and c comment 'eater'
- #comment = re.compile(r'(//.*)|(/\*(([^*])|(\*[^/]))*\*/)')
- # CW: something must be wrong with the regexp. See also bug #998222
- # CURRENTLY THERE IS NO TEST CASE FOR THAT
-
- # The following is kind of hacky to get builders working properly (FIXME)
- objBuilderEnv = objBuilder.env
- objBuilder.env = env
- mocBuilderEnv = env.Moc.env
- env.Moc.env = env
-
- # make a deep copy for the result; MocH objects will be appended
- out_sources = source[:]
-
- for obj in source:
- if not obj.has_builder():
- # binary obj file provided
- if debug:
- print "scons: qt: '%s' seems to be a binary. Discarded." % str(obj)
- continue
- cpp = obj.sources[0]
- if not splitext(str(cpp))[1] in cxx_suffixes:
- if debug:
- print "scons: qt: '%s' is no cxx file. Discarded." % str(cpp)
- # c or fortran source
- continue
- #cpp_contents = comment.sub('', cpp.get_text_contents())
- cpp_contents = cpp.get_text_contents()
- h=None
- for h_ext in header_extensions:
- # try to find the header file in the corresponding source
- # directory
- hname = splitext(cpp.name)[0] + h_ext
- h = find_file(hname, (cpp.get_dir(),), env.File)
- if h:
- if debug:
- print "scons: qt: Scanning '%s' (header of '%s')" % (str(h), str(cpp))
- #h_contents = comment.sub('', h.get_text_contents())
- h_contents = h.get_text_contents()
- break
- if not h and debug:
- print "scons: qt: no header for '%s'." % (str(cpp))
- if h and q_object_search.search(h_contents):
- # h file with the Q_OBJECT macro found -> add moc_cpp
- moc_cpp = env.Moc(h)
- moc_o = objBuilder(moc_cpp)
- out_sources.append(moc_o)
- #moc_cpp.target_scanner = SCons.Defaults.CScan
- if debug:
- print "scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % (str(h), str(moc_cpp))
- if cpp and q_object_search.search(cpp_contents):
- # cpp file with Q_OBJECT macro found -> add moc
- # (to be included in cpp)
- moc = env.Moc(cpp)
- env.Ignore(moc, moc)
- if debug:
- print "scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % (str(cpp), str(moc))
- #moc.source_scanner = SCons.Defaults.CScan
- # restore the original env attributes (FIXME)
- objBuilder.env = objBuilderEnv
- env.Moc.env = mocBuilderEnv
-
- return (target, out_sources)
-
-AutomocShared = _Automoc('SharedObject')
-AutomocStatic = _Automoc('StaticObject')
-
-def _detect(env):
- """Not really safe, but fast method to detect the QT library"""
- QTDIR = None
- if not QTDIR:
- QTDIR = env.get('QTDIR',None)
- if not QTDIR:
- QTDIR = os.environ.get('QTDIR',None)
- if not QTDIR:
- moc = env.WhereIs('moc')
- if moc:
- QTDIR = os.path.dirname(os.path.dirname(moc))
- SCons.Warnings.warn(
- QtdirNotFound,
- "Could not detect qt, using moc executable as a hint (QTDIR=%s)" % QTDIR)
- else:
- QTDIR = None
- SCons.Warnings.warn(
- QtdirNotFound,
- "Could not detect qt, using empty QTDIR")
- return QTDIR
-
-def uicEmitter(target, source, env):
- adjustixes = SCons.Util.adjustixes
- bs = SCons.Util.splitext(str(source[0].name))[0]
- bs = os.path.join(str(target[0].get_dir()),bs)
- # first target (header) is automatically added by builder
- if len(target) < 2:
- # second target is implementation
- target.append(adjustixes(bs,
- env.subst('$QT_UICIMPLPREFIX'),
- env.subst('$QT_UICIMPLSUFFIX')))
- if len(target) < 3:
- # third target is moc file
- target.append(adjustixes(bs,
- env.subst('$QT_MOCHPREFIX'),
- env.subst('$QT_MOCHSUFFIX')))
- return target, source
-
-def uicScannerFunc(node, env, path):
- lookout = []
- lookout.extend(env['CPPPATH'])
- lookout.append(str(node.rfile().dir))
- includes = re.findall("<include.*?>(.*?)</include>", node.get_text_contents())
- result = []
- for incFile in includes:
- dep = env.FindFile(incFile,lookout)
- if dep:
- result.append(dep)
- return result
-
-uicScanner = SCons.Scanner.Base(uicScannerFunc,
- name = "UicScanner",
- node_class = SCons.Node.FS.File,
- node_factory = SCons.Node.FS.File,
- recursive = 0)
-
-def generate(env):
- """Add Builders and construction variables for qt to an Environment."""
- CLVar = SCons.Util.CLVar
- Action = SCons.Action.Action
- Builder = SCons.Builder.Builder
-
- env.SetDefault(QTDIR = _detect(env),
- QT_BINPATH = os.path.join('$QTDIR', 'bin'),
- QT_CPPPATH = os.path.join('$QTDIR', 'include'),
- QT_LIBPATH = os.path.join('$QTDIR', 'lib'),
- QT_MOC = os.path.join('$QT_BINPATH','moc'),
- QT_UIC = os.path.join('$QT_BINPATH','uic'),
- QT_LIB = 'qt', # may be set to qt-mt
-
- QT_AUTOSCAN = 1, # scan for moc'able sources
-
- # Some QT specific flags. I don't expect someone wants to
- # manipulate those ...
- QT_UICIMPLFLAGS = CLVar(''),
- QT_UICDECLFLAGS = CLVar(''),
- QT_MOCFROMHFLAGS = CLVar(''),
- QT_MOCFROMCXXFLAGS = CLVar('-i'),
-
- # suffixes/prefixes for the headers / sources to generate
- QT_UICDECLPREFIX = '',
- QT_UICDECLSUFFIX = '.h',
- QT_UICIMPLPREFIX = 'uic_',
- QT_UICIMPLSUFFIX = '$CXXFILESUFFIX',
- QT_MOCHPREFIX = 'moc_',
- QT_MOCHSUFFIX = '$CXXFILESUFFIX',
- QT_MOCCXXPREFIX = '',
- QT_MOCCXXSUFFIX = '.moc',
- QT_UISUFFIX = '.ui',
-
- # Commands for the qt support ...
- # command to generate header, implementation and moc-file
- # from a .ui file
- QT_UICCOM = [
- CLVar('$QT_UIC $QT_UICDECLFLAGS -o ${TARGETS[0]} $SOURCE'),
- CLVar('$QT_UIC $QT_UICIMPLFLAGS -impl ${TARGETS[0].file} '
- '-o ${TARGETS[1]} $SOURCE'),
- CLVar('$QT_MOC $QT_MOCFROMHFLAGS -o ${TARGETS[2]} ${TARGETS[0]}')],
- # command to generate meta object information for a class
- # declarated in a header
- QT_MOCFROMHCOM = (
- '$QT_MOC $QT_MOCFROMHFLAGS -o ${TARGETS[0]} $SOURCE'),
- # command to generate meta object information for a class
- # declarated in a cpp file
- QT_MOCFROMCXXCOM = [
- CLVar('$QT_MOC $QT_MOCFROMCXXFLAGS -o ${TARGETS[0]} $SOURCE'),
- Action(checkMocIncluded,None)])
-
- # ... and the corresponding builders
- uicBld = Builder(action=SCons.Action.Action('$QT_UICCOM', '$QT_UICCOMSTR'),
- emitter=uicEmitter,
- src_suffix='$QT_UISUFFIX',
- suffix='$QT_UICDECLSUFFIX',
- prefix='$QT_UICDECLPREFIX',
- source_scanner=uicScanner)
- mocBld = Builder(action={}, prefix={}, suffix={})
- for h in header_extensions:
- act = SCons.Action.Action('$QT_MOCFROMHCOM', '$QT_MOCFROMHCOMSTR')
- mocBld.add_action(h, act)
- mocBld.prefix[h] = '$QT_MOCHPREFIX'
- mocBld.suffix[h] = '$QT_MOCHSUFFIX'
- for cxx in cxx_suffixes:
- act = SCons.Action.Action('$QT_MOCFROMCXXCOM', '$QT_MOCFROMCXXCOMSTR')
- mocBld.add_action(cxx, act)
- mocBld.prefix[cxx] = '$QT_MOCCXXPREFIX'
- mocBld.suffix[cxx] = '$QT_MOCCXXSUFFIX'
-
- # register the builders
- env['BUILDERS']['Uic'] = uicBld
- env['BUILDERS']['Moc'] = mocBld
- static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
- static_obj.add_src_builder('Uic')
- shared_obj.add_src_builder('Uic')
-
- # We use the emitters of Program / StaticLibrary / SharedLibrary
- # to scan for moc'able files
- # We can't refer to the builders directly, we have to fetch them
- # as Environment attributes because that sets them up to be called
- # correctly later by our emitter.
- env.AppendUnique(PROGEMITTER =[AutomocStatic],
- SHLIBEMITTER=[AutomocShared],
- LIBEMITTER =[AutomocStatic],
- # Of course, we need to link against the qt libraries
- CPPPATH=["$QT_CPPPATH"],
- LIBPATH=["$QT_LIBPATH"],
- LIBS=['$QT_LIB'])
-
-def exists(env):
- return _detect(env)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/rmic.py b/3rdParty/SCons/scons-local/SCons/Tool/rmic.py
deleted file mode 100644
index a743e04..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/rmic.py
+++ /dev/null
@@ -1,121 +0,0 @@
-"""SCons.Tool.rmic
-
-Tool-specific initialization for rmic.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/rmic.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import string
-
-import SCons.Action
-import SCons.Builder
-import SCons.Node.FS
-import SCons.Util
-
-def emit_rmic_classes(target, source, env):
- """Create and return lists of Java RMI stub and skeleton
- class files to be created from a set of class files.
- """
- class_suffix = env.get('JAVACLASSSUFFIX', '.class')
- classdir = env.get('JAVACLASSDIR')
-
- if not classdir:
- try:
- s = source[0]
- except IndexError:
- classdir = '.'
- else:
- try:
- classdir = s.attributes.java_classdir
- except AttributeError:
- classdir = '.'
- classdir = env.Dir(classdir).rdir()
- if str(classdir) == '.':
- c_ = None
- else:
- c_ = str(classdir) + os.sep
-
- slist = []
- for src in source:
- try:
- classname = src.attributes.java_classname
- except AttributeError:
- classname = str(src)
- if c_ and classname[:len(c_)] == c_:
- classname = classname[len(c_):]
- if class_suffix and classname[:-len(class_suffix)] == class_suffix:
- classname = classname[-len(class_suffix):]
- s = src.rfile()
- s.attributes.java_classdir = classdir
- s.attributes.java_classname = classname
- slist.append(s)
-
- stub_suffixes = ['_Stub']
- if env.get('JAVAVERSION') == '1.4':
- stub_suffixes.append('_Skel')
-
- tlist = []
- for s in source:
- for suff in stub_suffixes:
- fname = string.replace(s.attributes.java_classname, '.', os.sep) + \
- suff + class_suffix
- t = target[0].File(fname)
- t.attributes.java_lookupdir = target[0]
- tlist.append(t)
-
- return tlist, source
-
-RMICAction = SCons.Action.Action('$RMICCOM', '$RMICCOMSTR')
-
-RMICBuilder = SCons.Builder.Builder(action = RMICAction,
- emitter = emit_rmic_classes,
- src_suffix = '$JAVACLASSSUFFIX',
- target_factory = SCons.Node.FS.Dir,
- source_factory = SCons.Node.FS.File)
-
-def generate(env):
- """Add Builders and construction variables for rmic to an Environment."""
- env['BUILDERS']['RMIC'] = RMICBuilder
-
- env['RMIC'] = 'rmic'
- env['RMICFLAGS'] = SCons.Util.CLVar('')
- env['RMICCOM'] = '$RMIC $RMICFLAGS -d ${TARGET.attributes.java_lookupdir} -classpath ${SOURCE.attributes.java_classdir} ${SOURCES.attributes.java_classname}'
- env['JAVACLASSSUFFIX'] = '.class'
-
-def exists(env):
- return env.Detect('rmic')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/rpcgen.py b/3rdParty/SCons/scons-local/SCons/Tool/rpcgen.py
deleted file mode 100644
index 727cdce..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/rpcgen.py
+++ /dev/null
@@ -1,70 +0,0 @@
-"""SCons.Tool.rpcgen
-
-Tool-specific initialization for RPCGEN tools.
-
-Three normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/rpcgen.py 4043 2009/02/23 09:06:45 scons"
-
-from SCons.Builder import Builder
-import SCons.Util
-
-cmd = "cd ${SOURCE.dir} && $RPCGEN -%s $RPCGENFLAGS %s -o ${TARGET.abspath} ${SOURCE.file}"
-
-rpcgen_client = cmd % ('l', '$RPCGENCLIENTFLAGS')
-rpcgen_header = cmd % ('h', '$RPCGENHEADERFLAGS')
-rpcgen_service = cmd % ('m', '$RPCGENSERVICEFLAGS')
-rpcgen_xdr = cmd % ('c', '$RPCGENXDRFLAGS')
-
-def generate(env):
- "Add RPCGEN Builders and construction variables for an Environment."
-
- client = Builder(action=rpcgen_client, suffix='_clnt.c', src_suffix='.x')
- header = Builder(action=rpcgen_header, suffix='.h', src_suffix='.x')
- service = Builder(action=rpcgen_service, suffix='_svc.c', src_suffix='.x')
- xdr = Builder(action=rpcgen_xdr, suffix='_xdr.c', src_suffix='.x')
- env.Append(BUILDERS={'RPCGenClient' : client,
- 'RPCGenHeader' : header,
- 'RPCGenService' : service,
- 'RPCGenXDR' : xdr})
- env['RPCGEN'] = 'rpcgen'
- env['RPCGENFLAGS'] = SCons.Util.CLVar('')
- env['RPCGENCLIENTFLAGS'] = SCons.Util.CLVar('')
- env['RPCGENHEADERFLAGS'] = SCons.Util.CLVar('')
- env['RPCGENSERVICEFLAGS'] = SCons.Util.CLVar('')
- env['RPCGENXDRFLAGS'] = SCons.Util.CLVar('')
-
-def exists(env):
- return env.Detect('rpcgen')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/rpm.py b/3rdParty/SCons/scons-local/SCons/Tool/rpm.py
deleted file mode 100644
index d085d99..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/rpm.py
+++ /dev/null
@@ -1,132 +0,0 @@
-"""SCons.Tool.rpm
-
-Tool-specific initialization for rpm.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-The rpm tool calls the rpmbuild command. The first and only argument should a
-tar.gz consisting of the source file and a specfile.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/rpm.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import re
-import shutil
-import subprocess
-
-import SCons.Builder
-import SCons.Node.FS
-import SCons.Util
-import SCons.Action
-import SCons.Defaults
-
-def get_cmd(source, env):
- tar_file_with_included_specfile = source
- if SCons.Util.is_List(source):
- tar_file_with_included_specfile = source[0]
- return "%s %s %s"%(env['RPM'], env['RPMFLAGS'],
- tar_file_with_included_specfile.abspath )
-
-def build_rpm(target, source, env):
- # create a temporary rpm build root.
- tmpdir = os.path.join( os.path.dirname( target[0].abspath ), 'rpmtemp' )
- if os.path.exists(tmpdir):
- shutil.rmtree(tmpdir)
-
- # now create the mandatory rpm directory structure.
- for d in ['RPMS', 'SRPMS', 'SPECS', 'BUILD']:
- os.makedirs( os.path.join( tmpdir, d ) )
-
- # set the topdir as an rpmflag.
- env.Prepend( RPMFLAGS = '--define \'_topdir %s\'' % tmpdir )
-
- # now call rpmbuild to create the rpm package.
- handle = subprocess.Popen(get_cmd(source, env),
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- shell=True)
- output = handle.stdout.read()
- status = handle.wait()
-
- if status:
- raise SCons.Errors.BuildError( node=target[0],
- errstr=output,
- filename=str(target[0]) )
- else:
- # XXX: assume that LC_ALL=c is set while running rpmbuild
- output_files = re.compile( 'Wrote: (.*)' ).findall( output )
-
- for output, input in zip( output_files, target ):
- rpm_output = os.path.basename(output)
- expected = os.path.basename(input.get_path())
-
- assert expected == rpm_output, "got %s but expected %s" % (rpm_output, expected)
- shutil.copy( output, input.abspath )
-
-
- # cleanup before leaving.
- shutil.rmtree(tmpdir)
-
- return status
-
-def string_rpm(target, source, env):
- try:
- return env['RPMCOMSTR']
- except KeyError:
- return get_cmd(source, env)
-
-rpmAction = SCons.Action.Action(build_rpm, string_rpm)
-
-RpmBuilder = SCons.Builder.Builder(action = SCons.Action.Action('$RPMCOM', '$RPMCOMSTR'),
- source_scanner = SCons.Defaults.DirScanner,
- suffix = '$RPMSUFFIX')
-
-
-
-def generate(env):
- """Add Builders and construction variables for rpm to an Environment."""
- try:
- bld = env['BUILDERS']['Rpm']
- except KeyError:
- bld = RpmBuilder
- env['BUILDERS']['Rpm'] = bld
-
- env.SetDefault(RPM = 'LC_ALL=c rpmbuild')
- env.SetDefault(RPMFLAGS = SCons.Util.CLVar('-ta'))
- env.SetDefault(RPMCOM = rpmAction)
- env.SetDefault(RPMSUFFIX = '.rpm')
-
-def exists(env):
- return env.Detect('rpmbuild')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sgiar.py b/3rdParty/SCons/scons-local/SCons/Tool/sgiar.py
deleted file mode 100644
index 6df401a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sgiar.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""SCons.Tool.sgiar
-
-Tool-specific initialization for SGI ar (library archive). If CC
-exists, static libraries should be built with it, so the prelinker has
-a chance to resolve C++ template instantiations.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sgiar.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-def generate(env):
- """Add Builders and construction variables for ar to an Environment."""
- SCons.Tool.createStaticLibBuilder(env)
-
- if env.Detect('CC'):
- env['AR'] = 'CC'
- env['ARFLAGS'] = SCons.Util.CLVar('-ar')
- env['ARCOM'] = '$AR $ARFLAGS -o $TARGET $SOURCES'
- else:
- env['AR'] = 'ar'
- env['ARFLAGS'] = SCons.Util.CLVar('r')
- env['ARCOM'] = '$AR $ARFLAGS $TARGET $SOURCES'
-
- env['SHLINK'] = '$LINK'
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -shared')
- env['SHLINKCOM'] = '$SHLINK $SHLINKFLAGS -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
- env['LIBPREFIX'] = 'lib'
- env['LIBSUFFIX'] = '.a'
-
-def exists(env):
- return env.Detect('CC') or env.Detect('ar')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sgic++.py b/3rdParty/SCons/scons-local/SCons/Tool/sgic++.py
deleted file mode 100644
index 262ad53..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sgic++.py
+++ /dev/null
@@ -1,58 +0,0 @@
-"""SCons.Tool.sgic++
-
-Tool-specific initialization for MIPSpro C++ on SGI.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sgic++.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-cplusplus = __import__('c++', globals(), locals(), [])
-
-def generate(env):
- """Add Builders and construction variables for SGI MIPS C++ to an Environment."""
-
- cplusplus.generate(env)
-
- env['CXX'] = 'CC'
- env['CXXFLAGS'] = SCons.Util.CLVar('-LANG:std')
- env['SHCXX'] = '$CXX'
- env['SHOBJSUFFIX'] = '.o'
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
-
-def exists(env):
- return env.Detect('CC')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sgicc.py b/3rdParty/SCons/scons-local/SCons/Tool/sgicc.py
deleted file mode 100644
index b8ef3d7..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sgicc.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""SCons.Tool.sgicc
-
-Tool-specific initialization for MIPSPro cc on SGI.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sgicc.py 4043 2009/02/23 09:06:45 scons"
-
-import cc
-
-def generate(env):
- """Add Builders and construction variables for gcc to an Environment."""
- cc.generate(env)
-
- env['CXX'] = 'CC'
- env['SHOBJSUFFIX'] = '.o'
- env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
-
-def exists(env):
- return env.Detect('cc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sgilink.py b/3rdParty/SCons/scons-local/SCons/Tool/sgilink.py
deleted file mode 100644
index a9ac31f..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sgilink.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""SCons.Tool.sgilink
-
-Tool-specific initialization for the SGI MIPSPro linker on SGI.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sgilink.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-import link
-
-linkers = ['CC', 'cc']
-
-def generate(env):
- """Add Builders and construction variables for MIPSPro to an Environment."""
- link.generate(env)
-
- env['LINK'] = env.Detect(linkers) or 'cc'
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -shared')
-
- # __RPATH is set to $_RPATH in the platform specification if that
- # platform supports it.
- env.Append(LINKFLAGS=['$__RPATH'])
- env['RPATHPREFIX'] = '-rpath '
- env['RPATHSUFFIX'] = ''
- env['_RPATH'] = '${_concat(RPATHPREFIX, RPATH, RPATHSUFFIX, __env__)}'
-
-def exists(env):
- return env.Detect(linkers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sunar.py b/3rdParty/SCons/scons-local/SCons/Tool/sunar.py
deleted file mode 100644
index 5f7288e..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sunar.py
+++ /dev/null
@@ -1,67 +0,0 @@
-"""engine.SCons.Tool.sunar
-
-Tool-specific initialization for Solaris (Forte) ar (library archive). If CC
-exists, static libraries should be built with it, so that template
-instantians can be resolved.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sunar.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-def generate(env):
- """Add Builders and construction variables for ar to an Environment."""
- SCons.Tool.createStaticLibBuilder(env)
-
- if env.Detect('CC'):
- env['AR'] = 'CC'
- env['ARFLAGS'] = SCons.Util.CLVar('-xar')
- env['ARCOM'] = '$AR $ARFLAGS -o $TARGET $SOURCES'
- else:
- env['AR'] = 'ar'
- env['ARFLAGS'] = SCons.Util.CLVar('r')
- env['ARCOM'] = '$AR $ARFLAGS $TARGET $SOURCES'
-
- env['SHLINK'] = '$LINK'
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -G')
- env['SHLINKCOM'] = '$SHLINK $SHLINKFLAGS -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
- env['LIBPREFIX'] = 'lib'
- env['LIBSUFFIX'] = '.a'
-
-def exists(env):
- return env.Detect('CC') or env.Detect('ar')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sunc++.py b/3rdParty/SCons/scons-local/SCons/Tool/sunc++.py
deleted file mode 100644
index c2bcf8e..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sunc++.py
+++ /dev/null
@@ -1,106 +0,0 @@
-"""SCons.Tool.sunc++
-
-Tool-specific initialization for C++ on SunOS / Solaris.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sunc++.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons
-
-import os.path
-
-cplusplus = __import__('c++', globals(), locals(), [])
-
-# use the package installer tool lslpp to figure out where cppc and what
-# version of it is installed
-def get_cppc(env):
- cxx = env.get('CXX', None)
- if cxx:
- cppcPath = os.path.dirname(cxx)
- else:
- cppcPath = None
-
- cppcVersion = None
-
- pkginfo = env.subst('$PKGINFO')
- pkgchk = env.subst('$PKGCHK')
-
- def look_pkg_db(pkginfo=pkginfo, pkgchk=pkgchk):
- version = None
- path = None
- for package in ['SPROcpl']:
- cmd = "%s -l %s 2>/dev/null | grep '^ *VERSION:'" % (pkginfo, package)
- line = os.popen(cmd).readline()
- if line:
- version = line.split()[-1]
- cmd = "%s -l %s 2>/dev/null | grep '^Pathname:.*/bin/CC$' | grep -v '/SC[0-9]*\.[0-9]*/'" % (pkgchk, package)
- line = os.popen(cmd).readline()
- if line:
- path = os.path.dirname(line.split()[-1])
- break
-
- return path, version
-
- path, version = look_pkg_db()
- if path and version:
- cppcPath, cppcVersion = path, version
-
- return (cppcPath, 'CC', 'CC', cppcVersion)
-
-def generate(env):
- """Add Builders and construction variables for SunPRO C++."""
- path, cxx, shcxx, version = get_cppc(env)
- if path:
- cxx = os.path.join(path, cxx)
- shcxx = os.path.join(path, shcxx)
-
- cplusplus.generate(env)
-
- env['CXX'] = cxx
- env['SHCXX'] = shcxx
- env['CXXVERSION'] = version
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS -KPIC')
- env['SHOBJPREFIX'] = 'so_'
- env['SHOBJSUFFIX'] = '.o'
-
-def exists(env):
- path, cxx, shcxx, version = get_cppc(env)
- if path and cxx:
- cppc = os.path.join(path, cxx)
- if os.path.exists(cppc):
- return cppc
- return None
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/suncc.py b/3rdParty/SCons/scons-local/SCons/Tool/suncc.py
deleted file mode 100644
index 5f171d3..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/suncc.py
+++ /dev/null
@@ -1,58 +0,0 @@
-"""SCons.Tool.suncc
-
-Tool-specific initialization for Sun Solaris (Forte) CC and cc.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/suncc.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-import cc
-
-def generate(env):
- """
- Add Builders and construction variables for Forte C and C++ compilers
- to an Environment.
- """
- cc.generate(env)
-
- env['CXX'] = 'CC'
- env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS -KPIC')
- env['SHOBJPREFIX'] = 'so_'
- env['SHOBJSUFFIX'] = '.o'
-
-def exists(env):
- return env.Detect('CC')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sunf77.py b/3rdParty/SCons/scons-local/SCons/Tool/sunf77.py
deleted file mode 100644
index 95e35bf..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sunf77.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""SCons.Tool.sunf77
-
-Tool-specific initialization for sunf77, the Sun Studio F77 compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sunf77.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-from FortranCommon import add_all_to_env
-
-compilers = ['sunf77', 'f77']
-
-def generate(env):
- """Add Builders and construction variables for sunf77 to an Environment."""
- add_all_to_env(env)
-
- fcomp = env.Detect(compilers) or 'f77'
- env['FORTRAN'] = fcomp
- env['F77'] = fcomp
-
- env['SHFORTRAN'] = '$FORTRAN'
- env['SHF77'] = '$F77'
-
- env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -KPIC')
- env['SHF77FLAGS'] = SCons.Util.CLVar('$F77FLAGS -KPIC')
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sunf90.py b/3rdParty/SCons/scons-local/SCons/Tool/sunf90.py
deleted file mode 100644
index db2bfda..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sunf90.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""SCons.Tool.sunf90
-
-Tool-specific initialization for sunf90, the Sun Studio F90 compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sunf90.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-from FortranCommon import add_all_to_env
-
-compilers = ['sunf90', 'f90']
-
-def generate(env):
- """Add Builders and construction variables for sun f90 compiler to an
- Environment."""
- add_all_to_env(env)
-
- fcomp = env.Detect(compilers) or 'f90'
- env['FORTRAN'] = fcomp
- env['F90'] = fcomp
-
- env['SHFORTRAN'] = '$FORTRAN'
- env['SHF90'] = '$F90'
-
- env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -KPIC')
- env['SHF90FLAGS'] = SCons.Util.CLVar('$F90FLAGS -KPIC')
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sunf95.py b/3rdParty/SCons/scons-local/SCons/Tool/sunf95.py
deleted file mode 100644
index 3a1b326..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sunf95.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""SCons.Tool.sunf95
-
-Tool-specific initialization for sunf95, the Sun Studio F95 compiler.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sunf95.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Util
-
-from FortranCommon import add_all_to_env
-
-compilers = ['sunf95', 'f95']
-
-def generate(env):
- """Add Builders and construction variables for sunf95 to an
- Environment."""
- add_all_to_env(env)
-
- fcomp = env.Detect(compilers) or 'f95'
- env['FORTRAN'] = fcomp
- env['F95'] = fcomp
-
- env['SHFORTRAN'] = '$FORTRAN'
- env['SHF95'] = '$F95'
-
- env['SHFORTRANFLAGS'] = SCons.Util.CLVar('$FORTRANFLAGS -KPIC')
- env['SHF95FLAGS'] = SCons.Util.CLVar('$F95FLAGS -KPIC')
-
-def exists(env):
- return env.Detect(compilers)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sunlink.py b/3rdParty/SCons/scons-local/SCons/Tool/sunlink.py
deleted file mode 100644
index 3e97aa9..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/sunlink.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""SCons.Tool.sunlink
-
-Tool-specific initialization for the Sun Solaris (Forte) linker.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/sunlink.py 4043 2009/02/23 09:06:45 scons"
-
-import os
-import os.path
-
-import SCons.Util
-
-import link
-
-ccLinker = None
-
-# search for the acc compiler and linker front end
-
-try:
- dirs = os.listdir('/opt')
-except (IOError, OSError):
- # Not being able to read the directory because it doesn't exist
- # (IOError) or isn't readable (OSError) is okay.
- dirs = []
-
-for d in dirs:
- linker = '/opt/' + d + '/bin/CC'
- if os.path.exists(linker):
- ccLinker = linker
- break
-
-def generate(env):
- """Add Builders and construction variables for Forte to an Environment."""
- link.generate(env)
-
- env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -G')
-
- env.Append(LINKFLAGS=['$__RPATH'])
- env['RPATHPREFIX'] = '-R'
- env['RPATHSUFFIX'] = ''
- env['_RPATH'] = '${_concat(RPATHPREFIX, RPATH, RPATHSUFFIX, __env__)}'
-
-def exists(env):
- return ccLinker
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/swig.py b/3rdParty/SCons/scons-local/SCons/Tool/swig.py
deleted file mode 100644
index 947cfde..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/swig.py
+++ /dev/null
@@ -1,155 +0,0 @@
-"""SCons.Tool.swig
-
-Tool-specific initialization for swig.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/swig.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import re
-import string
-
-import SCons.Action
-import SCons.Defaults
-import SCons.Scanner
-import SCons.Tool
-import SCons.Util
-
-SwigAction = SCons.Action.Action('$SWIGCOM', '$SWIGCOMSTR')
-
-def swigSuffixEmitter(env, source):
- if '-c++' in SCons.Util.CLVar(env.subst("$SWIGFLAGS", source=source)):
- return '$SWIGCXXFILESUFFIX'
- else:
- return '$SWIGCFILESUFFIX'
-
-# Match '%module test', as well as '%module(directors="1") test'
-# Also allow for test to be quoted (SWIG permits double quotes, but not single)
-_reModule = re.compile(r'%module(\s*\(.*\))?\s+("?)(.+)\2')
-
-def _find_modules(src):
- """Find all modules referenced by %module lines in `src`, a SWIG .i file.
- Returns a list of all modules, and a flag set if SWIG directors have
- been requested (SWIG will generate an additional header file in this
- case.)"""
- directors = 0
- mnames = []
- matches = _reModule.findall(open(src).read())
- for m in matches:
- mnames.append(m[2])
- directors = directors or string.find(m[0], 'directors') >= 0
- return mnames, directors
-
-def _add_director_header_targets(target, env):
- # Directors only work with C++ code, not C
- suffix = env.subst(env['SWIGCXXFILESUFFIX'])
- # For each file ending in SWIGCXXFILESUFFIX, add a new target director
- # header by replacing the ending with SWIGDIRECTORSUFFIX.
- for x in target[:]:
- n = x.name
- d = x.dir
- if n[-len(suffix):] == suffix:
- target.append(d.File(n[:-len(suffix)] + env['SWIGDIRECTORSUFFIX']))
-
-def _swigEmitter(target, source, env):
- swigflags = env.subst("$SWIGFLAGS", target=target, source=source)
- flags = SCons.Util.CLVar(swigflags)
- for src in source:
- src = str(src.rfile())
- mnames = None
- if "-python" in flags and "-noproxy" not in flags:
- if mnames is None:
- mnames, directors = _find_modules(src)
- if directors:
- _add_director_header_targets(target, env)
- target.extend(map(lambda m, d=target[0].dir:
- d.File(m + ".py"), mnames))
- if "-java" in flags:
- if mnames is None:
- mnames, directors = _find_modules(src)
- if directors:
- _add_director_header_targets(target, env)
- java_files = map(lambda m: [m + ".java", m + "JNI.java"], mnames)
- java_files = SCons.Util.flatten(java_files)
- outdir = env.subst('$SWIGOUTDIR', target=target, source=source)
- if outdir:
- java_files = map(lambda j, o=outdir: os.path.join(o, j), java_files)
- java_files = map(env.fs.File, java_files)
- for jf in java_files:
- t_from_s = lambda t, p, s, x: t.dir
- SCons.Util.AddMethod(jf, t_from_s, 'target_from_source')
- target.extend(java_files)
- return (target, source)
-
-def generate(env):
- """Add Builders and construction variables for swig to an Environment."""
- c_file, cxx_file = SCons.Tool.createCFileBuilders(env)
-
- c_file.suffix['.i'] = swigSuffixEmitter
- cxx_file.suffix['.i'] = swigSuffixEmitter
-
- c_file.add_action('.i', SwigAction)
- c_file.add_emitter('.i', _swigEmitter)
- cxx_file.add_action('.i', SwigAction)
- cxx_file.add_emitter('.i', _swigEmitter)
-
- java_file = SCons.Tool.CreateJavaFileBuilder(env)
-
- java_file.suffix['.i'] = swigSuffixEmitter
-
- java_file.add_action('.i', SwigAction)
- java_file.add_emitter('.i', _swigEmitter)
-
- env['SWIG'] = 'swig'
- env['SWIGFLAGS'] = SCons.Util.CLVar('')
- env['SWIGDIRECTORSUFFIX'] = '_wrap.h'
- env['SWIGCFILESUFFIX'] = '_wrap$CFILESUFFIX'
- env['SWIGCXXFILESUFFIX'] = '_wrap$CXXFILESUFFIX'
- env['_SWIGOUTDIR'] = r'${"-outdir \"%s\"" % SWIGOUTDIR}'
- env['SWIGPATH'] = []
- env['SWIGINCPREFIX'] = '-I'
- env['SWIGINCSUFFIX'] = ''
- env['_SWIGINCFLAGS'] = '$( ${_concat(SWIGINCPREFIX, SWIGPATH, SWIGINCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
- env['SWIGCOM'] = '$SWIG -o $TARGET ${_SWIGOUTDIR} ${_SWIGINCFLAGS} $SWIGFLAGS $SOURCES'
-
- expr = '^[ \t]*%[ \t]*(?:include|import|extern)[ \t]*(<|"?)([^>\s"]+)(?:>|"?)'
- scanner = SCons.Scanner.ClassicCPP("SWIGScan", ".i", "SWIGPATH", expr)
-
- env.Append(SCANNERS = scanner)
-
-def exists(env):
- return env.Detect(['swig'])
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/tar.py b/3rdParty/SCons/scons-local/SCons/Tool/tar.py
deleted file mode 100644
index b573282..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/tar.py
+++ /dev/null
@@ -1,73 +0,0 @@
-"""SCons.Tool.tar
-
-Tool-specific initialization for tar.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/tar.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Action
-import SCons.Builder
-import SCons.Defaults
-import SCons.Node.FS
-import SCons.Util
-
-tars = ['tar', 'gtar']
-
-TarAction = SCons.Action.Action('$TARCOM', '$TARCOMSTR')
-
-TarBuilder = SCons.Builder.Builder(action = TarAction,
- source_factory = SCons.Node.FS.Entry,
- source_scanner = SCons.Defaults.DirScanner,
- suffix = '$TARSUFFIX',
- multi = 1)
-
-
-def generate(env):
- """Add Builders and construction variables for tar to an Environment."""
- try:
- bld = env['BUILDERS']['Tar']
- except KeyError:
- bld = TarBuilder
- env['BUILDERS']['Tar'] = bld
-
- env['TAR'] = env.Detect(tars) or 'gtar'
- env['TARFLAGS'] = SCons.Util.CLVar('-c')
- env['TARCOM'] = '$TAR $TARFLAGS -f $TARGET $SOURCES'
- env['TARSUFFIX'] = '.tar'
-
-def exists(env):
- return env.Detect(tars)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/tex.py b/3rdParty/SCons/scons-local/SCons/Tool/tex.py
deleted file mode 100644
index cbbee2d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/tex.py
+++ /dev/null
@@ -1,646 +0,0 @@
-"""SCons.Tool.tex
-
-Tool-specific initialization for TeX.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/tex.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import re
-import string
-import shutil
-
-import SCons.Action
-import SCons.Node
-import SCons.Node.FS
-import SCons.Util
-import SCons.Scanner.LaTeX
-
-Verbose = False
-
-must_rerun_latex = True
-
-# these are files that just need to be checked for changes and then rerun latex
-check_suffixes = ['.toc', '.lof', '.lot', '.out', '.nav', '.snm']
-
-# these are files that require bibtex or makeindex to be run when they change
-all_suffixes = check_suffixes + ['.bbl', '.idx', '.nlo', '.glo']
-
-#
-# regular expressions used to search for Latex features
-# or outputs that require rerunning latex
-#
-# search for all .aux files opened by latex (recorded in the .log file)
-openout_aux_re = re.compile(r"\\openout.*`(.*\.aux)'")
-
-#printindex_re = re.compile(r"^[^%]*\\printindex", re.MULTILINE)
-#printnomenclature_re = re.compile(r"^[^%]*\\printnomenclature", re.MULTILINE)
-#printglossary_re = re.compile(r"^[^%]*\\printglossary", re.MULTILINE)
-
-# search to find rerun warnings
-warning_rerun_str = '(^LaTeX Warning:.*Rerun)|(^Package \w+ Warning:.*Rerun)'
-warning_rerun_re = re.compile(warning_rerun_str, re.MULTILINE)
-
-# search to find citation rerun warnings
-rerun_citations_str = "^LaTeX Warning:.*\n.*Rerun to get citations correct"
-rerun_citations_re = re.compile(rerun_citations_str, re.MULTILINE)
-
-# search to find undefined references or citations warnings
-undefined_references_str = '(^LaTeX Warning:.*undefined references)|(^Package \w+ Warning:.*undefined citations)'
-undefined_references_re = re.compile(undefined_references_str, re.MULTILINE)
-
-# used by the emitter
-auxfile_re = re.compile(r".", re.MULTILINE)
-tableofcontents_re = re.compile(r"^[^%\n]*\\tableofcontents", re.MULTILINE)
-makeindex_re = re.compile(r"^[^%\n]*\\makeindex", re.MULTILINE)
-bibliography_re = re.compile(r"^[^%\n]*\\bibliography", re.MULTILINE)
-listoffigures_re = re.compile(r"^[^%\n]*\\listoffigures", re.MULTILINE)
-listoftables_re = re.compile(r"^[^%\n]*\\listoftables", re.MULTILINE)
-hyperref_re = re.compile(r"^[^%\n]*\\usepackage.*\{hyperref\}", re.MULTILINE)
-makenomenclature_re = re.compile(r"^[^%\n]*\\makenomenclature", re.MULTILINE)
-makeglossary_re = re.compile(r"^[^%\n]*\\makeglossary", re.MULTILINE)
-beamer_re = re.compile(r"^[^%\n]*\\documentclass\{beamer\}", re.MULTILINE)
-
-# search to find all files included by Latex
-include_re = re.compile(r'^[^%\n]*\\(?:include|input){([^}]*)}', re.MULTILINE)
-
-# search to find all graphics files included by Latex
-includegraphics_re = re.compile(r'^[^%\n]*\\(?:includegraphics(?:\[[^\]]+\])?){([^}]*)}', re.MULTILINE)
-
-# search to find all files opened by Latex (recorded in .log file)
-openout_re = re.compile(r"\\openout.*`(.*)'")
-
-# list of graphics file extensions for TeX and LaTeX
-TexGraphics = SCons.Scanner.LaTeX.TexGraphics
-LatexGraphics = SCons.Scanner.LaTeX.LatexGraphics
-
-# An Action sufficient to build any generic tex file.
-TeXAction = None
-
-# An action to build a latex file. This action might be needed more
-# than once if we are dealing with labels and bibtex.
-LaTeXAction = None
-
-# An action to run BibTeX on a file.
-BibTeXAction = None
-
-# An action to run MakeIndex on a file.
-MakeIndexAction = None
-
-# An action to run MakeIndex (for nomencl) on a file.
-MakeNclAction = None
-
-# An action to run MakeIndex (for glossary) on a file.
-MakeGlossaryAction = None
-
-# Used as a return value of modify_env_var if the variable is not set.
-_null = SCons.Scanner.LaTeX._null
-
-modify_env_var = SCons.Scanner.LaTeX.modify_env_var
-
-def FindFile(name,suffixes,paths,env,requireExt=False):
- if requireExt:
- name,ext = SCons.Util.splitext(name)
- # if the user gave an extension use it.
- if ext:
- name = name + ext
- if Verbose:
- print " searching for '%s' with extensions: " % name,suffixes
-
- for path in paths:
- testName = os.path.join(path,name)
- if Verbose:
- print " look for '%s'" % testName
- if os.path.exists(testName):
- if Verbose:
- print " found '%s'" % testName
- return env.fs.File(testName)
- else:
- name_ext = SCons.Util.splitext(testName)[1]
- if name_ext:
- continue
-
- # if no suffix try adding those passed in
- for suffix in suffixes:
- testNameExt = testName + suffix
- if Verbose:
- print " look for '%s'" % testNameExt
-
- if os.path.exists(testNameExt):
- if Verbose:
- print " found '%s'" % testNameExt
- return env.fs.File(testNameExt)
- if Verbose:
- print " did not find '%s'" % name
- return None
-
-def InternalLaTeXAuxAction(XXXLaTeXAction, target = None, source= None, env=None):
- """A builder for LaTeX files that checks the output in the aux file
- and decides how many times to use LaTeXAction, and BibTeXAction."""
-
- global must_rerun_latex
-
- # This routine is called with two actions. In this file for DVI builds
- # with LaTeXAction and from the pdflatex.py with PDFLaTeXAction
- # set this up now for the case where the user requests a different extension
- # for the target filename
- if (XXXLaTeXAction == LaTeXAction):
- callerSuffix = ".dvi"
- else:
- callerSuffix = env['PDFSUFFIX']
-
- basename = SCons.Util.splitext(str(source[0]))[0]
- basedir = os.path.split(str(source[0]))[0]
- basefile = os.path.split(str(basename))[1]
- abspath = os.path.abspath(basedir)
-
- targetext = os.path.splitext(str(target[0]))[1]
- targetdir = os.path.split(str(target[0]))[0]
-
- saved_env = {}
- for var in SCons.Scanner.LaTeX.LaTeX.env_variables:
- saved_env[var] = modify_env_var(env, var, abspath)
-
- # Create base file names with the target directory since the auxiliary files
- # will be made there. That's because the *COM variables have the cd
- # command in the prolog. We check
- # for the existence of files before opening them--even ones like the
- # aux file that TeX always creates--to make it possible to write tests
- # with stubs that don't necessarily generate all of the same files.
-
- targetbase = os.path.join(targetdir, basefile)
-
- # if there is a \makeindex there will be a .idx and thus
- # we have to run makeindex at least once to keep the build
- # happy even if there is no index.
- # Same for glossaries and nomenclature
- src_content = source[0].get_text_contents()
- run_makeindex = makeindex_re.search(src_content) and not os.path.exists(targetbase + '.idx')
- run_nomenclature = makenomenclature_re.search(src_content) and not os.path.exists(targetbase + '.nlo')
- run_glossary = makeglossary_re.search(src_content) and not os.path.exists(targetbase + '.glo')
-
- saved_hashes = {}
- suffix_nodes = {}
-
- for suffix in all_suffixes:
- theNode = env.fs.File(targetbase + suffix)
- suffix_nodes[suffix] = theNode
- saved_hashes[suffix] = theNode.get_csig()
-
- if Verbose:
- print "hashes: ",saved_hashes
-
- must_rerun_latex = True
-
- #
- # routine to update MD5 hash and compare
- #
- # TODO(1.5): nested scopes
- def check_MD5(filenode, suffix, saved_hashes=saved_hashes, targetbase=targetbase):
- global must_rerun_latex
- # two calls to clear old csig
- filenode.clear_memoized_values()
- filenode.ninfo = filenode.new_ninfo()
- new_md5 = filenode.get_csig()
-
- if saved_hashes[suffix] == new_md5:
- if Verbose:
- print "file %s not changed" % (targetbase+suffix)
- return False # unchanged
- saved_hashes[suffix] = new_md5
- must_rerun_latex = True
- if Verbose:
- print "file %s changed, rerunning Latex, new hash = " % (targetbase+suffix), new_md5
- return True # changed
-
- # generate the file name that latex will generate
- resultfilename = targetbase + callerSuffix
-
- count = 0
-
- while (must_rerun_latex and count < int(env.subst('$LATEXRETRIES'))) :
- result = XXXLaTeXAction(target, source, env)
- if result != 0:
- return result
-
- count = count + 1
-
- must_rerun_latex = False
- # Decide if various things need to be run, or run again.
-
- # Read the log file to find all .aux files
- logfilename = targetbase + '.log'
- logContent = ''
- auxfiles = []
- if os.path.exists(logfilename):
- logContent = open(logfilename, "rb").read()
- auxfiles = openout_aux_re.findall(logContent)
-
- # Now decide if bibtex will need to be run.
- # The information that bibtex reads from the .aux file is
- # pass-independent. If we find (below) that the .bbl file is unchanged,
- # then the last latex saw a correct bibliography.
- # Therefore only do this on the first pass
- if count == 1:
- for auxfilename in auxfiles:
- target_aux = os.path.join(targetdir, auxfilename)
- if os.path.exists(target_aux):
- content = open(target_aux, "rb").read()
- if string.find(content, "bibdata") != -1:
- if Verbose:
- print "Need to run bibtex"
- bibfile = env.fs.File(targetbase)
- result = BibTeXAction(bibfile, bibfile, env)
- if result != 0:
- return result
- must_rerun_latex = check_MD5(suffix_nodes['.bbl'],'.bbl')
- break
-
- # Now decide if latex will need to be run again due to index.
- if check_MD5(suffix_nodes['.idx'],'.idx') or (count == 1 and run_makeindex):
- # We must run makeindex
- if Verbose:
- print "Need to run makeindex"
- idxfile = suffix_nodes['.idx']
- result = MakeIndexAction(idxfile, idxfile, env)
- if result != 0:
- return result
-
- # TO-DO: need to add a way for the user to extend this list for whatever
- # auxiliary files they create in other (or their own) packages
- # Harder is case is where an action needs to be called -- that should be rare (I hope?)
-
- for index in check_suffixes:
- check_MD5(suffix_nodes[index],index)
-
- # Now decide if latex will need to be run again due to nomenclature.
- if check_MD5(suffix_nodes['.nlo'],'.nlo') or (count == 1 and run_nomenclature):
- # We must run makeindex
- if Verbose:
- print "Need to run makeindex for nomenclature"
- nclfile = suffix_nodes['.nlo']
- result = MakeNclAction(nclfile, nclfile, env)
- if result != 0:
- return result
-
- # Now decide if latex will need to be run again due to glossary.
- if check_MD5(suffix_nodes['.glo'],'.glo') or (count == 1 and run_glossary):
- # We must run makeindex
- if Verbose:
- print "Need to run makeindex for glossary"
- glofile = suffix_nodes['.glo']
- result = MakeGlossaryAction(glofile, glofile, env)
- if result != 0:
- return result
-
- # Now decide if latex needs to be run yet again to resolve warnings.
- if warning_rerun_re.search(logContent):
- must_rerun_latex = True
- if Verbose:
- print "rerun Latex due to latex or package rerun warning"
-
- if rerun_citations_re.search(logContent):
- must_rerun_latex = True
- if Verbose:
- print "rerun Latex due to 'Rerun to get citations correct' warning"
-
- if undefined_references_re.search(logContent):
- must_rerun_latex = True
- if Verbose:
- print "rerun Latex due to undefined references or citations"
-
- if (count >= int(env.subst('$LATEXRETRIES')) and must_rerun_latex):
- print "reached max number of retries on Latex ,",int(env.subst('$LATEXRETRIES'))
-# end of while loop
-
- # rename Latex's output to what the target name is
- if not (str(target[0]) == resultfilename and os.path.exists(resultfilename)):
- if os.path.exists(resultfilename):
- print "move %s to %s" % (resultfilename, str(target[0]), )
- shutil.move(resultfilename,str(target[0]))
-
- # Original comment (when TEXPICTS was not restored):
- # The TEXPICTS enviroment variable is needed by a dvi -> pdf step
- # later on Mac OSX so leave it
- #
- # It is also used when searching for pictures (implicit dependencies).
- # Why not set the variable again in the respective builder instead
- # of leaving local modifications in the environment? What if multiple
- # latex builds in different directories need different TEXPICTS?
- for var in SCons.Scanner.LaTeX.LaTeX.env_variables:
- if var == 'TEXPICTS':
- continue
- if saved_env[var] is _null:
- try:
- del env['ENV'][var]
- except KeyError:
- pass # was never set
- else:
- env['ENV'][var] = saved_env[var]
-
- return result
-
-def LaTeXAuxAction(target = None, source= None, env=None):
- result = InternalLaTeXAuxAction( LaTeXAction, target, source, env )
- return result
-
-LaTeX_re = re.compile("\\\\document(style|class)")
-
-def is_LaTeX(flist):
- # Scan a file list to decide if it's TeX- or LaTeX-flavored.
- for f in flist:
- content = f.get_text_contents()
- if LaTeX_re.search(content):
- return 1
- return 0
-
-def TeXLaTeXFunction(target = None, source= None, env=None):
- """A builder for TeX and LaTeX that scans the source file to
- decide the "flavor" of the source and then executes the appropriate
- program."""
- if is_LaTeX(source):
- result = LaTeXAuxAction(target,source,env)
- else:
- result = TeXAction(target,source,env)
- return result
-
-def TeXLaTeXStrFunction(target = None, source= None, env=None):
- """A strfunction for TeX and LaTeX that scans the source file to
- decide the "flavor" of the source and then returns the appropriate
- command string."""
- if env.GetOption("no_exec"):
- if is_LaTeX(source):
- result = env.subst('$LATEXCOM',0,target,source)+" ..."
- else:
- result = env.subst("$TEXCOM",0,target,source)+" ..."
- else:
- result = ''
- return result
-
-def tex_eps_emitter(target, source, env):
- """An emitter for TeX and LaTeX sources when
- executing tex or latex. It will accept .ps and .eps
- graphics files
- """
- (target, source) = tex_emitter_core(target, source, env, TexGraphics)
-
- return (target, source)
-
-def tex_pdf_emitter(target, source, env):
- """An emitter for TeX and LaTeX sources when
- executing pdftex or pdflatex. It will accept graphics
- files of types .pdf, .jpg, .png, .gif, and .tif
- """
- (target, source) = tex_emitter_core(target, source, env, LatexGraphics)
-
- return (target, source)
-
-def ScanFiles(theFile, target, paths, file_tests, file_tests_search, env, graphics_extensions, targetdir):
- # for theFile (a Node) update any file_tests and search for graphics files
- # then find all included files and call ScanFiles for each of them
- content = theFile.get_text_contents()
- if Verbose:
- print " scanning ",str(theFile)
-
- for i in range(len(file_tests_search)):
- if file_tests[i][0] == None:
- file_tests[i][0] = file_tests_search[i].search(content)
-
- # recursively call this on each of the included files
- inc_files = [ ]
- inc_files.extend( include_re.findall(content) )
- if Verbose:
- print "files included by '%s': "%str(theFile),inc_files
- # inc_files is list of file names as given. need to find them
- # using TEXINPUTS paths.
-
- for src in inc_files:
- srcNode = srcNode = FindFile(src,['.tex','.ltx','.latex'],paths,env,requireExt=False)
- if srcNode != None:
- file_test = ScanFiles(srcNode, target, paths, file_tests, file_tests_search, env, graphics_extensions, targetdir)
- if Verbose:
- print " done scanning ",str(theFile)
- return file_tests
-
-def tex_emitter_core(target, source, env, graphics_extensions):
- """An emitter for TeX and LaTeX sources.
- For LaTeX sources we try and find the common created files that
- are needed on subsequent runs of latex to finish tables of contents,
- bibliographies, indices, lists of figures, and hyperlink references.
- """
- targetbase = SCons.Util.splitext(str(target[0]))[0]
- basename = SCons.Util.splitext(str(source[0]))[0]
- basefile = os.path.split(str(basename))[1]
-
- basedir = os.path.split(str(source[0]))[0]
- targetdir = os.path.split(str(target[0]))[0]
- abspath = os.path.abspath(basedir)
- target[0].attributes.path = abspath
-
- #
- # file names we will make use of in searching the sources and log file
- #
- emit_suffixes = ['.aux', '.log', '.ilg', '.blg', '.nls', '.nlg', '.gls', '.glg'] + all_suffixes
- auxfilename = targetbase + '.aux'
- logfilename = targetbase + '.log'
-
- env.SideEffect(auxfilename,target[0])
- env.SideEffect(logfilename,target[0])
- env.Clean(target[0],auxfilename)
- env.Clean(target[0],logfilename)
-
- content = source[0].get_text_contents()
-
- idx_exists = os.path.exists(targetbase + '.idx')
- nlo_exists = os.path.exists(targetbase + '.nlo')
- glo_exists = os.path.exists(targetbase + '.glo')
-
- # set up list with the regular expressions
- # we use to find features used
- file_tests_search = [auxfile_re,
- makeindex_re,
- bibliography_re,
- tableofcontents_re,
- listoffigures_re,
- listoftables_re,
- hyperref_re,
- makenomenclature_re,
- makeglossary_re,
- beamer_re ]
- # set up list with the file suffixes that need emitting
- # when a feature is found
- file_tests_suff = [['.aux'],
- ['.idx', '.ind', '.ilg'],
- ['.bbl', '.blg'],
- ['.toc'],
- ['.lof'],
- ['.lot'],
- ['.out'],
- ['.nlo', '.nls', '.nlg'],
- ['.glo', '.gls', '.glg'],
- ['.nav', '.snm', '.out', '.toc'] ]
- # build the list of lists
- file_tests = []
- for i in range(len(file_tests_search)):
- file_tests.append( [None, file_tests_suff[i]] )
-
- # TO-DO: need to add a way for the user to extend this list for whatever
- # auxiliary files they create in other (or their own) packages
-
- # get path list from both env['TEXINPUTS'] and env['ENV']['TEXINPUTS']
- savedpath = modify_env_var(env, 'TEXINPUTS', abspath)
- paths = env['ENV']['TEXINPUTS']
- if SCons.Util.is_List(paths):
- pass
- else:
- # Split at os.pathsep to convert into absolute path
- # TODO(1.5)
- #paths = paths.split(os.pathsep)
- paths = string.split(paths, os.pathsep)
-
- # now that we have the path list restore the env
- if savedpath is _null:
- try:
- del env['ENV']['TEXINPUTS']
- except KeyError:
- pass # was never set
- else:
- env['ENV']['TEXINPUTS'] = savedpath
- if Verbose:
- print "search path ",paths
-
- file_tests = ScanFiles(source[0], target, paths, file_tests, file_tests_search, env, graphics_extensions, targetdir)
-
- for (theSearch,suffix_list) in file_tests:
- if theSearch:
- for suffix in suffix_list:
- env.SideEffect(targetbase + suffix,target[0])
- env.Clean(target[0],targetbase + suffix)
-
- # read log file to get all other files that latex creates and will read on the next pass
- if os.path.exists(logfilename):
- content = open(logfilename, "rb").read()
- out_files = openout_re.findall(content)
- env.SideEffect(out_files,target[0])
- env.Clean(target[0],out_files)
-
- return (target, source)
-
-
-TeXLaTeXAction = None
-
-def generate(env):
- """Add Builders and construction variables for TeX to an Environment."""
-
- # A generic tex file Action, sufficient for all tex files.
- global TeXAction
- if TeXAction is None:
- TeXAction = SCons.Action.Action("$TEXCOM", "$TEXCOMSTR")
-
- # An Action to build a latex file. This might be needed more
- # than once if we are dealing with labels and bibtex.
- global LaTeXAction
- if LaTeXAction is None:
- LaTeXAction = SCons.Action.Action("$LATEXCOM", "$LATEXCOMSTR")
-
- # Define an action to run BibTeX on a file.
- global BibTeXAction
- if BibTeXAction is None:
- BibTeXAction = SCons.Action.Action("$BIBTEXCOM", "$BIBTEXCOMSTR")
-
- # Define an action to run MakeIndex on a file.
- global MakeIndexAction
- if MakeIndexAction is None:
- MakeIndexAction = SCons.Action.Action("$MAKEINDEXCOM", "$MAKEINDEXCOMSTR")
-
- # Define an action to run MakeIndex on a file for nomenclatures.
- global MakeNclAction
- if MakeNclAction is None:
- MakeNclAction = SCons.Action.Action("$MAKENCLCOM", "$MAKENCLCOMSTR")
-
- # Define an action to run MakeIndex on a file for glossaries.
- global MakeGlossaryAction
- if MakeGlossaryAction is None:
- MakeGlossaryAction = SCons.Action.Action("$MAKEGLOSSARYCOM", "$MAKEGLOSSARYCOMSTR")
-
- global TeXLaTeXAction
- if TeXLaTeXAction is None:
- TeXLaTeXAction = SCons.Action.Action(TeXLaTeXFunction,
- strfunction=TeXLaTeXStrFunction)
-
- import dvi
- dvi.generate(env)
-
- bld = env['BUILDERS']['DVI']
- bld.add_action('.tex', TeXLaTeXAction)
- bld.add_emitter('.tex', tex_eps_emitter)
-
- env['TEX'] = 'tex'
- env['TEXFLAGS'] = SCons.Util.CLVar('-interaction=nonstopmode')
- env['TEXCOM'] = 'cd ${TARGET.dir} && $TEX $TEXFLAGS ${SOURCE.file}'
-
- # Duplicate from latex.py. If latex.py goes away, then this is still OK.
- env['LATEX'] = 'latex'
- env['LATEXFLAGS'] = SCons.Util.CLVar('-interaction=nonstopmode')
- env['LATEXCOM'] = 'cd ${TARGET.dir} && $LATEX $LATEXFLAGS ${SOURCE.file}'
- env['LATEXRETRIES'] = 3
-
- env['BIBTEX'] = 'bibtex'
- env['BIBTEXFLAGS'] = SCons.Util.CLVar('')
- env['BIBTEXCOM'] = 'cd ${TARGET.dir} && $BIBTEX $BIBTEXFLAGS ${SOURCE.filebase}'
-
- env['MAKEINDEX'] = 'makeindex'
- env['MAKEINDEXFLAGS'] = SCons.Util.CLVar('')
- env['MAKEINDEXCOM'] = 'cd ${TARGET.dir} && $MAKEINDEX $MAKEINDEXFLAGS ${SOURCE.file}'
-
- env['MAKEGLOSSARY'] = 'makeindex'
- env['MAKEGLOSSARYSTYLE'] = '${SOURCE.filebase}.ist'
- env['MAKEGLOSSARYFLAGS'] = SCons.Util.CLVar('-s ${MAKEGLOSSARYSTYLE} -t ${SOURCE.filebase}.glg')
- env['MAKEGLOSSARYCOM'] = 'cd ${TARGET.dir} && $MAKEGLOSSARY ${SOURCE.filebase}.glo $MAKEGLOSSARYFLAGS -o ${SOURCE.filebase}.gls'
-
- env['MAKENCL'] = 'makeindex'
- env['MAKENCLSTYLE'] = '$nomencl.ist'
- env['MAKENCLFLAGS'] = '-s ${MAKENCLSTYLE} -t ${SOURCE.filebase}.nlg'
- env['MAKENCLCOM'] = 'cd ${TARGET.dir} && $MAKENCL ${SOURCE.filebase}.nlo $MAKENCLFLAGS -o ${SOURCE.filebase}.nls'
-
- # Duplicate from pdflatex.py. If latex.py goes away, then this is still OK.
- env['PDFLATEX'] = 'pdflatex'
- env['PDFLATEXFLAGS'] = SCons.Util.CLVar('-interaction=nonstopmode')
- env['PDFLATEXCOM'] = 'cd ${TARGET.dir} && $PDFLATEX $PDFLATEXFLAGS ${SOURCE.file}'
-
-def exists(env):
- return env.Detect('tex')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/tlib.py b/3rdParty/SCons/scons-local/SCons/Tool/tlib.py
deleted file mode 100644
index 3fccc7a..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/tlib.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""SCons.Tool.tlib
-
-XXX
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/tlib.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Tool
-import SCons.Tool.bcc32
-import SCons.Util
-
-def generate(env):
- SCons.Tool.bcc32.findIt('tlib', env)
- """Add Builders and construction variables for ar to an Environment."""
- SCons.Tool.createStaticLibBuilder(env)
- env['AR'] = 'tlib'
- env['ARFLAGS'] = SCons.Util.CLVar('')
- env['ARCOM'] = '$AR $TARGET $ARFLAGS /a $SOURCES'
- env['LIBPREFIX'] = ''
- env['LIBSUFFIX'] = '.lib'
-
-def exists(env):
- return SCons.Tool.bcc32.findIt('tlib', env)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/wix.py b/3rdParty/SCons/scons-local/SCons/Tool/wix.py
deleted file mode 100644
index 7fbb38b..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/wix.py
+++ /dev/null
@@ -1,100 +0,0 @@
-"""SCons.Tool.wix
-
-Tool-specific initialization for wix, the Windows Installer XML Tool.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/wix.py 4043 2009/02/23 09:06:45 scons"
-
-import SCons.Builder
-import SCons.Action
-import os
-import string
-
-def generate(env):
- """Add Builders and construction variables for WiX to an Environment."""
- if not exists(env):
- return
-
- env['WIXCANDLEFLAGS'] = ['-nologo']
- env['WIXCANDLEINCLUDE'] = []
- env['WIXCANDLECOM'] = '$WIXCANDLE $WIXCANDLEFLAGS -I $WIXCANDLEINCLUDE -o ${TARGET} ${SOURCE}'
-
- env['WIXLIGHTFLAGS'].append( '-nologo' )
- env['WIXLIGHTCOM'] = "$WIXLIGHT $WIXLIGHTFLAGS -out ${TARGET} ${SOURCES}"
-
- object_builder = SCons.Builder.Builder(
- action = '$WIXCANDLECOM',
- suffix = '.wxiobj',
- src_suffix = '.wxs')
-
- linker_builder = SCons.Builder.Builder(
- action = '$WIXLIGHTCOM',
- src_suffix = '.wxiobj',
- src_builder = object_builder)
-
- env['BUILDERS']['WiX'] = linker_builder
-
-def exists(env):
- env['WIXCANDLE'] = 'candle.exe'
- env['WIXLIGHT'] = 'light.exe'
-
- # try to find the candle.exe and light.exe tools and
- # add the install directory to light libpath.
- #for path in os.environ['PATH'].split(os.pathsep):
- for path in string.split(os.environ['PATH'], os.pathsep):
- if not path:
- continue
-
- # workaround for some weird python win32 bug.
- if path[0] == '"' and path[-1:]=='"':
- path = path[1:-1]
-
- # normalize the path
- path = os.path.normpath(path)
-
- # search for the tools in the PATH environment variable
- try:
- if env['WIXCANDLE'] in os.listdir(path) and\
- env['WIXLIGHT'] in os.listdir(path):
- env.PrependENVPath('PATH', path)
- env['WIXLIGHTFLAGS'] = [ os.path.join( path, 'wixui.wixlib' ),
- '-loc',
- os.path.join( path, 'WixUI_en-us.wxl' ) ]
- return 1
- except OSError:
- pass # ignore this, could be a stale PATH entry.
-
- return None
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/yacc.py b/3rdParty/SCons/scons-local/SCons/Tool/yacc.py
deleted file mode 100644
index a80ec1e..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/yacc.py
+++ /dev/null
@@ -1,131 +0,0 @@
-"""SCons.Tool.yacc
-
-Tool-specific initialization for yacc.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/yacc.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import string
-
-import SCons.Defaults
-import SCons.Tool
-import SCons.Util
-
-YaccAction = SCons.Action.Action("$YACCCOM", "$YACCCOMSTR")
-
-def _yaccEmitter(target, source, env, ysuf, hsuf):
- yaccflags = env.subst("$YACCFLAGS", target=target, source=source)
- flags = SCons.Util.CLVar(yaccflags)
- targetBase, targetExt = os.path.splitext(SCons.Util.to_String(target[0]))
-
- if '.ym' in ysuf: # If using Objective-C
- target = [targetBase + ".m"] # the extension is ".m".
-
-
- # If -d is specified on the command line, yacc will emit a .h
- # or .hpp file with the same name as the .c or .cpp output file.
- if '-d' in flags:
- target.append(targetBase + env.subst(hsuf, target=target, source=source))
-
- # If -g is specified on the command line, yacc will emit a .vcg
- # file with the same base name as the .y, .yacc, .ym or .yy file.
- if "-g" in flags:
- base, ext = os.path.splitext(SCons.Util.to_String(source[0]))
- target.append(base + env.subst("$YACCVCGFILESUFFIX"))
-
- # With --defines and --graph, the name of the file is totally defined
- # in the options.
- fileGenOptions = ["--defines=", "--graph="]
- for option in flags:
- for fileGenOption in fileGenOptions:
- l = len(fileGenOption)
- if option[:l] == fileGenOption:
- # A file generating option is present, so add the file
- # name to the list of targets.
- fileName = string.strip(option[l:])
- target.append(fileName)
-
- return (target, source)
-
-def yEmitter(target, source, env):
- return _yaccEmitter(target, source, env, ['.y', '.yacc'], '$YACCHFILESUFFIX')
-
-def ymEmitter(target, source, env):
- return _yaccEmitter(target, source, env, ['.ym'], '$YACCHFILESUFFIX')
-
-def yyEmitter(target, source, env):
- return _yaccEmitter(target, source, env, ['.yy'], '$YACCHXXFILESUFFIX')
-
-def generate(env):
- """Add Builders and construction variables for yacc to an Environment."""
- c_file, cxx_file = SCons.Tool.createCFileBuilders(env)
-
- # C
- c_file.add_action('.y', YaccAction)
- c_file.add_emitter('.y', yEmitter)
-
- c_file.add_action('.yacc', YaccAction)
- c_file.add_emitter('.yacc', yEmitter)
-
- # Objective-C
- c_file.add_action('.ym', YaccAction)
- c_file.add_emitter('.ym', ymEmitter)
-
- # C++
- cxx_file.add_action('.yy', YaccAction)
- cxx_file.add_emitter('.yy', yyEmitter)
-
- env['YACC'] = env.Detect('bison') or 'yacc'
- env['YACCFLAGS'] = SCons.Util.CLVar('')
- env['YACCCOM'] = '$YACC $YACCFLAGS -o $TARGET $SOURCES'
- env['YACCHFILESUFFIX'] = '.h'
-
- # Apparently, OS X now creates file.hpp like everybody else
- # I have no idea when it changed; it was fixed in 10.4
- #if env['PLATFORM'] == 'darwin':
- # # Bison on Mac OS X just appends ".h" to the generated target .cc
- # # or .cpp file name. Hooray for delayed expansion of variables.
- # env['YACCHXXFILESUFFIX'] = '${TARGET.suffix}.h'
- #else:
- # env['YACCHXXFILESUFFIX'] = '.hpp'
- env['YACCHXXFILESUFFIX'] = '.hpp'
-
- env['YACCVCGFILESUFFIX'] = '.vcg'
-
-def exists(env):
- return env.Detect(['bison', 'yacc'])
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/zip.py b/3rdParty/SCons/scons-local/SCons/Tool/zip.py
deleted file mode 100644
index f41bc85..0000000
--- a/3rdParty/SCons/scons-local/SCons/Tool/zip.py
+++ /dev/null
@@ -1,100 +0,0 @@
-"""SCons.Tool.zip
-
-Tool-specific initialization for zip.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Tool/zip.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-
-import SCons.Builder
-import SCons.Defaults
-import SCons.Node.FS
-import SCons.Util
-
-try:
- import zipfile
- internal_zip = 1
-except ImportError:
- internal_zip = 0
-
-if internal_zip:
- zipcompression = zipfile.ZIP_DEFLATED
- def zip(target, source, env):
- def visit(arg, dirname, names):
- for name in names:
- path = os.path.join(dirname, name)
- if os.path.isfile(path):
- arg.write(path)
- compression = env.get('ZIPCOMPRESSION', 0)
- zf = zipfile.ZipFile(str(target[0]), 'w', compression)
- for s in source:
- if s.isdir():
- os.path.walk(str(s), visit, zf)
- else:
- zf.write(str(s))
- zf.close()
-else:
- zipcompression = 0
- zip = "$ZIP $ZIPFLAGS ${TARGET.abspath} $SOURCES"
-
-
-zipAction = SCons.Action.Action(zip, varlist=['ZIPCOMPRESSION'])
-
-ZipBuilder = SCons.Builder.Builder(action = SCons.Action.Action('$ZIPCOM', '$ZIPCOMSTR'),
- source_factory = SCons.Node.FS.Entry,
- source_scanner = SCons.Defaults.DirScanner,
- suffix = '$ZIPSUFFIX',
- multi = 1)
-
-
-def generate(env):
- """Add Builders and construction variables for zip to an Environment."""
- try:
- bld = env['BUILDERS']['Zip']
- except KeyError:
- bld = ZipBuilder
- env['BUILDERS']['Zip'] = bld
-
- env['ZIP'] = 'zip'
- env['ZIPFLAGS'] = SCons.Util.CLVar('')
- env['ZIPCOM'] = zipAction
- env['ZIPCOMPRESSION'] = zipcompression
- env['ZIPSUFFIX'] = '.zip'
-
-def exists(env):
- return internal_zip or env.Detect('zip')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Util.py b/3rdParty/SCons/scons-local/SCons/Util.py
deleted file mode 100644
index e7d841f..0000000
--- a/3rdParty/SCons/scons-local/SCons/Util.py
+++ /dev/null
@@ -1,1621 +0,0 @@
-"""SCons.Util
-
-Various utility functions go here.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Util.py 4043 2009/02/23 09:06:45 scons"
-
-import copy
-import os
-import os.path
-import re
-import string
-import sys
-import types
-
-from UserDict import UserDict
-from UserList import UserList
-from UserString import UserString
-
-# Don't "from types import ..." these because we need to get at the
-# types module later to look for UnicodeType.
-DictType = types.DictType
-InstanceType = types.InstanceType
-ListType = types.ListType
-StringType = types.StringType
-TupleType = types.TupleType
-
-def dictify(keys, values, result={}):
- for k, v in zip(keys, values):
- result[k] = v
- return result
-
-_altsep = os.altsep
-if _altsep is None and sys.platform == 'win32':
- # My ActivePython 2.0.1 doesn't set os.altsep! What gives?
- _altsep = '/'
-if _altsep:
- def rightmost_separator(path, sep, _altsep=_altsep):
- rfind = string.rfind
- return max(rfind(path, sep), rfind(path, _altsep))
-else:
- rightmost_separator = string.rfind
-
-# First two from the Python Cookbook, just for completeness.
-# (Yeah, yeah, YAGNI...)
-def containsAny(str, set):
- """Check whether sequence str contains ANY of the items in set."""
- for c in set:
- if c in str: return 1
- return 0
-
-def containsAll(str, set):
- """Check whether sequence str contains ALL of the items in set."""
- for c in set:
- if c not in str: return 0
- return 1
-
-def containsOnly(str, set):
- """Check whether sequence str contains ONLY items in set."""
- for c in str:
- if c not in set: return 0
- return 1
-
-def splitext(path):
- "Same as os.path.splitext() but faster."
- sep = rightmost_separator(path, os.sep)
- dot = string.rfind(path, '.')
- # An ext is only real if it has at least one non-digit char
- if dot > sep and not containsOnly(path[dot:], "0123456789."):
- return path[:dot],path[dot:]
- else:
- return path,""
-
-def updrive(path):
- """
- Make the drive letter (if any) upper case.
- This is useful because Windows is inconsitent on the case
- of the drive letter, which can cause inconsistencies when
- calculating command signatures.
- """
- drive, rest = os.path.splitdrive(path)
- if drive:
- path = string.upper(drive) + rest
- return path
-
-class NodeList(UserList):
- """This class is almost exactly like a regular list of Nodes
- (actually it can hold any object), with one important difference.
- If you try to get an attribute from this list, it will return that
- attribute from every item in the list. For example:
-
- >>> someList = NodeList([ ' foo ', ' bar ' ])
- >>> someList.strip()
- [ 'foo', 'bar' ]
- """
- def __nonzero__(self):
- return len(self.data) != 0
-
- def __str__(self):
- return string.join(map(str, self.data))
-
- def __iter__(self):
- return iter(self.data)
-
- def __call__(self, *args, **kwargs):
- result = map(lambda x, args=args, kwargs=kwargs: apply(x,
- args,
- kwargs),
- self.data)
- return self.__class__(result)
-
- def __getattr__(self, name):
- result = map(lambda x, n=name: getattr(x, n), self.data)
- return self.__class__(result)
-
-
-_get_env_var = re.compile(r'^\$([_a-zA-Z]\w*|{[_a-zA-Z]\w*})$')
-
-def get_environment_var(varstr):
- """Given a string, first determine if it looks like a reference
- to a single environment variable, like "$FOO" or "${FOO}".
- If so, return that variable with no decorations ("FOO").
- If not, return None."""
- mo=_get_env_var.match(to_String(varstr))
- if mo:
- var = mo.group(1)
- if var[0] == '{':
- return var[1:-1]
- else:
- return var
- else:
- return None
-
-class DisplayEngine:
- def __init__(self):
- self.__call__ = self.print_it
-
- def print_it(self, text, append_newline=1):
- if append_newline: text = text + '\n'
- try:
- sys.stdout.write(text)
- except IOError:
- # Stdout might be connected to a pipe that has been closed
- # by now. The most likely reason for the pipe being closed
- # is that the user has press ctrl-c. It this is the case,
- # then SCons is currently shutdown. We therefore ignore
- # IOError's here so that SCons can continue and shutdown
- # properly so that the .sconsign is correctly written
- # before SCons exits.
- pass
-
- def dont_print(self, text, append_newline=1):
- pass
-
- def set_mode(self, mode):
- if mode:
- self.__call__ = self.print_it
- else:
- self.__call__ = self.dont_print
-
-def render_tree(root, child_func, prune=0, margin=[0], visited={}):
- """
- Render a tree of nodes into an ASCII tree view.
- root - the root node of the tree
- child_func - the function called to get the children of a node
- prune - don't visit the same node twice
- margin - the format of the left margin to use for children of root.
- 1 results in a pipe, and 0 results in no pipe.
- visited - a dictionary of visited nodes in the current branch if not prune,
- or in the whole tree if prune.
- """
-
- rname = str(root)
-
- children = child_func(root)
- retval = ""
- for pipe in margin[:-1]:
- if pipe:
- retval = retval + "| "
- else:
- retval = retval + " "
-
- if visited.has_key(rname):
- return retval + "+-[" + rname + "]\n"
-
- retval = retval + "+-" + rname + "\n"
- if not prune:
- visited = copy.copy(visited)
- visited[rname] = 1
-
- for i in range(len(children)):
- margin.append(i<len(children)-1)
- retval = retval + render_tree(children[i], child_func, prune, margin, visited
-)
- margin.pop()
-
- return retval
-
-IDX = lambda N: N and 1 or 0
-
-def print_tree(root, child_func, prune=0, showtags=0, margin=[0], visited={}):
- """
- Print a tree of nodes. This is like render_tree, except it prints
- lines directly instead of creating a string representation in memory,
- so that huge trees can be printed.
-
- root - the root node of the tree
- child_func - the function called to get the children of a node
- prune - don't visit the same node twice
- showtags - print status information to the left of each node line
- margin - the format of the left margin to use for children of root.
- 1 results in a pipe, and 0 results in no pipe.
- visited - a dictionary of visited nodes in the current branch if not prune,
- or in the whole tree if prune.
- """
-
- rname = str(root)
-
- if showtags:
-
- if showtags == 2:
- print ' E = exists'
- print ' R = exists in repository only'
- print ' b = implicit builder'
- print ' B = explicit builder'
- print ' S = side effect'
- print ' P = precious'
- print ' A = always build'
- print ' C = current'
- print ' N = no clean'
- print ' H = no cache'
- print ''
-
- tags = ['[']
- tags.append(' E'[IDX(root.exists())])
- tags.append(' R'[IDX(root.rexists() and not root.exists())])
- tags.append(' BbB'[[0,1][IDX(root.has_explicit_builder())] +
- [0,2][IDX(root.has_builder())]])
- tags.append(' S'[IDX(root.side_effect)])
- tags.append(' P'[IDX(root.precious)])
- tags.append(' A'[IDX(root.always_build)])
- tags.append(' C'[IDX(root.is_up_to_date())])
- tags.append(' N'[IDX(root.noclean)])
- tags.append(' H'[IDX(root.nocache)])
- tags.append(']')
-
- else:
- tags = []
-
- def MMM(m):
- return [" ","| "][m]
- margins = map(MMM, margin[:-1])
-
- children = child_func(root)
-
- if prune and visited.has_key(rname) and children:
- print string.join(tags + margins + ['+-[', rname, ']'], '')
- return
-
- print string.join(tags + margins + ['+-', rname], '')
-
- visited[rname] = 1
-
- if children:
- margin.append(1)
- idx = IDX(showtags)
- for C in children[:-1]:
- print_tree(C, child_func, prune, idx, margin, visited)
- margin[-1] = 0
- print_tree(children[-1], child_func, prune, idx, margin, visited)
- margin.pop()
-
-
-
-# Functions for deciding if things are like various types, mainly to
-# handle UserDict, UserList and UserString like their underlying types.
-#
-# Yes, all of this manual testing breaks polymorphism, and the real
-# Pythonic way to do all of this would be to just try it and handle the
-# exception, but handling the exception when it's not the right type is
-# often too slow.
-
-try:
- class mystr(str):
- pass
-except TypeError:
- # An older Python version without new-style classes.
- #
- # The actual implementations here have been selected after timings
- # coded up in in bench/is_types.py (from the SCons source tree,
- # see the scons-src distribution), mostly against Python 1.5.2.
- # Key results from those timings:
- #
- # -- Storing the type of the object in a variable (t = type(obj))
- # slows down the case where it's a native type and the first
- # comparison will match, but nicely speeds up the case where
- # it's a different native type. Since that's going to be
- # common, it's a good tradeoff.
- #
- # -- The data show that calling isinstance() on an object that's
- # a native type (dict, list or string) is expensive enough
- # that checking up front for whether the object is of type
- # InstanceType is a pretty big win, even though it does slow
- # down the case where it really *is* an object instance a
- # little bit.
- def is_Dict(obj):
- t = type(obj)
- return t is DictType or \
- (t is InstanceType and isinstance(obj, UserDict))
-
- def is_List(obj):
- t = type(obj)
- return t is ListType \
- or (t is InstanceType and isinstance(obj, UserList))
-
- def is_Sequence(obj):
- t = type(obj)
- return t is ListType \
- or t is TupleType \
- or (t is InstanceType and isinstance(obj, UserList))
-
- def is_Tuple(obj):
- t = type(obj)
- return t is TupleType
-
- if hasattr(types, 'UnicodeType'):
- def is_String(obj):
- t = type(obj)
- return t is StringType \
- or t is UnicodeType \
- or (t is InstanceType and isinstance(obj, UserString))
- else:
- def is_String(obj):
- t = type(obj)
- return t is StringType \
- or (t is InstanceType and isinstance(obj, UserString))
-
- def is_Scalar(obj):
- return is_String(obj) or not is_Sequence(obj)
-
- def flatten(obj, result=None):
- """Flatten a sequence to a non-nested list.
-
- Flatten() converts either a single scalar or a nested sequence
- to a non-nested list. Note that flatten() considers strings
- to be scalars instead of sequences like Python would.
- """
- if is_Scalar(obj):
- return [obj]
- if result is None:
- result = []
- for item in obj:
- if is_Scalar(item):
- result.append(item)
- else:
- flatten_sequence(item, result)
- return result
-
- def flatten_sequence(sequence, result=None):
- """Flatten a sequence to a non-nested list.
-
- Same as flatten(), but it does not handle the single scalar
- case. This is slightly more efficient when one knows that
- the sequence to flatten can not be a scalar.
- """
- if result is None:
- result = []
- for item in sequence:
- if is_Scalar(item):
- result.append(item)
- else:
- flatten_sequence(item, result)
- return result
-
- #
- # Generic convert-to-string functions that abstract away whether or
- # not the Python we're executing has Unicode support. The wrapper
- # to_String_for_signature() will use a for_signature() method if the
- # specified object has one.
- #
- if hasattr(types, 'UnicodeType'):
- UnicodeType = types.UnicodeType
- def to_String(s):
- if isinstance(s, UserString):
- t = type(s.data)
- else:
- t = type(s)
- if t is UnicodeType:
- return unicode(s)
- else:
- return str(s)
- else:
- to_String = str
-
- def to_String_for_signature(obj):
- try:
- f = obj.for_signature
- except AttributeError:
- return to_String_for_subst(obj)
- else:
- return f()
-
- def to_String_for_subst(s):
- if is_Sequence( s ):
- return string.join( map(to_String_for_subst, s) )
-
- return to_String( s )
-
-else:
- # A modern Python version with new-style classes, so we can just use
- # isinstance().
- #
- # We are using the following trick to speed-up these
- # functions. Default arguments are used to take a snapshot of the
- # the global functions and constants used by these functions. This
- # transforms accesses to global variable into local variables
- # accesses (i.e. LOAD_FAST instead of LOAD_GLOBAL).
-
- DictTypes = (dict, UserDict)
- ListTypes = (list, UserList)
- SequenceTypes = (list, tuple, UserList)
-
- # Empirically, Python versions with new-style classes all have
- # unicode.
- #
- # Note that profiling data shows a speed-up when comparing
- # explicitely with str and unicode instead of simply comparing
- # with basestring. (at least on Python 2.5.1)
- StringTypes = (str, unicode, UserString)
-
- # Empirically, it is faster to check explicitely for str and
- # unicode than for basestring.
- BaseStringTypes = (str, unicode)
-
- def is_Dict(obj, isinstance=isinstance, DictTypes=DictTypes):
- return isinstance(obj, DictTypes)
-
- def is_List(obj, isinstance=isinstance, ListTypes=ListTypes):
- return isinstance(obj, ListTypes)
-
- def is_Sequence(obj, isinstance=isinstance, SequenceTypes=SequenceTypes):
- return isinstance(obj, SequenceTypes)
-
- def is_Tuple(obj, isinstance=isinstance, tuple=tuple):
- return isinstance(obj, tuple)
-
- def is_String(obj, isinstance=isinstance, StringTypes=StringTypes):
- return isinstance(obj, StringTypes)
-
- def is_Scalar(obj, isinstance=isinstance, StringTypes=StringTypes, SequenceTypes=SequenceTypes):
- # Profiling shows that there is an impressive speed-up of 2x
- # when explicitely checking for strings instead of just not
- # sequence when the argument (i.e. obj) is already a string.
- # But, if obj is a not string than it is twice as fast to
- # check only for 'not sequence'. The following code therefore
- # assumes that the obj argument is a string must of the time.
- return isinstance(obj, StringTypes) or not isinstance(obj, SequenceTypes)
-
- def do_flatten(sequence, result, isinstance=isinstance,
- StringTypes=StringTypes, SequenceTypes=SequenceTypes):
- for item in sequence:
- if isinstance(item, StringTypes) or not isinstance(item, SequenceTypes):
- result.append(item)
- else:
- do_flatten(item, result)
-
- def flatten(obj, isinstance=isinstance, StringTypes=StringTypes,
- SequenceTypes=SequenceTypes, do_flatten=do_flatten):
- """Flatten a sequence to a non-nested list.
-
- Flatten() converts either a single scalar or a nested sequence
- to a non-nested list. Note that flatten() considers strings
- to be scalars instead of sequences like Python would.
- """
- if isinstance(obj, StringTypes) or not isinstance(obj, SequenceTypes):
- return [obj]
- result = []
- for item in obj:
- if isinstance(item, StringTypes) or not isinstance(item, SequenceTypes):
- result.append(item)
- else:
- do_flatten(item, result)
- return result
-
- def flatten_sequence(sequence, isinstance=isinstance, StringTypes=StringTypes,
- SequenceTypes=SequenceTypes, do_flatten=do_flatten):
- """Flatten a sequence to a non-nested list.
-
- Same as flatten(), but it does not handle the single scalar
- case. This is slightly more efficient when one knows that
- the sequence to flatten can not be a scalar.
- """
- result = []
- for item in sequence:
- if isinstance(item, StringTypes) or not isinstance(item, SequenceTypes):
- result.append(item)
- else:
- do_flatten(item, result)
- return result
-
-
- #
- # Generic convert-to-string functions that abstract away whether or
- # not the Python we're executing has Unicode support. The wrapper
- # to_String_for_signature() will use a for_signature() method if the
- # specified object has one.
- #
- def to_String(s,
- isinstance=isinstance, str=str,
- UserString=UserString, BaseStringTypes=BaseStringTypes):
- if isinstance(s,BaseStringTypes):
- # Early out when already a string!
- return s
- elif isinstance(s, UserString):
- # s.data can only be either a unicode or a regular
- # string. Please see the UserString initializer.
- return s.data
- else:
- return str(s)
-
- def to_String_for_subst(s,
- isinstance=isinstance, join=string.join, str=str, to_String=to_String,
- BaseStringTypes=BaseStringTypes, SequenceTypes=SequenceTypes,
- UserString=UserString):
-
- # Note that the test cases are sorted by order of probability.
- if isinstance(s, BaseStringTypes):
- return s
- elif isinstance(s, SequenceTypes):
- l = []
- for e in s:
- l.append(to_String_for_subst(e))
- return join( s )
- elif isinstance(s, UserString):
- # s.data can only be either a unicode or a regular
- # string. Please see the UserString initializer.
- return s.data
- else:
- return str(s)
-
- def to_String_for_signature(obj, to_String_for_subst=to_String_for_subst,
- AttributeError=AttributeError):
- try:
- f = obj.for_signature
- except AttributeError:
- return to_String_for_subst(obj)
- else:
- return f()
-
-
-
-# The SCons "semi-deep" copy.
-#
-# This makes separate copies of lists (including UserList objects)
-# dictionaries (including UserDict objects) and tuples, but just copies
-# references to anything else it finds.
-#
-# A special case is any object that has a __semi_deepcopy__() method,
-# which we invoke to create the copy, which is used by the BuilderDict
-# class because of its extra initialization argument.
-#
-# The dispatch table approach used here is a direct rip-off from the
-# normal Python copy module.
-
-_semi_deepcopy_dispatch = d = {}
-
-def _semi_deepcopy_dict(x):
- copy = {}
- for key, val in x.items():
- # The regular Python copy.deepcopy() also deepcopies the key,
- # as follows:
- #
- # copy[semi_deepcopy(key)] = semi_deepcopy(val)
- #
- # Doesn't seem like we need to, but we'll comment it just in case.
- copy[key] = semi_deepcopy(val)
- return copy
-d[types.DictionaryType] = _semi_deepcopy_dict
-
-def _semi_deepcopy_list(x):
- return map(semi_deepcopy, x)
-d[types.ListType] = _semi_deepcopy_list
-
-def _semi_deepcopy_tuple(x):
- return tuple(map(semi_deepcopy, x))
-d[types.TupleType] = _semi_deepcopy_tuple
-
-def _semi_deepcopy_inst(x):
- if hasattr(x, '__semi_deepcopy__'):
- return x.__semi_deepcopy__()
- elif isinstance(x, UserDict):
- return x.__class__(_semi_deepcopy_dict(x))
- elif isinstance(x, UserList):
- return x.__class__(_semi_deepcopy_list(x))
- else:
- return x
-d[types.InstanceType] = _semi_deepcopy_inst
-
-def semi_deepcopy(x):
- copier = _semi_deepcopy_dispatch.get(type(x))
- if copier:
- return copier(x)
- else:
- return x
-
-
-
-class Proxy:
- """A simple generic Proxy class, forwarding all calls to
- subject. So, for the benefit of the python newbie, what does
- this really mean? Well, it means that you can take an object, let's
- call it 'objA', and wrap it in this Proxy class, with a statement
- like this
-
- proxyObj = Proxy(objA),
-
- Then, if in the future, you do something like this
-
- x = proxyObj.var1,
-
- since Proxy does not have a 'var1' attribute (but presumably objA does),
- the request actually is equivalent to saying
-
- x = objA.var1
-
- Inherit from this class to create a Proxy."""
-
- def __init__(self, subject):
- """Wrap an object as a Proxy object"""
- self.__subject = subject
-
- def __getattr__(self, name):
- """Retrieve an attribute from the wrapped object. If the named
- attribute doesn't exist, AttributeError is raised"""
- return getattr(self.__subject, name)
-
- def get(self):
- """Retrieve the entire wrapped object"""
- return self.__subject
-
- def __cmp__(self, other):
- if issubclass(other.__class__, self.__subject.__class__):
- return cmp(self.__subject, other)
- return cmp(self.__dict__, other.__dict__)
-
-# attempt to load the windows registry module:
-can_read_reg = 0
-try:
- import _winreg
-
- can_read_reg = 1
- hkey_mod = _winreg
-
- RegOpenKeyEx = _winreg.OpenKeyEx
- RegEnumKey = _winreg.EnumKey
- RegEnumValue = _winreg.EnumValue
- RegQueryValueEx = _winreg.QueryValueEx
- RegError = _winreg.error
-
-except ImportError:
- try:
- import win32api
- import win32con
- can_read_reg = 1
- hkey_mod = win32con
-
- RegOpenKeyEx = win32api.RegOpenKeyEx
- RegEnumKey = win32api.RegEnumKey
- RegEnumValue = win32api.RegEnumValue
- RegQueryValueEx = win32api.RegQueryValueEx
- RegError = win32api.error
-
- except ImportError:
- class _NoError(Exception):
- pass
- RegError = _NoError
-
-if can_read_reg:
- HKEY_CLASSES_ROOT = hkey_mod.HKEY_CLASSES_ROOT
- HKEY_LOCAL_MACHINE = hkey_mod.HKEY_LOCAL_MACHINE
- HKEY_CURRENT_USER = hkey_mod.HKEY_CURRENT_USER
- HKEY_USERS = hkey_mod.HKEY_USERS
-
- def RegGetValue(root, key):
- """This utility function returns a value in the registry
- without having to open the key first. Only available on
- Windows platforms with a version of Python that can read the
- registry. Returns the same thing as
- SCons.Util.RegQueryValueEx, except you just specify the entire
- path to the value, and don't have to bother opening the key
- first. So:
-
- Instead of:
- k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE,
- r'SOFTWARE\Microsoft\Windows\CurrentVersion')
- out = SCons.Util.RegQueryValueEx(k,
- 'ProgramFilesDir')
-
- You can write:
- out = SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE,
- r'SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir')
- """
- # I would use os.path.split here, but it's not a filesystem
- # path...
- p = key.rfind('\\') + 1
- keyp = key[:p-1] # -1 to omit trailing slash
- val = key[p:]
- k = RegOpenKeyEx(root, keyp)
- return RegQueryValueEx(k,val)
-else:
- try:
- e = WindowsError
- except NameError:
- # Make sure we have a definition of WindowsError so we can
- # run platform-independent tests of Windows functionality on
- # platforms other than Windows. (WindowsError is, in fact, an
- # OSError subclass on Windows.)
- class WindowsError(OSError):
- pass
- import __builtin__
- __builtin__.WindowsError = WindowsError
- else:
- del e
-
- HKEY_CLASSES_ROOT = None
- HKEY_LOCAL_MACHINE = None
- HKEY_CURRENT_USER = None
- HKEY_USERS = None
-
- def RegGetValue(root, key):
- raise WindowsError
-
-if sys.platform == 'win32':
-
- def WhereIs(file, path=None, pathext=None, reject=[]):
- if path is None:
- try:
- path = os.environ['PATH']
- except KeyError:
- return None
- if is_String(path):
- path = string.split(path, os.pathsep)
- if pathext is None:
- try:
- pathext = os.environ['PATHEXT']
- except KeyError:
- pathext = '.COM;.EXE;.BAT;.CMD'
- if is_String(pathext):
- pathext = string.split(pathext, os.pathsep)
- for ext in pathext:
- if string.lower(ext) == string.lower(file[-len(ext):]):
- pathext = ['']
- break
- if not is_List(reject) and not is_Tuple(reject):
- reject = [reject]
- for dir in path:
- f = os.path.join(dir, file)
- for ext in pathext:
- fext = f + ext
- if os.path.isfile(fext):
- try:
- reject.index(fext)
- except ValueError:
- return os.path.normpath(fext)
- continue
- return None
-
-elif os.name == 'os2':
-
- def WhereIs(file, path=None, pathext=None, reject=[]):
- if path is None:
- try:
- path = os.environ['PATH']
- except KeyError:
- return None
- if is_String(path):
- path = string.split(path, os.pathsep)
- if pathext is None:
- pathext = ['.exe', '.cmd']
- for ext in pathext:
- if string.lower(ext) == string.lower(file[-len(ext):]):
- pathext = ['']
- break
- if not is_List(reject) and not is_Tuple(reject):
- reject = [reject]
- for dir in path:
- f = os.path.join(dir, file)
- for ext in pathext:
- fext = f + ext
- if os.path.isfile(fext):
- try:
- reject.index(fext)
- except ValueError:
- return os.path.normpath(fext)
- continue
- return None
-
-else:
-
- def WhereIs(file, path=None, pathext=None, reject=[]):
- import stat
- if path is None:
- try:
- path = os.environ['PATH']
- except KeyError:
- return None
- if is_String(path):
- path = string.split(path, os.pathsep)
- if not is_List(reject) and not is_Tuple(reject):
- reject = [reject]
- for d in path:
- f = os.path.join(d, file)
- if os.path.isfile(f):
- try:
- st = os.stat(f)
- except OSError:
- # os.stat() raises OSError, not IOError if the file
- # doesn't exist, so in this case we let IOError get
- # raised so as to not mask possibly serious disk or
- # network issues.
- continue
- if stat.S_IMODE(st[stat.ST_MODE]) & 0111:
- try:
- reject.index(f)
- except ValueError:
- return os.path.normpath(f)
- continue
- return None
-
-def PrependPath(oldpath, newpath, sep = os.pathsep,
- delete_existing=1, canonicalize=None):
- """This prepends newpath elements to the given oldpath. Will only
- add any particular path once (leaving the first one it encounters
- and ignoring the rest, to preserve path order), and will
- os.path.normpath and os.path.normcase all paths to help assure
- this. This can also handle the case where the given old path
- variable is a list instead of a string, in which case a list will
- be returned instead of a string.
-
- Example:
- Old Path: "/foo/bar:/foo"
- New Path: "/biz/boom:/foo"
- Result: "/biz/boom:/foo:/foo/bar"
-
- If delete_existing is 0, then adding a path that exists will
- not move it to the beginning; it will stay where it is in the
- list.
-
- If canonicalize is not None, it is applied to each element of
- newpath before use.
- """
-
- orig = oldpath
- is_list = 1
- paths = orig
- if not is_List(orig) and not is_Tuple(orig):
- paths = string.split(paths, sep)
- is_list = 0
-
- if is_String(newpath):
- newpaths = string.split(newpath, sep)
- elif not is_List(newpath) and not is_Tuple(newpath):
- newpaths = [ newpath ] # might be a Dir
- else:
- newpaths = newpath
-
- if canonicalize:
- newpaths=map(canonicalize, newpaths)
-
- if not delete_existing:
- # First uniquify the old paths, making sure to
- # preserve the first instance (in Unix/Linux,
- # the first one wins), and remembering them in normpaths.
- # Then insert the new paths at the head of the list
- # if they're not already in the normpaths list.
- result = []
- normpaths = []
- for path in paths:
- if not path:
- continue
- normpath = os.path.normpath(os.path.normcase(path))
- if normpath not in normpaths:
- result.append(path)
- normpaths.append(normpath)
- newpaths.reverse() # since we're inserting at the head
- for path in newpaths:
- if not path:
- continue
- normpath = os.path.normpath(os.path.normcase(path))
- if normpath not in normpaths:
- result.insert(0, path)
- normpaths.append(normpath)
- paths = result
-
- else:
- newpaths = newpaths + paths # prepend new paths
-
- normpaths = []
- paths = []
- # now we add them only if they are unique
- for path in newpaths:
- normpath = os.path.normpath(os.path.normcase(path))
- if path and not normpath in normpaths:
- paths.append(path)
- normpaths.append(normpath)
-
- if is_list:
- return paths
- else:
- return string.join(paths, sep)
-
-def AppendPath(oldpath, newpath, sep = os.pathsep,
- delete_existing=1, canonicalize=None):
- """This appends new path elements to the given old path. Will
- only add any particular path once (leaving the last one it
- encounters and ignoring the rest, to preserve path order), and
- will os.path.normpath and os.path.normcase all paths to help
- assure this. This can also handle the case where the given old
- path variable is a list instead of a string, in which case a list
- will be returned instead of a string.
-
- Example:
- Old Path: "/foo/bar:/foo"
- New Path: "/biz/boom:/foo"
- Result: "/foo/bar:/biz/boom:/foo"
-
- If delete_existing is 0, then adding a path that exists
- will not move it to the end; it will stay where it is in the list.
-
- If canonicalize is not None, it is applied to each element of
- newpath before use.
- """
-
- orig = oldpath
- is_list = 1
- paths = orig
- if not is_List(orig) and not is_Tuple(orig):
- paths = string.split(paths, sep)
- is_list = 0
-
- if is_String(newpath):
- newpaths = string.split(newpath, sep)
- elif not is_List(newpath) and not is_Tuple(newpath):
- newpaths = [ newpath ] # might be a Dir
- else:
- newpaths = newpath
-
- if canonicalize:
- newpaths=map(canonicalize, newpaths)
-
- if not delete_existing:
- # add old paths to result, then
- # add new paths if not already present
- # (I thought about using a dict for normpaths for speed,
- # but it's not clear hashing the strings would be faster
- # than linear searching these typically short lists.)
- result = []
- normpaths = []
- for path in paths:
- if not path:
- continue
- result.append(path)
- normpaths.append(os.path.normpath(os.path.normcase(path)))
- for path in newpaths:
- if not path:
- continue
- normpath = os.path.normpath(os.path.normcase(path))
- if normpath not in normpaths:
- result.append(path)
- normpaths.append(normpath)
- paths = result
- else:
- # start w/ new paths, add old ones if not present,
- # then reverse.
- newpaths = paths + newpaths # append new paths
- newpaths.reverse()
-
- normpaths = []
- paths = []
- # now we add them only if they are unique
- for path in newpaths:
- normpath = os.path.normpath(os.path.normcase(path))
- if path and not normpath in normpaths:
- paths.append(path)
- normpaths.append(normpath)
- paths.reverse()
-
- if is_list:
- return paths
- else:
- return string.join(paths, sep)
-
-if sys.platform == 'cygwin':
- def get_native_path(path):
- """Transforms an absolute path into a native path for the system. In
- Cygwin, this converts from a Cygwin path to a Windows one."""
- return string.replace(os.popen('cygpath -w ' + path).read(), '\n', '')
-else:
- def get_native_path(path):
- """Transforms an absolute path into a native path for the system.
- Non-Cygwin version, just leave the path alone."""
- return path
-
-display = DisplayEngine()
-
-def Split(arg):
- if is_List(arg) or is_Tuple(arg):
- return arg
- elif is_String(arg):
- return string.split(arg)
- else:
- return [arg]
-
-class CLVar(UserList):
- """A class for command-line construction variables.
-
- This is a list that uses Split() to split an initial string along
- white-space arguments, and similarly to split any strings that get
- added. This allows us to Do the Right Thing with Append() and
- Prepend() (as well as straight Python foo = env['VAR'] + 'arg1
- arg2') regardless of whether a user adds a list or a string to a
- command-line construction variable.
- """
- def __init__(self, seq = []):
- UserList.__init__(self, Split(seq))
- def __add__(self, other):
- return UserList.__add__(self, CLVar(other))
- def __radd__(self, other):
- return UserList.__radd__(self, CLVar(other))
- def __coerce__(self, other):
- return (self, CLVar(other))
- def __str__(self):
- return string.join(self.data)
-
-# A dictionary that preserves the order in which items are added.
-# Submitted by David Benjamin to ActiveState's Python Cookbook web site:
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747
-# Including fixes/enhancements from the follow-on discussions.
-class OrderedDict(UserDict):
- def __init__(self, dict = None):
- self._keys = []
- UserDict.__init__(self, dict)
-
- def __delitem__(self, key):
- UserDict.__delitem__(self, key)
- self._keys.remove(key)
-
- def __setitem__(self, key, item):
- UserDict.__setitem__(self, key, item)
- if key not in self._keys: self._keys.append(key)
-
- def clear(self):
- UserDict.clear(self)
- self._keys = []
-
- def copy(self):
- dict = OrderedDict()
- dict.update(self)
- return dict
-
- def items(self):
- return zip(self._keys, self.values())
-
- def keys(self):
- return self._keys[:]
-
- def popitem(self):
- try:
- key = self._keys[-1]
- except IndexError:
- raise KeyError('dictionary is empty')
-
- val = self[key]
- del self[key]
-
- return (key, val)
-
- def setdefault(self, key, failobj = None):
- UserDict.setdefault(self, key, failobj)
- if key not in self._keys: self._keys.append(key)
-
- def update(self, dict):
- for (key, val) in dict.items():
- self.__setitem__(key, val)
-
- def values(self):
- return map(self.get, self._keys)
-
-class Selector(OrderedDict):
- """A callable ordered dictionary that maps file suffixes to
- dictionary values. We preserve the order in which items are added
- so that get_suffix() calls always return the first suffix added."""
- def __call__(self, env, source, ext=None):
- if ext is None:
- try:
- ext = source[0].suffix
- except IndexError:
- ext = ""
- try:
- return self[ext]
- except KeyError:
- # Try to perform Environment substitution on the keys of
- # the dictionary before giving up.
- s_dict = {}
- for (k,v) in self.items():
- if not k is None:
- s_k = env.subst(k)
- if s_dict.has_key(s_k):
- # We only raise an error when variables point
- # to the same suffix. If one suffix is literal
- # and a variable suffix contains this literal,
- # the literal wins and we don't raise an error.
- raise KeyError, (s_dict[s_k][0], k, s_k)
- s_dict[s_k] = (k,v)
- try:
- return s_dict[ext][1]
- except KeyError:
- try:
- return self[None]
- except KeyError:
- return None
-
-
-if sys.platform == 'cygwin':
- # On Cygwin, os.path.normcase() lies, so just report back the
- # fact that the underlying Windows OS is case-insensitive.
- def case_sensitive_suffixes(s1, s2):
- return 0
-else:
- def case_sensitive_suffixes(s1, s2):
- return (os.path.normcase(s1) != os.path.normcase(s2))
-
-def adjustixes(fname, pre, suf, ensure_suffix=False):
- if pre:
- path, fn = os.path.split(os.path.normpath(fname))
- if fn[:len(pre)] != pre:
- fname = os.path.join(path, pre + fn)
- # Only append a suffix if the suffix we're going to add isn't already
- # there, and if either we've been asked to ensure the specific suffix
- # is present or there's no suffix on it at all.
- if suf and fname[-len(suf):] != suf and \
- (ensure_suffix or not splitext(fname)[1]):
- fname = fname + suf
- return fname
-
-
-
-# From Tim Peters,
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52560
-# ASPN: Python Cookbook: Remove duplicates from a sequence
-# (Also in the printed Python Cookbook.)
-
-def unique(s):
- """Return a list of the elements in s, but without duplicates.
-
- For example, unique([1,2,3,1,2,3]) is some permutation of [1,2,3],
- unique("abcabc") some permutation of ["a", "b", "c"], and
- unique(([1, 2], [2, 3], [1, 2])) some permutation of
- [[2, 3], [1, 2]].
-
- For best speed, all sequence elements should be hashable. Then
- unique() will usually work in linear time.
-
- If not possible, the sequence elements should enjoy a total
- ordering, and if list(s).sort() doesn't raise TypeError it's
- assumed that they do enjoy a total ordering. Then unique() will
- usually work in O(N*log2(N)) time.
-
- If that's not possible either, the sequence elements must support
- equality-testing. Then unique() will usually work in quadratic
- time.
- """
-
- n = len(s)
- if n == 0:
- return []
-
- # Try using a dict first, as that's the fastest and will usually
- # work. If it doesn't work, it will usually fail quickly, so it
- # usually doesn't cost much to *try* it. It requires that all the
- # sequence elements be hashable, and support equality comparison.
- u = {}
- try:
- for x in s:
- u[x] = 1
- except TypeError:
- pass # move on to the next method
- else:
- return u.keys()
- del u
-
- # We can't hash all the elements. Second fastest is to sort,
- # which brings the equal elements together; then duplicates are
- # easy to weed out in a single pass.
- # NOTE: Python's list.sort() was designed to be efficient in the
- # presence of many duplicate elements. This isn't true of all
- # sort functions in all languages or libraries, so this approach
- # is more effective in Python than it may be elsewhere.
- try:
- t = list(s)
- t.sort()
- except TypeError:
- pass # move on to the next method
- else:
- assert n > 0
- last = t[0]
- lasti = i = 1
- while i < n:
- if t[i] != last:
- t[lasti] = last = t[i]
- lasti = lasti + 1
- i = i + 1
- return t[:lasti]
- del t
-
- # Brute force is all that's left.
- u = []
- for x in s:
- if x not in u:
- u.append(x)
- return u
-
-
-
-# From Alex Martelli,
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52560
-# ASPN: Python Cookbook: Remove duplicates from a sequence
-# First comment, dated 2001/10/13.
-# (Also in the printed Python Cookbook.)
-
-def uniquer(seq, idfun=None):
- if idfun is None:
- def idfun(x): return x
- seen = {}
- result = []
- for item in seq:
- marker = idfun(item)
- # in old Python versions:
- # if seen.has_key(marker)
- # but in new ones:
- if marker in seen: continue
- seen[marker] = 1
- result.append(item)
- return result
-
-# A more efficient implementation of Alex's uniquer(), this avoids the
-# idfun() argument and function-call overhead by assuming that all
-# items in the sequence are hashable.
-
-def uniquer_hashables(seq):
- seen = {}
- result = []
- for item in seq:
- #if not item in seen:
- if not seen.has_key(item):
- seen[item] = 1
- result.append(item)
- return result
-
-
-
-# Much of the logic here was originally based on recipe 4.9 from the
-# Python CookBook, but we had to dumb it way down for Python 1.5.2.
-class LogicalLines:
-
- def __init__(self, fileobj):
- self.fileobj = fileobj
-
- def readline(self):
- result = []
- while 1:
- line = self.fileobj.readline()
- if not line:
- break
- if line[-2:] == '\\\n':
- result.append(line[:-2])
- else:
- result.append(line)
- break
- return string.join(result, '')
-
- def readlines(self):
- result = []
- while 1:
- line = self.readline()
- if not line:
- break
- result.append(line)
- return result
-
-
-
-class UniqueList(UserList):
- def __init__(self, seq = []):
- UserList.__init__(self, seq)
- self.unique = True
- def __make_unique(self):
- if not self.unique:
- self.data = uniquer_hashables(self.data)
- self.unique = True
- def __lt__(self, other):
- self.__make_unique()
- return UserList.__lt__(self, other)
- def __le__(self, other):
- self.__make_unique()
- return UserList.__le__(self, other)
- def __eq__(self, other):
- self.__make_unique()
- return UserList.__eq__(self, other)
- def __ne__(self, other):
- self.__make_unique()
- return UserList.__ne__(self, other)
- def __gt__(self, other):
- self.__make_unique()
- return UserList.__gt__(self, other)
- def __ge__(self, other):
- self.__make_unique()
- return UserList.__ge__(self, other)
- def __cmp__(self, other):
- self.__make_unique()
- return UserList.__cmp__(self, other)
- def __len__(self):
- self.__make_unique()
- return UserList.__len__(self)
- def __getitem__(self, i):
- self.__make_unique()
- return UserList.__getitem__(self, i)
- def __setitem__(self, i, item):
- UserList.__setitem__(self, i, item)
- self.unique = False
- def __getslice__(self, i, j):
- self.__make_unique()
- return UserList.__getslice__(self, i, j)
- def __setslice__(self, i, j, other):
- UserList.__setslice__(self, i, j, other)
- self.unique = False
- def __add__(self, other):
- result = UserList.__add__(self, other)
- result.unique = False
- return result
- def __radd__(self, other):
- result = UserList.__radd__(self, other)
- result.unique = False
- return result
- def __iadd__(self, other):
- result = UserList.__iadd__(self, other)
- result.unique = False
- return result
- def __mul__(self, other):
- result = UserList.__mul__(self, other)
- result.unique = False
- return result
- def __rmul__(self, other):
- result = UserList.__rmul__(self, other)
- result.unique = False
- return result
- def __imul__(self, other):
- result = UserList.__imul__(self, other)
- result.unique = False
- return result
- def append(self, item):
- UserList.append(self, item)
- self.unique = False
- def insert(self, i):
- UserList.insert(self, i)
- self.unique = False
- def count(self, item):
- self.__make_unique()
- return UserList.count(self, item)
- def index(self, item):
- self.__make_unique()
- return UserList.index(self, item)
- def reverse(self):
- self.__make_unique()
- UserList.reverse(self)
- def sort(self, *args, **kwds):
- self.__make_unique()
- #return UserList.sort(self, *args, **kwds)
- return apply(UserList.sort, (self,)+args, kwds)
- def extend(self, other):
- UserList.extend(self, other)
- self.unique = False
-
-
-
-class Unbuffered:
- """
- A proxy class that wraps a file object, flushing after every write,
- and delegating everything else to the wrapped object.
- """
- def __init__(self, file):
- self.file = file
- def write(self, arg):
- try:
- self.file.write(arg)
- self.file.flush()
- except IOError:
- # Stdout might be connected to a pipe that has been closed
- # by now. The most likely reason for the pipe being closed
- # is that the user has press ctrl-c. It this is the case,
- # then SCons is currently shutdown. We therefore ignore
- # IOError's here so that SCons can continue and shutdown
- # properly so that the .sconsign is correctly written
- # before SCons exits.
- pass
- def __getattr__(self, attr):
- return getattr(self.file, attr)
-
-def make_path_relative(path):
- """ makes an absolute path name to a relative pathname.
- """
- if os.path.isabs(path):
- drive_s,path = os.path.splitdrive(path)
-
- import re
- if not drive_s:
- path=re.compile("/*(.*)").findall(path)[0]
- else:
- path=path[1:]
-
- assert( not os.path.isabs( path ) ), path
- return path
-
-
-
-# The original idea for AddMethod() and RenameFunction() come from the
-# following post to the ActiveState Python Cookbook:
-#
-# ASPN: Python Cookbook : Install bound methods in an instance
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/223613
-#
-# That code was a little fragile, though, so the following changes
-# have been wrung on it:
-#
-# * Switched the installmethod() "object" and "function" arguments,
-# so the order reflects that the left-hand side is the thing being
-# "assigned to" and the right-hand side is the value being assigned.
-#
-# * Changed explicit type-checking to the "try: klass = object.__class__"
-# block in installmethod() below so that it still works with the
-# old-style classes that SCons uses.
-#
-# * Replaced the by-hand creation of methods and functions with use of
-# the "new" module, as alluded to in Alex Martelli's response to the
-# following Cookbook post:
-#
-# ASPN: Python Cookbook : Dynamically added methods to a class
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81732
-
-def AddMethod(object, function, name = None):
- """
- Adds either a bound method to an instance or an unbound method to
- a class. If name is ommited the name of the specified function
- is used by default.
- Example:
- a = A()
- def f(self, x, y):
- self.z = x + y
- AddMethod(f, A, "add")
- a.add(2, 4)
- print a.z
- AddMethod(lambda self, i: self.l[i], a, "listIndex")
- print a.listIndex(5)
- """
- import new
-
- if name is None:
- name = function.func_name
- else:
- function = RenameFunction(function, name)
-
- try:
- klass = object.__class__
- except AttributeError:
- # "object" is really a class, so it gets an unbound method.
- object.__dict__[name] = new.instancemethod(function, None, object)
- else:
- # "object" is really an instance, so it gets a bound method.
- object.__dict__[name] = new.instancemethod(function, object, klass)
-
-def RenameFunction(function, name):
- """
- Returns a function identical to the specified function, but with
- the specified name.
- """
- import new
-
- # Compatibility for Python 1.5 and 2.1. Can be removed in favor of
- # passing function.func_defaults directly to new.function() once
- # we base on Python 2.2 or later.
- func_defaults = function.func_defaults
- if func_defaults is None:
- func_defaults = ()
-
- return new.function(function.func_code,
- function.func_globals,
- name,
- func_defaults)
-
-
-md5 = False
-def MD5signature(s):
- return str(s)
-
-def MD5filesignature(fname, chunksize=65536):
- f = open(fname, "rb")
- result = f.read()
- f.close()
- return result
-
-try:
- import hashlib
-except ImportError:
- pass
-else:
- if hasattr(hashlib, 'md5'):
- md5 = True
- def MD5signature(s):
- m = hashlib.md5()
- m.update(str(s))
- return m.hexdigest()
-
- def MD5filesignature(fname, chunksize=65536):
- m = hashlib.md5()
- f = open(fname, "rb")
- while 1:
- blck = f.read(chunksize)
- if not blck:
- break
- m.update(str(blck))
- f.close()
- return m.hexdigest()
-
-def MD5collect(signatures):
- """
- Collects a list of signatures into an aggregate signature.
-
- signatures - a list of signatures
- returns - the aggregate signature
- """
- if len(signatures) == 1:
- return signatures[0]
- else:
- return MD5signature(string.join(signatures, ', '))
-
-
-
-# From Dinu C. Gherman,
-# Python Cookbook, second edition, recipe 6.17, p. 277.
-# Also:
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/68205
-# ASPN: Python Cookbook: Null Object Design Pattern
-
-# TODO(1.5):
-#class Null(object):
-class Null:
- """ Null objects always and reliably "do nothing." """
- def __new__(cls, *args, **kwargs):
- if not '_inst' in vars(cls):
- #cls._inst = type.__new__(cls, *args, **kwargs)
- cls._inst = apply(type.__new__, (cls,) + args, kwargs)
- return cls._inst
- def __init__(self, *args, **kwargs):
- pass
- def __call__(self, *args, **kwargs):
- return self
- def __repr__(self):
- return "Null(0x%08X)" % id(self)
- def __nonzero__(self):
- return False
- def __getattr__(self, name):
- return self
- def __setattr__(self, name, value):
- return self
- def __delattr__(self, name):
- return self
-
-class NullSeq(Null):
- def __len__(self):
- return 0
- def __iter__(self):
- return iter(())
- def __getitem__(self, i):
- return self
- def __delitem__(self, i):
- return self
- def __setitem__(self, i, v):
- return self
-
-
-del __revision__
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Variables/BoolVariable.py b/3rdParty/SCons/scons-local/SCons/Variables/BoolVariable.py
deleted file mode 100644
index 4cf20d8..0000000
--- a/3rdParty/SCons/scons-local/SCons/Variables/BoolVariable.py
+++ /dev/null
@@ -1,91 +0,0 @@
-"""engine.SCons.Variables.BoolVariable
-
-This file defines the option type for SCons implementing true/false values.
-
-Usage example:
-
- opts = Variables()
- opts.Add(BoolVariable('embedded', 'build for an embedded system', 0))
- ...
- if env['embedded'] == 1:
- ...
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Variables/BoolVariable.py 4043 2009/02/23 09:06:45 scons"
-
-__all__ = ['BoolVariable',]
-
-import string
-
-import SCons.Errors
-
-__true_strings = ('y', 'yes', 'true', 't', '1', 'on' , 'all' )
-__false_strings = ('n', 'no', 'false', 'f', '0', 'off', 'none')
-
-
-def _text2bool(val):
- """
- Converts strings to True/False depending on the 'truth' expressed by
- the string. If the string can't be converted, the original value
- will be returned.
-
- See '__true_strings' and '__false_strings' for values considered
- 'true' or 'false respectivly.
-
- This is usable as 'converter' for SCons' Variables.
- """
- lval = string.lower(val)
- if lval in __true_strings: return True
- if lval in __false_strings: return False
- raise ValueError("Invalid value for boolean option: %s" % val)
-
-
-def _validator(key, val, env):
- """
- Validates the given value to be either '0' or '1'.
-
- This is usable as 'validator' for SCons' Variables.
- """
- if not env[key] in (True, False):
- raise SCons.Errors.UserError(
- 'Invalid value for boolean option %s: %s' % (key, env[key]))
-
-
-def BoolVariable(key, help, default):
- """
- The input parameters describe a boolen option, thus they are
- returned with the correct converter and validator appended. The
- 'help' text will by appended by '(yes|no) to show the valid
- valued. The result is usable for input to opts.Add().
- """
- return (key, '%s (yes|no)' % help, default,
- _validator, _text2bool)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Variables/EnumVariable.py b/3rdParty/SCons/scons-local/SCons/Variables/EnumVariable.py
deleted file mode 100644
index bd72d05..0000000
--- a/3rdParty/SCons/scons-local/SCons/Variables/EnumVariable.py
+++ /dev/null
@@ -1,107 +0,0 @@
-"""engine.SCons.Variables.EnumVariable
-
-This file defines the option type for SCons allowing only specified
-input-values.
-
-Usage example:
-
- opts = Variables()
- opts.Add(EnumVariable('debug', 'debug output and symbols', 'no',
- allowed_values=('yes', 'no', 'full'),
- map={}, ignorecase=2))
- ...
- if env['debug'] == 'full':
- ...
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Variables/EnumVariable.py 4043 2009/02/23 09:06:45 scons"
-
-__all__ = ['EnumVariable',]
-
-import string
-
-import SCons.Errors
-
-def _validator(key, val, env, vals):
- if not val in vals:
- raise SCons.Errors.UserError(
- 'Invalid value for option %s: %s' % (key, val))
-
-
-def EnumVariable(key, help, default, allowed_values, map={}, ignorecase=0):
- """
- The input parameters describe a option with only certain values
- allowed. They are returned with an appropriate converter and
- validator appended. The result is usable for input to
- Variables.Add().
-
- 'key' and 'default' are the values to be passed on to Variables.Add().
-
- 'help' will be appended by the allowed values automatically
-
- 'allowed_values' is a list of strings, which are allowed as values
- for this option.
-
- The 'map'-dictionary may be used for converting the input value
- into canonical values (eg. for aliases).
-
- 'ignorecase' defines the behaviour of the validator:
-
- If ignorecase == 0, the validator/converter are case-sensitive.
- If ignorecase == 1, the validator/converter are case-insensitive.
- If ignorecase == 2, the validator/converter is case-insensitive and
- the converted value will always be lower-case.
-
- The 'validator' tests whether the value is in the list of allowed
- values. The 'converter' converts input values according to the
- given 'map'-dictionary (unmapped input values are returned
- unchanged).
- """
- help = '%s (%s)' % (help, string.join(allowed_values, '|'))
- # define validator
- if ignorecase >= 1:
- validator = lambda key, val, env, vals=allowed_values: \
- _validator(key, string.lower(val), env, vals)
- else:
- validator = lambda key, val, env, vals=allowed_values: \
- _validator(key, val, env, vals)
- # define converter
- if ignorecase == 2:
- converter = lambda val, map=map: \
- string.lower(map.get(string.lower(val), val))
- elif ignorecase == 1:
- converter = lambda val, map=map: \
- map.get(string.lower(val), val)
- else:
- converter = lambda val, map=map: \
- map.get(val, val)
- return (key, help, default, validator, converter)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Variables/ListVariable.py b/3rdParty/SCons/scons-local/SCons/Variables/ListVariable.py
deleted file mode 100644
index 1051c51..0000000
--- a/3rdParty/SCons/scons-local/SCons/Variables/ListVariable.py
+++ /dev/null
@@ -1,139 +0,0 @@
-"""engine.SCons.Variables.ListVariable
-
-This file defines the option type for SCons implementing 'lists'.
-
-A 'list' option may either be 'all', 'none' or a list of names
-separated by comma. After the option has been processed, the option
-value holds either the named list elements, all list elemens or no
-list elements at all.
-
-Usage example:
-
- list_of_libs = Split('x11 gl qt ical')
-
- opts = Variables()
- opts.Add(ListVariable('shared',
- 'libraries to build as shared libraries',
- 'all',
- elems = list_of_libs))
- ...
- for lib in list_of_libs:
- if lib in env['shared']:
- env.SharedObject(...)
- else:
- env.Object(...)
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Variables/ListVariable.py 4043 2009/02/23 09:06:45 scons"
-
-# Know Bug: This should behave like a Set-Type, but does not really,
-# since elements can occur twice.
-
-__all__ = ['ListVariable',]
-
-import string
-import UserList
-
-import SCons.Util
-
-
-class _ListVariable(UserList.UserList):
- def __init__(self, initlist=[], allowedElems=[]):
- UserList.UserList.__init__(self, filter(None, initlist))
- self.allowedElems = allowedElems[:]
- self.allowedElems.sort()
-
- def __cmp__(self, other):
- raise NotImplementedError
- def __eq__(self, other):
- raise NotImplementedError
- def __ge__(self, other):
- raise NotImplementedError
- def __gt__(self, other):
- raise NotImplementedError
- def __le__(self, other):
- raise NotImplementedError
- def __lt__(self, other):
- raise NotImplementedError
- def __str__(self):
- if len(self) == 0:
- return 'none'
- self.data.sort()
- if self.data == self.allowedElems:
- return 'all'
- else:
- return string.join(self, ',')
- def prepare_to_store(self):
- return self.__str__()
-
-def _converter(val, allowedElems, mapdict):
- """
- """
- if val == 'none':
- val = []
- elif val == 'all':
- val = allowedElems
- else:
- val = filter(None, string.split(val, ','))
- val = map(lambda v, m=mapdict: m.get(v, v), val)
- notAllowed = filter(lambda v, aE=allowedElems: not v in aE, val)
- if notAllowed:
- raise ValueError("Invalid value(s) for option: %s" %
- string.join(notAllowed, ','))
- return _ListVariable(val, allowedElems)
-
-
-## def _validator(key, val, env):
-## """
-## """
-## # todo: write validater for pgk list
-## return 1
-
-
-def ListVariable(key, help, default, names, map={}):
- """
- The input parameters describe a 'package list' option, thus they
- are returned with the correct converter and validater appended. The
- result is usable for input to opts.Add() .
-
- A 'package list' option may either be 'all', 'none' or a list of
- package names (separated by space).
- """
- names_str = 'allowed names: %s' % string.join(names, ' ')
- if SCons.Util.is_List(default):
- default = string.join(default, ',')
- help = string.join(
- (help, '(all|none|comma-separated list of names)', names_str),
- '\n ')
- return (key, help, default,
- None, #_validator,
- lambda val, elems=names, m=map: _converter(val, elems, m))
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Variables/PackageVariable.py b/3rdParty/SCons/scons-local/SCons/Variables/PackageVariable.py
deleted file mode 100644
index 66cea0d..0000000
--- a/3rdParty/SCons/scons-local/SCons/Variables/PackageVariable.py
+++ /dev/null
@@ -1,109 +0,0 @@
-"""engine.SCons.Variables.PackageVariable
-
-This file defines the option type for SCons implementing 'package
-activation'.
-
-To be used whenever a 'package' may be enabled/disabled and the
-package path may be specified.
-
-Usage example:
-
- Examples:
- x11=no (disables X11 support)
- x11=yes (will search for the package installation dir)
- x11=/usr/local/X11 (will check this path for existance)
-
- To replace autoconf's --with-xxx=yyy
-
- opts = Variables()
- opts.Add(PackageVariable('x11',
- 'use X11 installed here (yes = search some places',
- 'yes'))
- ...
- if env['x11'] == True:
- dir = ... search X11 in some standard places ...
- env['x11'] = dir
- if env['x11']:
- ... build with x11 ...
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Variables/PackageVariable.py 4043 2009/02/23 09:06:45 scons"
-
-__all__ = ['PackageVariable',]
-
-import string
-
-import SCons.Errors
-
-__enable_strings = ('1', 'yes', 'true', 'on', 'enable', 'search')
-__disable_strings = ('0', 'no', 'false', 'off', 'disable')
-
-def _converter(val):
- """
- """
- lval = string.lower(val)
- if lval in __enable_strings: return True
- if lval in __disable_strings: return False
- #raise ValueError("Invalid value for boolean option: %s" % val)
- return val
-
-
-def _validator(key, val, env, searchfunc):
- # NB: searchfunc is currenty undocumented and unsupported
- """
- """
- # todo: write validator, check for path
- import os
- if env[key] is True:
- if searchfunc:
- env[key] = searchfunc(key, val)
- elif env[key] and not os.path.exists(val):
- raise SCons.Errors.UserError(
- 'Path does not exist for option %s: %s' % (key, val))
-
-
-def PackageVariable(key, help, default, searchfunc=None):
- # NB: searchfunc is currenty undocumented and unsupported
- """
- The input parameters describe a 'package list' option, thus they
- are returned with the correct converter and validator appended. The
- result is usable for input to opts.Add() .
-
- A 'package list' option may either be 'all', 'none' or a list of
- package names (seperated by space).
- """
- help = string.join(
- (help, '( yes | no | /path/to/%s )' % key),
- '\n ')
- return (key, help, default,
- lambda k, v, e, f=searchfunc: _validator(k,v,e,f),
- _converter)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Variables/PathVariable.py b/3rdParty/SCons/scons-local/SCons/Variables/PathVariable.py
deleted file mode 100644
index 6a44ef6..0000000
--- a/3rdParty/SCons/scons-local/SCons/Variables/PathVariable.py
+++ /dev/null
@@ -1,147 +0,0 @@
-"""SCons.Variables.PathVariable
-
-This file defines an option type for SCons implementing path settings.
-
-To be used whenever a a user-specified path override should be allowed.
-
-Arguments to PathVariable are:
- option-name = name of this option on the command line (e.g. "prefix")
- option-help = help string for option
- option-dflt = default value for this option
- validator = [optional] validator for option value. Predefined
- validators are:
-
- PathAccept -- accepts any path setting; no validation
- PathIsDir -- path must be an existing directory
- PathIsDirCreate -- path must be a dir; will create
- PathIsFile -- path must be a file
- PathExists -- path must exist (any type) [default]
-
- The validator is a function that is called and which
- should return True or False to indicate if the path
- is valid. The arguments to the validator function
- are: (key, val, env). The key is the name of the
- option, the val is the path specified for the option,
- and the env is the env to which the Otions have been
- added.
-
-Usage example:
-
- Examples:
- prefix=/usr/local
-
- opts = Variables()
-
- opts = Variables()
- opts.Add(PathVariable('qtdir',
- 'where the root of Qt is installed',
- qtdir, PathIsDir))
- opts.Add(PathVariable('qt_includes',
- 'where the Qt includes are installed',
- '$qtdir/includes', PathIsDirCreate))
- opts.Add(PathVariable('qt_libraries',
- 'where the Qt library is installed',
- '$qtdir/lib'))
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Variables/PathVariable.py 4043 2009/02/23 09:06:45 scons"
-
-__all__ = ['PathVariable',]
-
-import os
-import os.path
-
-import SCons.Errors
-
-class _PathVariableClass:
-
- def PathAccept(self, key, val, env):
- """Accepts any path, no checking done."""
- pass
-
- def PathIsDir(self, key, val, env):
- """Validator to check if Path is a directory."""
- if not os.path.isdir(val):
- if os.path.isfile(val):
- m = 'Directory path for option %s is a file: %s'
- else:
- m = 'Directory path for option %s does not exist: %s'
- raise SCons.Errors.UserError(m % (key, val))
-
- def PathIsDirCreate(self, key, val, env):
- """Validator to check if Path is a directory,
- creating it if it does not exist."""
- if os.path.isfile(val):
- m = 'Path for option %s is a file, not a directory: %s'
- raise SCons.Errors.UserError(m % (key, val))
- if not os.path.isdir(val):
- os.makedirs(val)
-
- def PathIsFile(self, key, val, env):
- """validator to check if Path is a file"""
- if not os.path.isfile(val):
- if os.path.isdir(val):
- m = 'File path for option %s is a directory: %s'
- else:
- m = 'File path for option %s does not exist: %s'
- raise SCons.Errors.UserError(m % (key, val))
-
- def PathExists(self, key, val, env):
- """validator to check if Path exists"""
- if not os.path.exists(val):
- m = 'Path for option %s does not exist: %s'
- raise SCons.Errors.UserError(m % (key, val))
-
- def __call__(self, key, help, default, validator=None):
- # NB: searchfunc is currenty undocumented and unsupported
- """
- The input parameters describe a 'path list' option, thus they
- are returned with the correct converter and validator appended. The
- result is usable for input to opts.Add() .
-
- The 'default' option specifies the default path to use if the
- user does not specify an override with this option.
-
- validator is a validator, see this file for examples
- """
- if validator is None:
- validator = self.PathExists
-
- if SCons.Util.is_List(key) or SCons.Util.is_Tuple(key):
- return (key, '%s ( /path/to/%s )' % (help, key[0]), default,
- validator, None)
- else:
- return (key, '%s ( /path/to/%s )' % (help, key), default,
- validator, None)
-
-PathVariable = _PathVariableClass()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Variables/__init__.py b/3rdParty/SCons/scons-local/SCons/Variables/__init__.py
deleted file mode 100644
index 89ba227..0000000
--- a/3rdParty/SCons/scons-local/SCons/Variables/__init__.py
+++ /dev/null
@@ -1,309 +0,0 @@
-"""engine.SCons.Variables
-
-This file defines the Variables class that is used to add user-friendly
-customizable variables to an SCons build.
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/Variables/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-import os.path
-import string
-import sys
-
-import SCons.Environment
-import SCons.Errors
-import SCons.Util
-import SCons.Warnings
-
-from BoolVariable import BoolVariable # okay
-from EnumVariable import EnumVariable # okay
-from ListVariable import ListVariable # naja
-from PackageVariable import PackageVariable # naja
-from PathVariable import PathVariable # okay
-
-
-class Variables:
- instance=None
-
- """
- Holds all the options, updates the environment with the variables,
- and renders the help text.
- """
- def __init__(self, files=[], args={}, is_global=1):
- """
- files - [optional] List of option configuration files to load
- (backward compatibility) If a single string is passed it is
- automatically placed in a file list
- """
- self.options = []
- self.args = args
- if not SCons.Util.is_List(files):
- if files:
- files = [ files ]
- else:
- files = []
- self.files = files
- self.unknown = {}
-
- # create the singleton instance
- if is_global:
- self=Variables.instance
-
- if not Variables.instance:
- Variables.instance=self
-
- def _do_add(self, key, help="", default=None, validator=None, converter=None):
- class Variable:
- pass
-
- option = Variable()
-
- # if we get a list or a tuple, we take the first element as the
- # option key and store the remaining in aliases.
- if SCons.Util.is_List(key) or SCons.Util.is_Tuple(key):
- option.key = key[0]
- option.aliases = key[1:]
- else:
- option.key = key
- option.aliases = [ key ]
- option.help = help
- option.default = default
- option.validator = validator
- option.converter = converter
-
- self.options.append(option)
-
- def keys(self):
- """
- Returns the keywords for the options
- """
- return map(lambda o: o.key, self.options)
-
- def Add(self, key, help="", default=None, validator=None, converter=None, **kw):
- """
- Add an option.
-
- key - the name of the variable, or a list or tuple of arguments
- help - optional help text for the options
- default - optional default value
- validator - optional function that is called to validate the option's value
- Called with (key, value, environment)
- converter - optional function that is called to convert the option's value before
- putting it in the environment.
- """
-
- if SCons.Util.is_List(key) or type(key) == type(()):
- apply(self._do_add, key)
- return
-
- if not SCons.Util.is_String(key) or \
- not SCons.Environment.is_valid_construction_var(key):
- raise SCons.Errors.UserError, "Illegal Variables.Add() key `%s'" % str(key)
-
- self._do_add(key, help, default, validator, converter)
-
- def AddVariables(self, *optlist):
- """
- Add a list of options.
-
- Each list element is a tuple/list of arguments to be passed on
- to the underlying method for adding options.
-
- Example:
- opt.AddVariables(
- ('debug', '', 0),
- ('CC', 'The C compiler'),
- ('VALIDATE', 'An option for testing validation', 'notset',
- validator, None),
- )
- """
- for o in optlist:
- apply(self._do_add, o)
-
-
- def Update(self, env, args=None):
- """
- Update an environment with the option variables.
-
- env - the environment to update.
- """
-
- values = {}
-
- # first set the defaults:
- for option in self.options:
- if not option.default is None:
- values[option.key] = option.default
-
- # next set the value specified in the options file
- for filename in self.files:
- if os.path.exists(filename):
- dir = os.path.split(os.path.abspath(filename))[0]
- if dir:
- sys.path.insert(0, dir)
- try:
- values['__name__'] = filename
- execfile(filename, {}, values)
- finally:
- if dir:
- del sys.path[0]
- del values['__name__']
-
- # set the values specified on the command line
- if args is None:
- args = self.args
-
- for arg, value in args.items():
- added = False
- for option in self.options:
- if arg in option.aliases + [ option.key ]:
- values[option.key] = value
- added = True
- if not added:
- self.unknown[arg] = value
-
- # put the variables in the environment:
- # (don't copy over variables that are not declared as options)
- for option in self.options:
- try:
- env[option.key] = values[option.key]
- except KeyError:
- pass
-
- # Call the convert functions:
- for option in self.options:
- if option.converter and values.has_key(option.key):
- value = env.subst('${%s}'%option.key)
- try:
- try:
- env[option.key] = option.converter(value)
- except TypeError:
- env[option.key] = option.converter(value, env)
- except ValueError, x:
- raise SCons.Errors.UserError, 'Error converting option: %s\n%s'%(option.key, x)
-
-
- # Finally validate the values:
- for option in self.options:
- if option.validator and values.has_key(option.key):
- option.validator(option.key, env.subst('${%s}'%option.key), env)
-
- def UnknownVariables(self):
- """
- Returns any options in the specified arguments lists that
- were not known, declared options in this object.
- """
- return self.unknown
-
- def Save(self, filename, env):
- """
- Saves all the options in the given file. This file can
- then be used to load the options next run. This can be used
- to create an option cache file.
-
- filename - Name of the file to save into
- env - the environment get the option values from
- """
-
- # Create the file and write out the header
- try:
- fh = open(filename, 'w')
-
- try:
- # Make an assignment in the file for each option
- # within the environment that was assigned a value
- # other than the default.
- for option in self.options:
- try:
- value = env[option.key]
- try:
- prepare = value.prepare_to_store
- except AttributeError:
- try:
- eval(repr(value))
- except KeyboardInterrupt:
- raise
- except:
- # Convert stuff that has a repr() that
- # cannot be evaluated into a string
- value = SCons.Util.to_String(value)
- else:
- value = prepare()
-
- defaultVal = env.subst(SCons.Util.to_String(option.default))
- if option.converter:
- defaultVal = option.converter(defaultVal)
-
- if str(env.subst('${%s}' % option.key)) != str(defaultVal):
- fh.write('%s = %s\n' % (option.key, repr(value)))
- except KeyError:
- pass
- finally:
- fh.close()
-
- except IOError, x:
- raise SCons.Errors.UserError, 'Error writing options to file: %s\n%s' % (filename, x)
-
- def GenerateHelpText(self, env, sort=None):
- """
- Generate the help text for the options.
-
- env - an environment that is used to get the current values
- of the options.
- """
-
- if sort:
- options = self.options[:]
- options.sort(lambda x,y,func=sort: func(x.key,y.key))
- else:
- options = self.options
-
- def format(opt, self=self, env=env):
- if env.has_key(opt.key):
- actual = env.subst('${%s}' % opt.key)
- else:
- actual = None
- return self.FormatVariableHelpText(env, opt.key, opt.help, opt.default, actual, opt.aliases)
- lines = filter(None, map(format, options))
-
- return string.join(lines, '')
-
- format = '\n%s: %s\n default: %s\n actual: %s\n'
- format_ = '\n%s: %s\n default: %s\n actual: %s\n aliases: %s\n'
-
- def FormatVariableHelpText(self, env, key, help, default, actual, aliases=[]):
- # Don't display the key name itself as an alias.
- aliases = filter(lambda a, k=key: a != k, aliases)
- if len(aliases)==0:
- return self.format % (key, help, default, actual)
- else:
- return self.format_ % (key, help, default, actual, aliases)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/Warnings.py b/3rdParty/SCons/scons-local/SCons/Warnings.py
deleted file mode 100644
index ada4304..0000000
--- a/3rdParty/SCons/scons-local/SCons/Warnings.py
+++ /dev/null
@@ -1,217 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-"""SCons.Warnings
-
-This file implements the warnings framework for SCons.
-
-"""
-
-__revision__ = "src/engine/SCons/Warnings.py 4043 2009/02/23 09:06:45 scons"
-
-import string
-import sys
-
-import SCons.Errors
-
-class Warning(SCons.Errors.UserError):
- pass
-
-class MandatoryWarning(Warning):
- pass
-
-
-
-class FutureDeprecatedWarning(Warning):
- pass
-
-class DeprecatedWarning(Warning):
- pass
-
-class MandatoryDeprecatedWarning(MandatoryWarning):
- pass
-
-
-
-# NOTE: If you add a new warning class, add it to the man page, too!
-
-class CacheWriteErrorWarning(Warning):
- pass
-
-class CorruptSConsignWarning(Warning):
- pass
-
-class DependencyWarning(Warning):
- pass
-
-class DeprecatedCopyWarning(DeprecatedWarning):
- pass
-
-class DeprecatedOptionsWarning(DeprecatedWarning):
- pass
-
-class DeprecatedSourceSignaturesWarning(DeprecatedWarning):
- pass
-
-class DeprecatedTargetSignaturesWarning(DeprecatedWarning):
- pass
-
-class DuplicateEnvironmentWarning(Warning):
- pass
-
-class FutureReservedVariableWarning(Warning):
- pass
-
-class LinkWarning(Warning):
- pass
-
-class MisleadingKeywordsWarning(Warning):
- pass
-
-class MissingSConscriptWarning(Warning):
- pass
-
-class NoMD5ModuleWarning(Warning):
- pass
-
-class NoMetaclassSupportWarning(Warning):
- pass
-
-class NoObjectCountWarning(Warning):
- pass
-
-class NoParallelSupportWarning(Warning):
- pass
-
-class PythonVersionWarning(DeprecatedWarning):
- pass
-
-class ReservedVariableWarning(Warning):
- pass
-
-class StackSizeWarning(Warning):
- pass
-
-class TaskmasterNeedsExecuteWarning(FutureDeprecatedWarning):
- pass
-
-class FortranCxxMixWarning(LinkWarning):
- pass
-
-_warningAsException = 0
-
-# The below is a list of 2-tuples. The first element is a class object.
-# The second element is true if that class is enabled, false if it is disabled.
-_enabled = []
-
-_warningOut = None
-
-def suppressWarningClass(clazz):
- """Suppresses all warnings that are of type clazz or
- derived from clazz."""
- _enabled.insert(0, (clazz, 0))
-
-def enableWarningClass(clazz):
- """Suppresses all warnings that are of type clazz or
- derived from clazz."""
- _enabled.insert(0, (clazz, 1))
-
-def warningAsException(flag=1):
- """Turn warnings into exceptions. Returns the old value of the flag."""
- global _warningAsException
- old = _warningAsException
- _warningAsException = flag
- return old
-
-def warn(clazz, *args):
- global _enabled, _warningAsException, _warningOut
-
- warning = clazz(args)
- for clazz, flag in _enabled:
- if isinstance(warning, clazz):
- if flag:
- if _warningAsException:
- raise warning
-
- if _warningOut:
- _warningOut(warning)
- break
-
-def process_warn_strings(arguments):
- """Process string specifications of enabling/disabling warnings,
- as passed to the --warn option or the SetOption('warn') function.
-
-
- An argument to this option should be of the form <warning-class>
- or no-<warning-class>. The warning class is munged in order
- to get an actual class name from the classes above, which we
- need to pass to the {enable,disable}WarningClass() functions.
- The supplied <warning-class> is split on hyphens, each element
- is capitalized, then smushed back together. Then the string
- "Warning" is appended to get the class name.
-
- For example, 'deprecated' will enable the DeprecatedWarning
- class. 'no-dependency' will disable the .DependencyWarning
- class.
-
- As a special case, --warn=all and --warn=no-all will enable or
- disable (respectively) the base Warning class of all warnings.
-
- """
-
- def _capitalize(s):
- if s[:5] == "scons":
- return "SCons" + s[5:]
- else:
- return string.capitalize(s)
-
- for arg in arguments:
-
- elems = string.split(string.lower(arg), '-')
- enable = 1
- if elems[0] == 'no':
- enable = 0
- del elems[0]
-
- if len(elems) == 1 and elems[0] == 'all':
- class_name = "Warning"
- else:
- class_name = string.join(map(_capitalize, elems), '') + "Warning"
- try:
- clazz = globals()[class_name]
- except KeyError:
- sys.stderr.write("No warning type: '%s'\n" % arg)
- else:
- if enable:
- enableWarningClass(clazz)
- elif issubclass(clazz, MandatoryDeprecatedWarning):
- fmt = "Can not disable mandataory warning: '%s'\n"
- sys.stderr.write(fmt % arg)
- else:
- suppressWarningClass(clazz)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/__init__.py b/3rdParty/SCons/scons-local/SCons/__init__.py
deleted file mode 100644
index 0893900..0000000
--- a/3rdParty/SCons/scons-local/SCons/__init__.py
+++ /dev/null
@@ -1,49 +0,0 @@
-"""SCons
-
-The main package for the SCons software construction utility.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-__version__ = "1.2.0.d20090223"
-
-__build__ = "r4043"
-
-__buildsys__ = "scons-dev"
-
-__date__ = "2009/02/23 09:06:45"
-
-__developer__ = "scons"
-
-# make sure compatibility is always in place
-import SCons.compat
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/__init__.py b/3rdParty/SCons/scons-local/SCons/compat/__init__.py
deleted file mode 100644
index f48ae4a..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/__init__.py
+++ /dev/null
@@ -1,257 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__doc__ = """
-SCons compatibility package for old Python versions
-
-This subpackage holds modules that provide backwards-compatible
-implementations of various things that we'd like to use in SCons but which
-only show up in later versions of Python than the early, old version(s)
-we still support.
-
-Other code will not generally reference things in this package through
-the SCons.compat namespace. The modules included here add things to
-the __builtin__ namespace or the global module list so that the rest
-of our code can use the objects and names imported here regardless of
-Python version.
-
-Simply enough, things that go in the __builtin__ name space come from
-our builtins module.
-
-The rest of the things here will be in individual compatibility modules
-that are either: 1) suitably modified copies of the future modules that
-we want to use; or 2) backwards compatible re-implementations of the
-specific portions of a future module's API that we want to use.
-
-GENERAL WARNINGS: Implementations of functions in the SCons.compat
-modules are *NOT* guaranteed to be fully compliant with these functions in
-later versions of Python. We are only concerned with adding functionality
-that we actually use in SCons, so be wary if you lift this code for
-other uses. (That said, making these more nearly the same as later,
-official versions is still a desirable goal, we just don't need to be
-obsessive about it.)
-
-We name the compatibility modules with an initial '_scons_' (for example,
-_scons_subprocess.py is our compatibility module for subprocess) so
-that we can still try to import the real module name and fall back to
-our compatibility module if we get an ImportError. The import_as()
-function defined below loads the module as the "real" name (without the
-'_scons'), after which all of the "import {module}" statements in the
-rest of our code will find our pre-loaded compatibility module.
-"""
-
-__revision__ = "src/engine/SCons/compat/__init__.py 4043 2009/02/23 09:06:45 scons"
-
-def import_as(module, name):
- """
- Imports the specified module (from our local directory) as the
- specified name.
- """
- import imp
- import os.path
- dir = os.path.split(__file__)[0]
- file, filename, suffix_mode_type = imp.find_module(module, [dir])
- imp.load_module(name, file, filename, suffix_mode_type)
-
-import builtins
-
-try:
- import hashlib
-except ImportError:
- # Pre-2.5 Python has no hashlib module.
- try:
- import_as('_scons_hashlib', 'hashlib')
- except ImportError:
- # If we failed importing our compatibility module, it probably
- # means this version of Python has no md5 module. Don't do
- # anything and let the higher layer discover this fact, so it
- # can fall back to using timestamp.
- pass
-
-try:
- set
-except NameError:
- # Pre-2.4 Python has no native set type
- try:
- # Python 2.2 and 2.3 can use the copy of the 2.[45] sets module
- # that we grabbed.
- import_as('_scons_sets', 'sets')
- except (ImportError, SyntaxError):
- # Python 1.5 (ImportError, no __future_ module) and 2.1
- # (SyntaxError, no generators in __future__) will blow up
- # trying to import the 2.[45] sets module, so back off to a
- # custom sets module that can be discarded easily when we
- # stop supporting those versions.
- import_as('_scons_sets15', 'sets')
- import __builtin__
- import sets
- __builtin__.set = sets.Set
-
-import fnmatch
-try:
- fnmatch.filter
-except AttributeError:
- # Pre-2.2 Python has no fnmatch.filter() function.
- def filter(names, pat):
- """Return the subset of the list NAMES that match PAT"""
- import os,posixpath
- result=[]
- pat = os.path.normcase(pat)
- if not fnmatch._cache.has_key(pat):
- import re
- res = fnmatch.translate(pat)
- fnmatch._cache[pat] = re.compile(res)
- match = fnmatch._cache[pat].match
- if os.path is posixpath:
- # normcase on posix is NOP. Optimize it away from the loop.
- for name in names:
- if match(name):
- result.append(name)
- else:
- for name in names:
- if match(os.path.normcase(name)):
- result.append(name)
- return result
- fnmatch.filter = filter
- del filter
-
-try:
- import itertools
-except ImportError:
- # Pre-2.3 Python has no itertools module.
- import_as('_scons_itertools', 'itertools')
-
-# If we need the compatibility version of textwrap, it must be imported
-# before optparse, which uses it.
-try:
- import textwrap
-except ImportError:
- # Pre-2.3 Python has no textwrap module.
- import_as('_scons_textwrap', 'textwrap')
-
-try:
- import optparse
-except ImportError:
- # Pre-2.3 Python has no optparse module.
- import_as('_scons_optparse', 'optparse')
-
-import os
-try:
- os.devnull
-except AttributeError:
- # Pre-2.4 Python has no os.devnull attribute
- import sys
- _names = sys.builtin_module_names
- if 'posix' in _names:
- os.devnull = '/dev/null'
- elif 'nt' in _names:
- os.devnull = 'nul'
- os.path.devnull = os.devnull
-try:
- os.path.lexists
-except AttributeError:
- # Pre-2.4 Python has no os.path.lexists function
- def lexists(path):
- return os.path.exists(path) or os.path.islink(path)
- os.path.lexists = lexists
-
-import shlex
-try:
- shlex.split
-except AttributeError:
- # Pre-2.3 Python has no shlex.split() function.
- #
- # The full white-space splitting semantics of shlex.split() are
- # complicated to reproduce by hand, so just use a compatibility
- # version of the shlex module cribbed from Python 2.5 with some
- # minor modifications for older Python versions.
- del shlex
- import_as('_scons_shlex', 'shlex')
-
-
-import shutil
-try:
- shutil.move
-except AttributeError:
- # Pre-2.3 Python has no shutil.move() function.
- #
- # Cribbed from Python 2.5.
- import os
-
- def move(src, dst):
- """Recursively move a file or directory to another location.
-
- If the destination is on our current filesystem, then simply use
- rename. Otherwise, copy src to the dst and then remove src.
- A lot more could be done here... A look at a mv.c shows a lot of
- the issues this implementation glosses over.
-
- """
- try:
- os.rename(src, dst)
- except OSError:
- if os.path.isdir(src):
- if shutil.destinsrc(src, dst):
- raise Error, "Cannot move a directory '%s' into itself '%s'." % (src, dst)
- shutil.copytree(src, dst, symlinks=True)
- shutil.rmtree(src)
- else:
- shutil.copy2(src,dst)
- os.unlink(src)
- shutil.move = move
- del move
-
- def destinsrc(src, dst):
- src = os.path.abspath(src)
- return os.path.abspath(dst)[:len(src)] == src
- shutil.destinsrc = destinsrc
- del destinsrc
-
-
-try:
- import subprocess
-except ImportError:
- # Pre-2.4 Python has no subprocess module.
- import_as('_scons_subprocess', 'subprocess')
-
-import sys
-try:
- sys.version_info
-except AttributeError:
- # Pre-1.6 Python has no sys.version_info
- import string
- version_string = string.split(sys.version)[0]
- version_ints = map(int, string.split(version_string, '.'))
- sys.version_info = tuple(version_ints + ['final', 0])
-
-try:
- import UserString
-except ImportError:
- # Pre-1.6 Python has no UserString module.
- import_as('_scons_UserString', 'UserString')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_UserString.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_UserString.py
deleted file mode 100644
index 4b736fd..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_UserString.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/compat/_scons_UserString.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """
-A user-defined wrapper around string objects
-
-This class is "borrowed" from the Python 2.2 UserString and modified
-slightly for use with SCons. It is *NOT* guaranteed to be fully compliant
-with the standard UserString class from all later versions of Python.
-In particular, it does not necessarily contain all of the methods found
-in later versions.
-"""
-
-import types
-
-StringType = types.StringType
-
-if hasattr(types, 'UnicodeType'):
- UnicodeType = types.UnicodeType
- def is_String(obj):
- return type(obj) in (StringType, UnicodeType)
-else:
- def is_String(obj):
- return type(obj) is StringType
-
-class UserString:
- def __init__(self, seq):
- if is_String(seq):
- self.data = seq
- elif isinstance(seq, UserString):
- self.data = seq.data[:]
- else:
- self.data = str(seq)
- def __str__(self): return str(self.data)
- def __repr__(self): return repr(self.data)
- def __int__(self): return int(self.data)
- def __long__(self): return long(self.data)
- def __float__(self): return float(self.data)
- def __complex__(self): return complex(self.data)
- def __hash__(self): return hash(self.data)
-
- def __cmp__(self, string):
- if isinstance(string, UserString):
- return cmp(self.data, string.data)
- else:
- return cmp(self.data, string)
- def __contains__(self, char):
- return char in self.data
-
- def __len__(self): return len(self.data)
- def __getitem__(self, index): return self.__class__(self.data[index])
- def __getslice__(self, start, end):
- start = max(start, 0); end = max(end, 0)
- return self.__class__(self.data[start:end])
-
- def __add__(self, other):
- if isinstance(other, UserString):
- return self.__class__(self.data + other.data)
- elif is_String(other):
- return self.__class__(self.data + other)
- else:
- return self.__class__(self.data + str(other))
- def __radd__(self, other):
- if is_String(other):
- return self.__class__(other + self.data)
- else:
- return self.__class__(str(other) + self.data)
- def __mul__(self, n):
- return self.__class__(self.data*n)
- __rmul__ = __mul__
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_hashlib.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_hashlib.py
deleted file mode 100644
index 2fc1ce6..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_hashlib.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__doc__ = """
-hashlib backwards-compatibility module for older (pre-2.5) Python versions
-
-This does not not NOT (repeat, *NOT*) provide complete hashlib
-functionality. It only wraps the portions of MD5 functionality used
-by SCons, in an interface that looks like hashlib (or enough for our
-purposes, anyway). In fact, this module will raise an ImportError if
-the underlying md5 module isn't available.
-"""
-
-__revision__ = "src/engine/SCons/compat/_scons_hashlib.py 4043 2009/02/23 09:06:45 scons"
-
-import md5
-import string
-
-class md5obj:
-
- md5_module = md5
-
- def __init__(self, name, string=''):
- if not name in ('MD5', 'md5'):
- raise ValueError, "unsupported hash type"
- self.name = 'md5'
- self.m = self.md5_module.md5()
-
- def __repr__(self):
- return '<%s HASH object @ %#x>' % (self.name, id(self))
-
- def copy(self):
- import copy
- result = copy.copy(self)
- result.m = self.m.copy()
- return result
-
- def digest(self):
- return self.m.digest()
-
- def update(self, arg):
- return self.m.update(arg)
-
- if hasattr(md5.md5(), 'hexdigest'):
-
- def hexdigest(self):
- return self.m.hexdigest()
-
- else:
-
- # Objects created by the underlying md5 module have no native
- # hexdigest() method (*cough* 1.5.2 *cough*), so provide an
- # equivalent lifted from elsewhere.
- def hexdigest(self):
- h = string.hexdigits
- r = ''
- for c in self.digest():
- i = ord(c)
- r = r + h[(i >> 4) & 0xF] + h[i & 0xF]
- return r
-
-new = md5obj
-
-def md5(string=''):
- return md5obj('md5', string)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_itertools.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_itertools.py
deleted file mode 100644
index d2289d3..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_itertools.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/compat/_scons_itertools.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """
-Implementations of itertools functions for Python versions that don't
-have iterators.
-
-These implement the functions by creating the entire list, not returning
-it element-by-element as the real itertools functions do. This means
-that early Python versions won't get the performance benefit of using
-the itertools, but we can still use them so the later Python versions
-do get the advantages of using iterators.
-
-Because we return the entire list, we intentionally do not implement the
-itertools functions that "return" infinitely-long lists: the count(),
-cycle() and repeat() functions. Other functions below have remained
-unimplemented simply because they aren't being used (yet) and it wasn't
-obvious how to do it. Or, conversely, we only implemented those functions
-that *were* easy to implement (mostly because the Python documentation
-contained examples of equivalent code).
-
-Note that these do not have independent unit tests, so it's possible
-that there are bugs.
-"""
-
-def chain(*iterables):
- result = []
- for x in iterables:
- result.extend(list(x))
- return result
-
-def count(n=0):
- # returns infinite length, should not be supported
- raise NotImplementedError
-
-def cycle(iterable):
- # returns infinite length, should not be supported
- raise NotImplementedError
-
-def dropwhile(predicate, iterable):
- result = []
- for x in iterable:
- if not predicate(x):
- result.append(x)
- break
- result.extend(iterable)
- return result
-
-def groupby(iterable, *args):
- raise NotImplementedError
-
-def ifilter(predicate, iterable):
- result = []
- if predicate is None:
- predicate = bool
- for x in iterable:
- if predicate(x):
- result.append(x)
- return result
-
-def ifilterfalse(predicate, iterable):
- result = []
- if predicate is None:
- predicate = bool
- for x in iterable:
- if not predicate(x):
- result.append(x)
- return result
-
-def imap(function, *iterables):
- return apply(map, (function,) + tuple(iterables))
-
-def islice(*args, **kw):
- raise NotImplementedError
-
-def izip(*iterables):
- return apply(zip, iterables)
-
-def repeat(*args, **kw):
- # returns infinite length, should not be supported
- raise NotImplementedError
-
-def starmap(*args, **kw):
- raise NotImplementedError
-
-def takewhile(predicate, iterable):
- result = []
- for x in iterable:
- if predicate(x):
- result.append(x)
- else:
- break
- return result
-
-def tee(*args, **kw):
- raise NotImplementedError
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_optparse.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_optparse.py
deleted file mode 100644
index 386dfea..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_optparse.py
+++ /dev/null
@@ -1,1725 +0,0 @@
-"""optparse - a powerful, extensible, and easy-to-use option parser.
-
-By Greg Ward <gward@python.net>
-
-Originally distributed as Optik; see http://optik.sourceforge.net/ .
-
-If you have problems with this module, please do not file bugs,
-patches, or feature requests with Python; instead, use Optik's
-SourceForge project page:
- http://sourceforge.net/projects/optik
-
-For support, use the optik-users@lists.sourceforge.net mailing list
-(http://lists.sourceforge.net/lists/listinfo/optik-users).
-"""
-
-# Python developers: please do not make changes to this file, since
-# it is automatically generated from the Optik source code.
-
-__version__ = "1.5.3"
-
-__all__ = ['Option',
- 'SUPPRESS_HELP',
- 'SUPPRESS_USAGE',
- 'Values',
- 'OptionContainer',
- 'OptionGroup',
- 'OptionParser',
- 'HelpFormatter',
- 'IndentedHelpFormatter',
- 'TitledHelpFormatter',
- 'OptParseError',
- 'OptionError',
- 'OptionConflictError',
- 'OptionValueError',
- 'BadOptionError']
-
-__copyright__ = """
-Copyright (c) 2001-2006 Gregory P. Ward. All rights reserved.
-Copyright (c) 2002-2006 Python Software Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the author nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import string
-import sys, os
-import types
-import textwrap
-
-def _repr(self):
- return "<%s at 0x%x: %s>" % (self.__class__.__name__, id(self), self)
-
-
-try:
- sys.getdefaultencoding
-except AttributeError:
- def fake_getdefaultencoding():
- return None
- sys.getdefaultencoding = fake_getdefaultencoding
-
-try:
- ''.encode
-except AttributeError:
- def encode_wrapper(s, encoding, replacement):
- return s
-else:
- def encode_wrapper(s, encoding, replacement):
- return s.encode(encoding, replacement)
-
-
-# This file was generated from:
-# Id: option_parser.py 527 2006-07-23 15:21:30Z greg
-# Id: option.py 522 2006-06-11 16:22:03Z gward
-# Id: help.py 527 2006-07-23 15:21:30Z greg
-# Id: errors.py 509 2006-04-20 00:58:24Z gward
-
-try:
- from gettext import gettext
-except ImportError:
- def gettext(message):
- return message
-_ = gettext
-
-
-class OptParseError (Exception):
- def __init__(self, msg):
- self.msg = msg
-
- def __str__(self):
- return self.msg
-
-
-class OptionError (OptParseError):
- """
- Raised if an Option instance is created with invalid or
- inconsistent arguments.
- """
-
- def __init__(self, msg, option):
- self.msg = msg
- self.option_id = str(option)
-
- def __str__(self):
- if self.option_id:
- return "option %s: %s" % (self.option_id, self.msg)
- else:
- return self.msg
-
-class OptionConflictError (OptionError):
- """
- Raised if conflicting options are added to an OptionParser.
- """
-
-class OptionValueError (OptParseError):
- """
- Raised if an invalid option value is encountered on the command
- line.
- """
-
-class BadOptionError (OptParseError):
- """
- Raised if an invalid option is seen on the command line.
- """
- def __init__(self, opt_str):
- self.opt_str = opt_str
-
- def __str__(self):
- return _("no such option: %s") % self.opt_str
-
-class AmbiguousOptionError (BadOptionError):
- """
- Raised if an ambiguous option is seen on the command line.
- """
- def __init__(self, opt_str, possibilities):
- BadOptionError.__init__(self, opt_str)
- self.possibilities = possibilities
-
- def __str__(self):
- return (_("ambiguous option: %s (%s?)")
- % (self.opt_str, string.join(self.possibilities, ", ")))
-
-
-class HelpFormatter:
-
- """
- Abstract base class for formatting option help. OptionParser
- instances should use one of the HelpFormatter subclasses for
- formatting help; by default IndentedHelpFormatter is used.
-
- Instance attributes:
- parser : OptionParser
- the controlling OptionParser instance
- indent_increment : int
- the number of columns to indent per nesting level
- max_help_position : int
- the maximum starting column for option help text
- help_position : int
- the calculated starting column for option help text;
- initially the same as the maximum
- width : int
- total number of columns for output (pass None to constructor for
- this value to be taken from the $COLUMNS environment variable)
- level : int
- current indentation level
- current_indent : int
- current indentation level (in columns)
- help_width : int
- number of columns available for option help text (calculated)
- default_tag : str
- text to replace with each option's default value, "%default"
- by default. Set to false value to disable default value expansion.
- option_strings : { Option : str }
- maps Option instances to the snippet of help text explaining
- the syntax of that option, e.g. "-h, --help" or
- "-fFILE, --file=FILE"
- _short_opt_fmt : str
- format string controlling how short options with values are
- printed in help text. Must be either "%s%s" ("-fFILE") or
- "%s %s" ("-f FILE"), because those are the two syntaxes that
- Optik supports.
- _long_opt_fmt : str
- similar but for long options; must be either "%s %s" ("--file FILE")
- or "%s=%s" ("--file=FILE").
- """
-
- NO_DEFAULT_VALUE = "none"
-
- def __init__(self,
- indent_increment,
- max_help_position,
- width,
- short_first):
- self.parser = None
- self.indent_increment = indent_increment
- self.help_position = self.max_help_position = max_help_position
- if width is None:
- try:
- width = int(os.environ['COLUMNS'])
- except (KeyError, ValueError):
- width = 80
- width = width - 2
- self.width = width
- self.current_indent = 0
- self.level = 0
- self.help_width = None # computed later
- self.short_first = short_first
- self.default_tag = "%default"
- self.option_strings = {}
- self._short_opt_fmt = "%s %s"
- self._long_opt_fmt = "%s=%s"
-
- def set_parser(self, parser):
- self.parser = parser
-
- def set_short_opt_delimiter(self, delim):
- if delim not in ("", " "):
- raise ValueError(
- "invalid metavar delimiter for short options: %r" % delim)
- self._short_opt_fmt = "%s" + delim + "%s"
-
- def set_long_opt_delimiter(self, delim):
- if delim not in ("=", " "):
- raise ValueError(
- "invalid metavar delimiter for long options: %r" % delim)
- self._long_opt_fmt = "%s" + delim + "%s"
-
- def indent(self):
- self.current_indent = self.current_indent + self.indent_increment
- self.level = self.level + 1
-
- def dedent(self):
- self.current_indent = self.current_indent - self.indent_increment
- assert self.current_indent >= 0, "Indent decreased below 0."
- self.level = self.level - 1
-
- def format_usage(self, usage):
- raise NotImplementedError, "subclasses must implement"
-
- def format_heading(self, heading):
- raise NotImplementedError, "subclasses must implement"
-
- def _format_text(self, text):
- """
- Format a paragraph of free-form text for inclusion in the
- help output at the current indentation level.
- """
- text_width = self.width - self.current_indent
- indent = " "*self.current_indent
- return textwrap.fill(text,
- text_width,
- initial_indent=indent,
- subsequent_indent=indent)
-
- def format_description(self, description):
- if description:
- return self._format_text(description) + "\n"
- else:
- return ""
-
- def format_epilog(self, epilog):
- if epilog:
- return "\n" + self._format_text(epilog) + "\n"
- else:
- return ""
-
-
- def expand_default(self, option):
- if self.parser is None or not self.default_tag:
- return option.help
-
- default_value = self.parser.defaults.get(option.dest)
- if default_value is NO_DEFAULT or default_value is None:
- default_value = self.NO_DEFAULT_VALUE
-
- return string.replace(option.help, self.default_tag, str(default_value))
-
- def format_option(self, option):
- # The help for each option consists of two parts:
- # * the opt strings and metavars
- # eg. ("-x", or "-fFILENAME, --file=FILENAME")
- # * the user-supplied help string
- # eg. ("turn on expert mode", "read data from FILENAME")
- #
- # If possible, we write both of these on the same line:
- # -x turn on expert mode
- #
- # But if the opt string list is too long, we put the help
- # string on a second line, indented to the same column it would
- # start in if it fit on the first line.
- # -fFILENAME, --file=FILENAME
- # read data from FILENAME
- result = []
- opts = self.option_strings[option]
- opt_width = self.help_position - self.current_indent - 2
- if len(opts) > opt_width:
- opts = "%*s%s\n" % (self.current_indent, "", opts)
- indent_first = self.help_position
- else: # start help on same line as opts
- opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts)
- indent_first = 0
- result.append(opts)
- if option.help:
- help_text = self.expand_default(option)
- help_lines = textwrap.wrap(help_text, self.help_width)
- result.append("%*s%s\n" % (indent_first, "", help_lines[0]))
- for line in help_lines[1:]:
- result.append("%*s%s\n" % (self.help_position, "", line))
- elif opts[-1] != "\n":
- result.append("\n")
- return string.join(result, "")
-
- def store_option_strings(self, parser):
- self.indent()
- max_len = 0
- for opt in parser.option_list:
- strings = self.format_option_strings(opt)
- self.option_strings[opt] = strings
- max_len = max(max_len, len(strings) + self.current_indent)
- self.indent()
- for group in parser.option_groups:
- for opt in group.option_list:
- strings = self.format_option_strings(opt)
- self.option_strings[opt] = strings
- max_len = max(max_len, len(strings) + self.current_indent)
- self.dedent()
- self.dedent()
- self.help_position = min(max_len + 2, self.max_help_position)
- self.help_width = self.width - self.help_position
-
- def format_option_strings(self, option):
- """Return a comma-separated list of option strings & metavariables."""
- if option.takes_value():
- metavar = option.metavar or string.upper(option.dest)
- short_opts = []
- for sopt in option._short_opts:
- short_opts.append(self._short_opt_fmt % (sopt, metavar))
- long_opts = []
- for lopt in option._long_opts:
- long_opts.append(self._long_opt_fmt % (lopt, metavar))
- else:
- short_opts = option._short_opts
- long_opts = option._long_opts
-
- if self.short_first:
- opts = short_opts + long_opts
- else:
- opts = long_opts + short_opts
-
- return string.join(opts, ", ")
-
-class IndentedHelpFormatter (HelpFormatter):
- """Format help with indented section bodies.
- """
-
- def __init__(self,
- indent_increment=2,
- max_help_position=24,
- width=None,
- short_first=1):
- HelpFormatter.__init__(
- self, indent_increment, max_help_position, width, short_first)
-
- def format_usage(self, usage):
- return _("Usage: %s\n") % usage
-
- def format_heading(self, heading):
- return "%*s%s:\n" % (self.current_indent, "", heading)
-
-
-class TitledHelpFormatter (HelpFormatter):
- """Format help with underlined section headers.
- """
-
- def __init__(self,
- indent_increment=0,
- max_help_position=24,
- width=None,
- short_first=0):
- HelpFormatter.__init__ (
- self, indent_increment, max_help_position, width, short_first)
-
- def format_usage(self, usage):
- return "%s %s\n" % (self.format_heading(_("Usage")), usage)
-
- def format_heading(self, heading):
- return "%s\n%s\n" % (heading, "=-"[self.level] * len(heading))
-
-
-def _parse_num(val, type):
- if string.lower(val[:2]) == "0x": # hexadecimal
- radix = 16
- elif string.lower(val[:2]) == "0b": # binary
- radix = 2
- val = val[2:] or "0" # have to remove "0b" prefix
- elif val[:1] == "0": # octal
- radix = 8
- else: # decimal
- radix = 10
-
- return type(val, radix)
-
-def _parse_int(val):
- return _parse_num(val, int)
-
-def _parse_long(val):
- return _parse_num(val, long)
-
-try:
- int('0', 10)
-except TypeError:
- # Python 1.5.2 doesn't allow a radix value to be passed to int().
- _parse_int = int
-
-try:
- long('0', 10)
-except TypeError:
- # Python 1.5.2 doesn't allow a radix value to be passed to long().
- _parse_long = long
-
-_builtin_cvt = { "int" : (_parse_int, _("integer")),
- "long" : (_parse_long, _("long integer")),
- "float" : (float, _("floating-point")),
- "complex" : (complex, _("complex")) }
-
-def check_builtin(option, opt, value):
- (cvt, what) = _builtin_cvt[option.type]
- try:
- return cvt(value)
- except ValueError:
- raise OptionValueError(
- _("option %s: invalid %s value: %r") % (opt, what, value))
-
-def check_choice(option, opt, value):
- if value in option.choices:
- return value
- else:
- choices = string.join(map(repr, option.choices), ", ")
- raise OptionValueError(
- _("option %s: invalid choice: %r (choose from %s)")
- % (opt, value, choices))
-
-# Not supplying a default is different from a default of None,
-# so we need an explicit "not supplied" value.
-NO_DEFAULT = ("NO", "DEFAULT")
-
-
-class Option:
- """
- Instance attributes:
- _short_opts : [string]
- _long_opts : [string]
-
- action : string
- type : string
- dest : string
- default : any
- nargs : int
- const : any
- choices : [string]
- callback : function
- callback_args : (any*)
- callback_kwargs : { string : any }
- help : string
- metavar : string
- """
-
- # The list of instance attributes that may be set through
- # keyword args to the constructor.
- ATTRS = ['action',
- 'type',
- 'dest',
- 'default',
- 'nargs',
- 'const',
- 'choices',
- 'callback',
- 'callback_args',
- 'callback_kwargs',
- 'help',
- 'metavar']
-
- # The set of actions allowed by option parsers. Explicitly listed
- # here so the constructor can validate its arguments.
- ACTIONS = ("store",
- "store_const",
- "store_true",
- "store_false",
- "append",
- "append_const",
- "count",
- "callback",
- "help",
- "version")
-
- # The set of actions that involve storing a value somewhere;
- # also listed just for constructor argument validation. (If
- # the action is one of these, there must be a destination.)
- STORE_ACTIONS = ("store",
- "store_const",
- "store_true",
- "store_false",
- "append",
- "append_const",
- "count")
-
- # The set of actions for which it makes sense to supply a value
- # type, ie. which may consume an argument from the command line.
- TYPED_ACTIONS = ("store",
- "append",
- "callback")
-
- # The set of actions which *require* a value type, ie. that
- # always consume an argument from the command line.
- ALWAYS_TYPED_ACTIONS = ("store",
- "append")
-
- # The set of actions which take a 'const' attribute.
- CONST_ACTIONS = ("store_const",
- "append_const")
-
- # The set of known types for option parsers. Again, listed here for
- # constructor argument validation.
- TYPES = ("string", "int", "long", "float", "complex", "choice")
-
- # Dictionary of argument checking functions, which convert and
- # validate option arguments according to the option type.
- #
- # Signature of checking functions is:
- # check(option : Option, opt : string, value : string) -> any
- # where
- # option is the Option instance calling the checker
- # opt is the actual option seen on the command-line
- # (eg. "-a", "--file")
- # value is the option argument seen on the command-line
- #
- # The return value should be in the appropriate Python type
- # for option.type -- eg. an integer if option.type == "int".
- #
- # If no checker is defined for a type, arguments will be
- # unchecked and remain strings.
- TYPE_CHECKER = { "int" : check_builtin,
- "long" : check_builtin,
- "float" : check_builtin,
- "complex": check_builtin,
- "choice" : check_choice,
- }
-
-
- # CHECK_METHODS is a list of unbound method objects; they are called
- # by the constructor, in order, after all attributes are
- # initialized. The list is created and filled in later, after all
- # the methods are actually defined. (I just put it here because I
- # like to define and document all class attributes in the same
- # place.) Subclasses that add another _check_*() method should
- # define their own CHECK_METHODS list that adds their check method
- # to those from this class.
- CHECK_METHODS = None
-
-
- # -- Constructor/initialization methods ----------------------------
-
- def __init__(self, *opts, **attrs):
- # Set _short_opts, _long_opts attrs from 'opts' tuple.
- # Have to be set now, in case no option strings are supplied.
- self._short_opts = []
- self._long_opts = []
- opts = self._check_opt_strings(opts)
- self._set_opt_strings(opts)
-
- # Set all other attrs (action, type, etc.) from 'attrs' dict
- self._set_attrs(attrs)
-
- # Check all the attributes we just set. There are lots of
- # complicated interdependencies, but luckily they can be farmed
- # out to the _check_*() methods listed in CHECK_METHODS -- which
- # could be handy for subclasses! The one thing these all share
- # is that they raise OptionError if they discover a problem.
- for checker in self.CHECK_METHODS:
- checker(self)
-
- def _check_opt_strings(self, opts):
- # Filter out None because early versions of Optik had exactly
- # one short option and one long option, either of which
- # could be None.
- opts = filter(None, opts)
- if not opts:
- raise TypeError("at least one option string must be supplied")
- return opts
-
- def _set_opt_strings(self, opts):
- for opt in opts:
- if len(opt) < 2:
- raise OptionError(
- "invalid option string %r: "
- "must be at least two characters long" % opt, self)
- elif len(opt) == 2:
- if not (opt[0] == "-" and opt[1] != "-"):
- raise OptionError(
- "invalid short option string %r: "
- "must be of the form -x, (x any non-dash char)" % opt,
- self)
- self._short_opts.append(opt)
- else:
- if not (opt[0:2] == "--" and opt[2] != "-"):
- raise OptionError(
- "invalid long option string %r: "
- "must start with --, followed by non-dash" % opt,
- self)
- self._long_opts.append(opt)
-
- def _set_attrs(self, attrs):
- for attr in self.ATTRS:
- if attrs.has_key(attr):
- setattr(self, attr, attrs[attr])
- del attrs[attr]
- else:
- if attr == 'default':
- setattr(self, attr, NO_DEFAULT)
- else:
- setattr(self, attr, None)
- if attrs:
- attrs = attrs.keys()
- attrs.sort()
- raise OptionError(
- "invalid keyword arguments: %s" % string.join(attrs, ", "),
- self)
-
-
- # -- Constructor validation methods --------------------------------
-
- def _check_action(self):
- if self.action is None:
- self.action = "store"
- elif self.action not in self.ACTIONS:
- raise OptionError("invalid action: %r" % self.action, self)
-
- def _check_type(self):
- if self.type is None:
- if self.action in self.ALWAYS_TYPED_ACTIONS:
- if self.choices is not None:
- # The "choices" attribute implies "choice" type.
- self.type = "choice"
- else:
- # No type given? "string" is the most sensible default.
- self.type = "string"
- else:
- # Allow type objects or builtin type conversion functions
- # (int, str, etc.) as an alternative to their names. (The
- # complicated check of __builtin__ is only necessary for
- # Python 2.1 and earlier, and is short-circuited by the
- # first check on modern Pythons.)
- import __builtin__
- if ( type(self.type) is types.TypeType or
- (hasattr(self.type, "__name__") and
- getattr(__builtin__, self.type.__name__, None) is self.type) ):
- self.type = self.type.__name__
-
- if self.type == "str":
- self.type = "string"
-
- if self.type not in self.TYPES:
- raise OptionError("invalid option type: %r" % self.type, self)
- if self.action not in self.TYPED_ACTIONS:
- raise OptionError(
- "must not supply a type for action %r" % self.action, self)
-
- def _check_choice(self):
- if self.type == "choice":
- if self.choices is None:
- raise OptionError(
- "must supply a list of choices for type 'choice'", self)
- elif type(self.choices) not in (types.TupleType, types.ListType):
- raise OptionError(
- "choices must be a list of strings ('%s' supplied)"
- % string.split(str(type(self.choices)), "'")[1], self)
- elif self.choices is not None:
- raise OptionError(
- "must not supply choices for type %r" % self.type, self)
-
- def _check_dest(self):
- # No destination given, and we need one for this action. The
- # self.type check is for callbacks that take a value.
- takes_value = (self.action in self.STORE_ACTIONS or
- self.type is not None)
- if self.dest is None and takes_value:
-
- # Glean a destination from the first long option string,
- # or from the first short option string if no long options.
- if self._long_opts:
- # eg. "--foo-bar" -> "foo_bar"
- self.dest = string.replace(self._long_opts[0][2:], '-', '_')
- else:
- self.dest = self._short_opts[0][1]
-
- def _check_const(self):
- if self.action not in self.CONST_ACTIONS and self.const is not None:
- raise OptionError(
- "'const' must not be supplied for action %r" % self.action,
- self)
-
- def _check_nargs(self):
- if self.action in self.TYPED_ACTIONS:
- if self.nargs is None:
- self.nargs = 1
- elif self.nargs is not None:
- raise OptionError(
- "'nargs' must not be supplied for action %r" % self.action,
- self)
-
- def _check_callback(self):
- if self.action == "callback":
- if not callable(self.callback):
- raise OptionError(
- "callback not callable: %r" % self.callback, self)
- if (self.callback_args is not None and
- type(self.callback_args) is not types.TupleType):
- raise OptionError(
- "callback_args, if supplied, must be a tuple: not %r"
- % self.callback_args, self)
- if (self.callback_kwargs is not None and
- type(self.callback_kwargs) is not types.DictType):
- raise OptionError(
- "callback_kwargs, if supplied, must be a dict: not %r"
- % self.callback_kwargs, self)
- else:
- if self.callback is not None:
- raise OptionError(
- "callback supplied (%r) for non-callback option"
- % self.callback, self)
- if self.callback_args is not None:
- raise OptionError(
- "callback_args supplied for non-callback option", self)
- if self.callback_kwargs is not None:
- raise OptionError(
- "callback_kwargs supplied for non-callback option", self)
-
-
- CHECK_METHODS = [_check_action,
- _check_type,
- _check_choice,
- _check_dest,
- _check_const,
- _check_nargs,
- _check_callback]
-
-
- # -- Miscellaneous methods -----------------------------------------
-
- def __str__(self):
- return string.join(self._short_opts + self._long_opts, "/")
-
- __repr__ = _repr
-
- def takes_value(self):
- return self.type is not None
-
- def get_opt_string(self):
- if self._long_opts:
- return self._long_opts[0]
- else:
- return self._short_opts[0]
-
-
- # -- Processing methods --------------------------------------------
-
- def check_value(self, opt, value):
- checker = self.TYPE_CHECKER.get(self.type)
- if checker is None:
- return value
- else:
- return checker(self, opt, value)
-
- def convert_value(self, opt, value):
- if value is not None:
- if self.nargs == 1:
- return self.check_value(opt, value)
- else:
- return tuple(map(lambda v, o=opt, s=self: s.check_value(o, v), value))
-
- def process(self, opt, value, values, parser):
-
- # First, convert the value(s) to the right type. Howl if any
- # value(s) are bogus.
- value = self.convert_value(opt, value)
-
- # And then take whatever action is expected of us.
- # This is a separate method to make life easier for
- # subclasses to add new actions.
- return self.take_action(
- self.action, self.dest, opt, value, values, parser)
-
- def take_action(self, action, dest, opt, value, values, parser):
- if action == "store":
- setattr(values, dest, value)
- elif action == "store_const":
- setattr(values, dest, self.const)
- elif action == "store_true":
- setattr(values, dest, True)
- elif action == "store_false":
- setattr(values, dest, False)
- elif action == "append":
- values.ensure_value(dest, []).append(value)
- elif action == "append_const":
- values.ensure_value(dest, []).append(self.const)
- elif action == "count":
- setattr(values, dest, values.ensure_value(dest, 0) + 1)
- elif action == "callback":
- args = self.callback_args or ()
- kwargs = self.callback_kwargs or {}
- apply(self.callback, (self, opt, value, parser,) + args, kwargs)
- elif action == "help":
- parser.print_help()
- parser.exit()
- elif action == "version":
- parser.print_version()
- parser.exit()
- else:
- raise RuntimeError, "unknown action %r" % self.action
-
- return 1
-
-# class Option
-
-
-SUPPRESS_HELP = "SUPPRESS"+"HELP"
-SUPPRESS_USAGE = "SUPPRESS"+"USAGE"
-
-# For compatibility with Python 2.2
-try:
- True, False
-except NameError:
- (True, False) = (1, 0)
-
-try:
- types.UnicodeType
-except AttributeError:
- def isbasestring(x):
- return isinstance(x, types.StringType)
-else:
- def isbasestring(x):
- return isinstance(x, types.StringType) or isinstance(x, types.UnicodeType)
-
-class Values:
-
- def __init__(self, defaults=None):
- if defaults:
- for (attr, val) in defaults.items():
- setattr(self, attr, val)
-
- def __str__(self):
- return str(self.__dict__)
-
- __repr__ = _repr
-
- def __cmp__(self, other):
- if isinstance(other, Values):
- return cmp(self.__dict__, other.__dict__)
- elif isinstance(other, types.DictType):
- return cmp(self.__dict__, other)
- else:
- return -1
-
- def _update_careful(self, dict):
- """
- Update the option values from an arbitrary dictionary, but only
- use keys from dict that already have a corresponding attribute
- in self. Any keys in dict without a corresponding attribute
- are silently ignored.
- """
- for attr in dir(self):
- if dict.has_key(attr):
- dval = dict[attr]
- if dval is not None:
- setattr(self, attr, dval)
-
- def _update_loose(self, dict):
- """
- Update the option values from an arbitrary dictionary,
- using all keys from the dictionary regardless of whether
- they have a corresponding attribute in self or not.
- """
- self.__dict__.update(dict)
-
- def _update(self, dict, mode):
- if mode == "careful":
- self._update_careful(dict)
- elif mode == "loose":
- self._update_loose(dict)
- else:
- raise ValueError, "invalid update mode: %r" % mode
-
- def read_module(self, modname, mode="careful"):
- __import__(modname)
- mod = sys.modules[modname]
- self._update(vars(mod), mode)
-
- def read_file(self, filename, mode="careful"):
- vars = {}
- execfile(filename, vars)
- self._update(vars, mode)
-
- def ensure_value(self, attr, value):
- if not hasattr(self, attr) or getattr(self, attr) is None:
- setattr(self, attr, value)
- return getattr(self, attr)
-
-
-class OptionContainer:
-
- """
- Abstract base class.
-
- Class attributes:
- standard_option_list : [Option]
- list of standard options that will be accepted by all instances
- of this parser class (intended to be overridden by subclasses).
-
- Instance attributes:
- option_list : [Option]
- the list of Option objects contained by this OptionContainer
- _short_opt : { string : Option }
- dictionary mapping short option strings, eg. "-f" or "-X",
- to the Option instances that implement them. If an Option
- has multiple short option strings, it will appears in this
- dictionary multiple times. [1]
- _long_opt : { string : Option }
- dictionary mapping long option strings, eg. "--file" or
- "--exclude", to the Option instances that implement them.
- Again, a given Option can occur multiple times in this
- dictionary. [1]
- defaults : { string : any }
- dictionary mapping option destination names to default
- values for each destination [1]
-
- [1] These mappings are common to (shared by) all components of the
- controlling OptionParser, where they are initially created.
-
- """
-
- def __init__(self, option_class, conflict_handler, description):
- # Initialize the option list and related data structures.
- # This method must be provided by subclasses, and it must
- # initialize at least the following instance attributes:
- # option_list, _short_opt, _long_opt, defaults.
- self._create_option_list()
-
- self.option_class = option_class
- self.set_conflict_handler(conflict_handler)
- self.set_description(description)
-
- def _create_option_mappings(self):
- # For use by OptionParser constructor -- create the master
- # option mappings used by this OptionParser and all
- # OptionGroups that it owns.
- self._short_opt = {} # single letter -> Option instance
- self._long_opt = {} # long option -> Option instance
- self.defaults = {} # maps option dest -> default value
-
-
- def _share_option_mappings(self, parser):
- # For use by OptionGroup constructor -- use shared option
- # mappings from the OptionParser that owns this OptionGroup.
- self._short_opt = parser._short_opt
- self._long_opt = parser._long_opt
- self.defaults = parser.defaults
-
- def set_conflict_handler(self, handler):
- if handler not in ("error", "resolve"):
- raise ValueError, "invalid conflict_resolution value %r" % handler
- self.conflict_handler = handler
-
- def set_description(self, description):
- self.description = description
-
- def get_description(self):
- return self.description
-
-
- def destroy(self):
- """see OptionParser.destroy()."""
- del self._short_opt
- del self._long_opt
- del self.defaults
-
-
- # -- Option-adding methods -----------------------------------------
-
- def _check_conflict(self, option):
- conflict_opts = []
- for opt in option._short_opts:
- if self._short_opt.has_key(opt):
- conflict_opts.append((opt, self._short_opt[opt]))
- for opt in option._long_opts:
- if self._long_opt.has_key(opt):
- conflict_opts.append((opt, self._long_opt[opt]))
-
- if conflict_opts:
- handler = self.conflict_handler
- if handler == "error":
- raise OptionConflictError(
- "conflicting option string(s): %s"
- % string.join(map(lambda co: co[0], conflict_opts), ", "),
- option)
- elif handler == "resolve":
- for (opt, c_option) in conflict_opts:
- if opt[:2] == "--":
- c_option._long_opts.remove(opt)
- del self._long_opt[opt]
- else:
- c_option._short_opts.remove(opt)
- del self._short_opt[opt]
- if not (c_option._short_opts or c_option._long_opts):
- c_option.container.option_list.remove(c_option)
-
- def add_option(self, *args, **kwargs):
- """add_option(Option)
- add_option(opt_str, ..., kwarg=val, ...)
- """
- if type(args[0]) is types.StringType:
- option = apply(self.option_class, args, kwargs)
- elif len(args) == 1 and not kwargs:
- option = args[0]
- if not isinstance(option, Option):
- raise TypeError, "not an Option instance: %r" % option
- else:
- raise TypeError, "invalid arguments"
-
- self._check_conflict(option)
-
- self.option_list.append(option)
- option.container = self
- for opt in option._short_opts:
- self._short_opt[opt] = option
- for opt in option._long_opts:
- self._long_opt[opt] = option
-
- if option.dest is not None: # option has a dest, we need a default
- if option.default is not NO_DEFAULT:
- self.defaults[option.dest] = option.default
- elif not self.defaults.has_key(option.dest):
- self.defaults[option.dest] = None
-
- return option
-
- def add_options(self, option_list):
- for option in option_list:
- self.add_option(option)
-
- # -- Option query/removal methods ----------------------------------
-
- def get_option(self, opt_str):
- return (self._short_opt.get(opt_str) or
- self._long_opt.get(opt_str))
-
- def has_option(self, opt_str):
- return (self._short_opt.has_key(opt_str) or
- self._long_opt.has_key(opt_str))
-
- def remove_option(self, opt_str):
- option = self._short_opt.get(opt_str)
- if option is None:
- option = self._long_opt.get(opt_str)
- if option is None:
- raise ValueError("no such option %r" % opt_str)
-
- for opt in option._short_opts:
- del self._short_opt[opt]
- for opt in option._long_opts:
- del self._long_opt[opt]
- option.container.option_list.remove(option)
-
-
- # -- Help-formatting methods ---------------------------------------
-
- def format_option_help(self, formatter):
- if not self.option_list:
- return ""
- result = []
- for option in self.option_list:
- if not option.help is SUPPRESS_HELP:
- result.append(formatter.format_option(option))
- return string.join(result, "")
-
- def format_description(self, formatter):
- return formatter.format_description(self.get_description())
-
- def format_help(self, formatter):
- result = []
- if self.description:
- result.append(self.format_description(formatter))
- if self.option_list:
- result.append(self.format_option_help(formatter))
- return string.join(result, "\n")
-
-
-class OptionGroup (OptionContainer):
-
- def __init__(self, parser, title, description=None):
- self.parser = parser
- OptionContainer.__init__(
- self, parser.option_class, parser.conflict_handler, description)
- self.title = title
-
- def _create_option_list(self):
- self.option_list = []
- self._share_option_mappings(self.parser)
-
- def set_title(self, title):
- self.title = title
-
- def destroy(self):
- """see OptionParser.destroy()."""
- OptionContainer.destroy(self)
- del self.option_list
-
- # -- Help-formatting methods ---------------------------------------
-
- def format_help(self, formatter):
- result = formatter.format_heading(self.title)
- formatter.indent()
- result = result + OptionContainer.format_help(self, formatter)
- formatter.dedent()
- return result
-
-
-class OptionParser (OptionContainer):
-
- """
- Class attributes:
- standard_option_list : [Option]
- list of standard options that will be accepted by all instances
- of this parser class (intended to be overridden by subclasses).
-
- Instance attributes:
- usage : string
- a usage string for your program. Before it is displayed
- to the user, "%prog" will be expanded to the name of
- your program (self.prog or os.path.basename(sys.argv[0])).
- prog : string
- the name of the current program (to override
- os.path.basename(sys.argv[0])).
- epilog : string
- paragraph of help text to print after option help
-
- option_groups : [OptionGroup]
- list of option groups in this parser (option groups are
- irrelevant for parsing the command-line, but very useful
- for generating help)
-
- allow_interspersed_args : bool = true
- if true, positional arguments may be interspersed with options.
- Assuming -a and -b each take a single argument, the command-line
- -ablah foo bar -bboo baz
- will be interpreted the same as
- -ablah -bboo -- foo bar baz
- If this flag were false, that command line would be interpreted as
- -ablah -- foo bar -bboo baz
- -- ie. we stop processing options as soon as we see the first
- non-option argument. (This is the tradition followed by
- Python's getopt module, Perl's Getopt::Std, and other argument-
- parsing libraries, but it is generally annoying to users.)
-
- process_default_values : bool = true
- if true, option default values are processed similarly to option
- values from the command line: that is, they are passed to the
- type-checking function for the option's type (as long as the
- default value is a string). (This really only matters if you
- have defined custom types; see SF bug #955889.) Set it to false
- to restore the behaviour of Optik 1.4.1 and earlier.
-
- rargs : [string]
- the argument list currently being parsed. Only set when
- parse_args() is active, and continually trimmed down as
- we consume arguments. Mainly there for the benefit of
- callback options.
- largs : [string]
- the list of leftover arguments that we have skipped while
- parsing options. If allow_interspersed_args is false, this
- list is always empty.
- values : Values
- the set of option values currently being accumulated. Only
- set when parse_args() is active. Also mainly for callbacks.
-
- Because of the 'rargs', 'largs', and 'values' attributes,
- OptionParser is not thread-safe. If, for some perverse reason, you
- need to parse command-line arguments simultaneously in different
- threads, use different OptionParser instances.
-
- """
-
- standard_option_list = []
-
- def __init__(self,
- usage=None,
- option_list=None,
- option_class=Option,
- version=None,
- conflict_handler="error",
- description=None,
- formatter=None,
- add_help_option=True,
- prog=None,
- epilog=None):
- OptionContainer.__init__(
- self, option_class, conflict_handler, description)
- self.set_usage(usage)
- self.prog = prog
- self.version = version
- self.allow_interspersed_args = True
- self.process_default_values = True
- if formatter is None:
- formatter = IndentedHelpFormatter()
- self.formatter = formatter
- self.formatter.set_parser(self)
- self.epilog = epilog
-
- # Populate the option list; initial sources are the
- # standard_option_list class attribute, the 'option_list'
- # argument, and (if applicable) the _add_version_option() and
- # _add_help_option() methods.
- self._populate_option_list(option_list,
- add_help=add_help_option)
-
- self._init_parsing_state()
-
-
- def destroy(self):
- """
- Declare that you are done with this OptionParser. This cleans up
- reference cycles so the OptionParser (and all objects referenced by
- it) can be garbage-collected promptly. After calling destroy(), the
- OptionParser is unusable.
- """
- OptionContainer.destroy(self)
- for group in self.option_groups:
- group.destroy()
- del self.option_list
- del self.option_groups
- del self.formatter
-
-
- # -- Private methods -----------------------------------------------
- # (used by our or OptionContainer's constructor)
-
- def _create_option_list(self):
- self.option_list = []
- self.option_groups = []
- self._create_option_mappings()
-
- def _add_help_option(self):
- self.add_option("-h", "--help",
- action="help",
- help=_("show this help message and exit"))
-
- def _add_version_option(self):
- self.add_option("--version",
- action="version",
- help=_("show program's version number and exit"))
-
- def _populate_option_list(self, option_list, add_help=True):
- if self.standard_option_list:
- self.add_options(self.standard_option_list)
- if option_list:
- self.add_options(option_list)
- if self.version:
- self._add_version_option()
- if add_help:
- self._add_help_option()
-
- def _init_parsing_state(self):
- # These are set in parse_args() for the convenience of callbacks.
- self.rargs = None
- self.largs = None
- self.values = None
-
-
- # -- Simple modifier methods ---------------------------------------
-
- def set_usage(self, usage):
- if usage is None:
- self.usage = _("%prog [options]")
- elif usage is SUPPRESS_USAGE:
- self.usage = None
- # For backwards compatibility with Optik 1.3 and earlier.
- elif string.lower(usage)[:7] == "usage: ":
- self.usage = usage[7:]
- else:
- self.usage = usage
-
- def enable_interspersed_args(self):
- self.allow_interspersed_args = True
-
- def disable_interspersed_args(self):
- self.allow_interspersed_args = False
-
- def set_process_default_values(self, process):
- self.process_default_values = process
-
- def set_default(self, dest, value):
- self.defaults[dest] = value
-
- def set_defaults(self, **kwargs):
- self.defaults.update(kwargs)
-
- def _get_all_options(self):
- options = self.option_list[:]
- for group in self.option_groups:
- options.extend(group.option_list)
- return options
-
- def get_default_values(self):
- if not self.process_default_values:
- # Old, pre-Optik 1.5 behaviour.
- return Values(self.defaults)
-
- defaults = self.defaults.copy()
- for option in self._get_all_options():
- default = defaults.get(option.dest)
- if isbasestring(default):
- opt_str = option.get_opt_string()
- defaults[option.dest] = option.check_value(opt_str, default)
-
- return Values(defaults)
-
-
- # -- OptionGroup methods -------------------------------------------
-
- def add_option_group(self, *args, **kwargs):
- # XXX lots of overlap with OptionContainer.add_option()
- if type(args[0]) is types.StringType:
- group = apply(OptionGroup, (self,) + args, kwargs)
- elif len(args) == 1 and not kwargs:
- group = args[0]
- if not isinstance(group, OptionGroup):
- raise TypeError, "not an OptionGroup instance: %r" % group
- if group.parser is not self:
- raise ValueError, "invalid OptionGroup (wrong parser)"
- else:
- raise TypeError, "invalid arguments"
-
- self.option_groups.append(group)
- return group
-
- def get_option_group(self, opt_str):
- option = (self._short_opt.get(opt_str) or
- self._long_opt.get(opt_str))
- if option and option.container is not self:
- return option.container
- return None
-
-
- # -- Option-parsing methods ----------------------------------------
-
- def _get_args(self, args):
- if args is None:
- return sys.argv[1:]
- else:
- return args[:] # don't modify caller's list
-
- def parse_args(self, args=None, values=None):
- """
- parse_args(args : [string] = sys.argv[1:],
- values : Values = None)
- -> (values : Values, args : [string])
-
- Parse the command-line options found in 'args' (default:
- sys.argv[1:]). Any errors result in a call to 'error()', which
- by default prints the usage message to stderr and calls
- sys.exit() with an error message. On success returns a pair
- (values, args) where 'values' is an Values instance (with all
- your option values) and 'args' is the list of arguments left
- over after parsing options.
- """
- rargs = self._get_args(args)
- if values is None:
- values = self.get_default_values()
-
- # Store the halves of the argument list as attributes for the
- # convenience of callbacks:
- # rargs
- # the rest of the command-line (the "r" stands for
- # "remaining" or "right-hand")
- # largs
- # the leftover arguments -- ie. what's left after removing
- # options and their arguments (the "l" stands for "leftover"
- # or "left-hand")
- self.rargs = rargs
- self.largs = largs = []
- self.values = values
-
- try:
- stop = self._process_args(largs, rargs, values)
- except (BadOptionError, OptionValueError), err:
- self.error(str(err))
-
- args = largs + rargs
- return self.check_values(values, args)
-
- def check_values(self, values, args):
- """
- check_values(values : Values, args : [string])
- -> (values : Values, args : [string])
-
- Check that the supplied option values and leftover arguments are
- valid. Returns the option values and leftover arguments
- (possibly adjusted, possibly completely new -- whatever you
- like). Default implementation just returns the passed-in
- values; subclasses may override as desired.
- """
- return (values, args)
-
- def _process_args(self, largs, rargs, values):
- """_process_args(largs : [string],
- rargs : [string],
- values : Values)
-
- Process command-line arguments and populate 'values', consuming
- options and arguments from 'rargs'. If 'allow_interspersed_args' is
- false, stop at the first non-option argument. If true, accumulate any
- interspersed non-option arguments in 'largs'.
- """
- while rargs:
- arg = rargs[0]
- # We handle bare "--" explicitly, and bare "-" is handled by the
- # standard arg handler since the short arg case ensures that the
- # len of the opt string is greater than 1.
- if arg == "--":
- del rargs[0]
- return
- elif arg[0:2] == "--":
- # process a single long option (possibly with value(s))
- self._process_long_opt(rargs, values)
- elif arg[:1] == "-" and len(arg) > 1:
- # process a cluster of short options (possibly with
- # value(s) for the last one only)
- self._process_short_opts(rargs, values)
- elif self.allow_interspersed_args:
- largs.append(arg)
- del rargs[0]
- else:
- return # stop now, leave this arg in rargs
-
- # Say this is the original argument list:
- # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)]
- # ^
- # (we are about to process arg(i)).
- #
- # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of
- # [arg0, ..., arg(i-1)] (any options and their arguments will have
- # been removed from largs).
- #
- # The while loop will usually consume 1 or more arguments per pass.
- # If it consumes 1 (eg. arg is an option that takes no arguments),
- # then after _process_arg() is done the situation is:
- #
- # largs = subset of [arg0, ..., arg(i)]
- # rargs = [arg(i+1), ..., arg(N-1)]
- #
- # If allow_interspersed_args is false, largs will always be
- # *empty* -- still a subset of [arg0, ..., arg(i-1)], but
- # not a very interesting subset!
-
- def _match_long_opt(self, opt):
- """_match_long_opt(opt : string) -> string
-
- Determine which long option string 'opt' matches, ie. which one
- it is an unambiguous abbrevation for. Raises BadOptionError if
- 'opt' doesn't unambiguously match any long option string.
- """
- return _match_abbrev(opt, self._long_opt)
-
- def _process_long_opt(self, rargs, values):
- arg = rargs.pop(0)
-
- # Value explicitly attached to arg? Pretend it's the next
- # argument.
- if "=" in arg:
- (opt, next_arg) = string.split(arg, "=", 1)
- rargs.insert(0, next_arg)
- had_explicit_value = True
- else:
- opt = arg
- had_explicit_value = False
-
- opt = self._match_long_opt(opt)
- option = self._long_opt[opt]
- if option.takes_value():
- nargs = option.nargs
- if len(rargs) < nargs:
- if nargs == 1:
- self.error(_("%s option requires an argument") % opt)
- else:
- self.error(_("%s option requires %d arguments")
- % (opt, nargs))
- elif nargs == 1:
- value = rargs.pop(0)
- else:
- value = tuple(rargs[0:nargs])
- del rargs[0:nargs]
-
- elif had_explicit_value:
- self.error(_("%s option does not take a value") % opt)
-
- else:
- value = None
-
- option.process(opt, value, values, self)
-
- def _process_short_opts(self, rargs, values):
- arg = rargs.pop(0)
- stop = False
- i = 1
- for ch in arg[1:]:
- opt = "-" + ch
- option = self._short_opt.get(opt)
- i = i + 1 # we have consumed a character
-
- if not option:
- raise BadOptionError(opt)
- if option.takes_value():
- # Any characters left in arg? Pretend they're the
- # next arg, and stop consuming characters of arg.
- if i < len(arg):
- rargs.insert(0, arg[i:])
- stop = True
-
- nargs = option.nargs
- if len(rargs) < nargs:
- if nargs == 1:
- self.error(_("%s option requires an argument") % opt)
- else:
- self.error(_("%s option requires %d arguments")
- % (opt, nargs))
- elif nargs == 1:
- value = rargs.pop(0)
- else:
- value = tuple(rargs[0:nargs])
- del rargs[0:nargs]
-
- else: # option doesn't take a value
- value = None
-
- option.process(opt, value, values, self)
-
- if stop:
- break
-
-
- # -- Feedback methods ----------------------------------------------
-
- def get_prog_name(self):
- if self.prog is None:
- return os.path.basename(sys.argv[0])
- else:
- return self.prog
-
- def expand_prog_name(self, s):
- return string.replace(s, "%prog", self.get_prog_name())
-
- def get_description(self):
- return self.expand_prog_name(self.description)
-
- def exit(self, status=0, msg=None):
- if msg:
- sys.stderr.write(msg)
- sys.exit(status)
-
- def error(self, msg):
- """error(msg : string)
-
- Print a usage message incorporating 'msg' to stderr and exit.
- If you override this in a subclass, it should not return -- it
- should either exit or raise an exception.
- """
- self.print_usage(sys.stderr)
- self.exit(2, "%s: error: %s\n" % (self.get_prog_name(), msg))
-
- def get_usage(self):
- if self.usage:
- return self.formatter.format_usage(
- self.expand_prog_name(self.usage))
- else:
- return ""
-
- def print_usage(self, file=None):
- """print_usage(file : file = stdout)
-
- Print the usage message for the current program (self.usage) to
- 'file' (default stdout). Any occurence of the string "%prog" in
- self.usage is replaced with the name of the current program
- (basename of sys.argv[0]). Does nothing if self.usage is empty
- or not defined.
- """
- if self.usage:
- file.write(self.get_usage() + '\n')
-
- def get_version(self):
- if self.version:
- return self.expand_prog_name(self.version)
- else:
- return ""
-
- def print_version(self, file=None):
- """print_version(file : file = stdout)
-
- Print the version message for this program (self.version) to
- 'file' (default stdout). As with print_usage(), any occurence
- of "%prog" in self.version is replaced by the current program's
- name. Does nothing if self.version is empty or undefined.
- """
- if self.version:
- file.write(self.get_version() + '\n')
-
- def format_option_help(self, formatter=None):
- if formatter is None:
- formatter = self.formatter
- formatter.store_option_strings(self)
- result = []
- result.append(formatter.format_heading(_("Options")))
- formatter.indent()
- if self.option_list:
- result.append(OptionContainer.format_option_help(self, formatter))
- result.append("\n")
- for group in self.option_groups:
- result.append(group.format_help(formatter))
- result.append("\n")
- formatter.dedent()
- # Drop the last "\n", or the header if no options or option groups:
- return string.join(result[:-1], "")
-
- def format_epilog(self, formatter):
- return formatter.format_epilog(self.epilog)
-
- def format_help(self, formatter=None):
- if formatter is None:
- formatter = self.formatter
- result = []
- if self.usage:
- result.append(self.get_usage() + "\n")
- if self.description:
- result.append(self.format_description(formatter) + "\n")
- result.append(self.format_option_help(formatter))
- result.append(self.format_epilog(formatter))
- return string.join(result, "")
-
- # used by test suite
- def _get_encoding(self, file):
- encoding = getattr(file, "encoding", None)
- if not encoding:
- encoding = sys.getdefaultencoding()
- return encoding
-
- def print_help(self, file=None):
- """print_help(file : file = stdout)
-
- Print an extended help message, listing all options and any
- help text provided with them, to 'file' (default stdout).
- """
- if file is None:
- file = sys.stdout
- encoding = self._get_encoding(file)
- file.write(encode_wrapper(self.format_help(), encoding, "replace"))
-
-# class OptionParser
-
-
-def _match_abbrev(s, wordmap):
- """_match_abbrev(s : string, wordmap : {string : Option}) -> string
-
- Return the string key in 'wordmap' for which 's' is an unambiguous
- abbreviation. If 's' is found to be ambiguous or doesn't match any of
- 'words', raise BadOptionError.
- """
- # Is there an exact match?
- if wordmap.has_key(s):
- return s
- else:
- # Isolate all words with s as a prefix.
- possibilities = filter(lambda w, s=s: w[:len(s)] == s, wordmap.keys())
- # No exact match, so there had better be just one possibility.
- if len(possibilities) == 1:
- return possibilities[0]
- elif not possibilities:
- raise BadOptionError(s)
- else:
- # More than one possible completion: ambiguous prefix.
- possibilities.sort()
- raise AmbiguousOptionError(s, possibilities)
-
-
-# Some day, there might be many Option classes. As of Optik 1.3, the
-# preferred way to instantiate Options is indirectly, via make_option(),
-# which will become a factory function when there are many Option
-# classes.
-make_option = Option
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_sets.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_sets.py
deleted file mode 100644
index 12dbead..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_sets.py
+++ /dev/null
@@ -1,583 +0,0 @@
-"""Classes to represent arbitrary sets (including sets of sets).
-
-This module implements sets using dictionaries whose values are
-ignored. The usual operations (union, intersection, deletion, etc.)
-are provided as both methods and operators.
-
-Important: sets are not sequences! While they support 'x in s',
-'len(s)', and 'for x in s', none of those operations are unique for
-sequences; for example, mappings support all three as well. The
-characteristic operation for sequences is subscripting with small
-integers: s[i], for i in range(len(s)). Sets don't support
-subscripting at all. Also, sequences allow multiple occurrences and
-their elements have a definite order; sets on the other hand don't
-record multiple occurrences and don't remember the order of element
-insertion (which is why they don't support s[i]).
-
-The following classes are provided:
-
-BaseSet -- All the operations common to both mutable and immutable
- sets. This is an abstract class, not meant to be directly
- instantiated.
-
-Set -- Mutable sets, subclass of BaseSet; not hashable.
-
-ImmutableSet -- Immutable sets, subclass of BaseSet; hashable.
- An iterable argument is mandatory to create an ImmutableSet.
-
-_TemporarilyImmutableSet -- A wrapper around a Set, hashable,
- giving the same hash value as the immutable set equivalent
- would have. Do not use this class directly.
-
-Only hashable objects can be added to a Set. In particular, you cannot
-really add a Set as an element to another Set; if you try, what is
-actually added is an ImmutableSet built from it (it compares equal to
-the one you tried adding).
-
-When you ask if `x in y' where x is a Set and y is a Set or
-ImmutableSet, x is wrapped into a _TemporarilyImmutableSet z, and
-what's tested is actually `z in y'.
-
-"""
-
-# Code history:
-#
-# - Greg V. Wilson wrote the first version, using a different approach
-# to the mutable/immutable problem, and inheriting from dict.
-#
-# - Alex Martelli modified Greg's version to implement the current
-# Set/ImmutableSet approach, and make the data an attribute.
-#
-# - Guido van Rossum rewrote much of the code, made some API changes,
-# and cleaned up the docstrings.
-#
-# - Raymond Hettinger added a number of speedups and other
-# improvements.
-
-from __future__ import generators
-try:
- from itertools import ifilter, ifilterfalse
-except ImportError:
- # Code to make the module run under Py2.2
- def ifilter(predicate, iterable):
- if predicate is None:
- def predicate(x):
- return x
- for x in iterable:
- if predicate(x):
- yield x
- def ifilterfalse(predicate, iterable):
- if predicate is None:
- def predicate(x):
- return x
- for x in iterable:
- if not predicate(x):
- yield x
- try:
- True, False
- except NameError:
- True, False = (0==0, 0!=0)
-
-__all__ = ['BaseSet', 'Set', 'ImmutableSet']
-
-class BaseSet(object):
- """Common base class for mutable and immutable sets."""
-
- __slots__ = ['_data']
-
- # Constructor
-
- def __init__(self):
- """This is an abstract class."""
- # Don't call this from a concrete subclass!
- if self.__class__ is BaseSet:
- raise TypeError, ("BaseSet is an abstract class. "
- "Use Set or ImmutableSet.")
-
- # Standard protocols: __len__, __repr__, __str__, __iter__
-
- def __len__(self):
- """Return the number of elements of a set."""
- return len(self._data)
-
- def __repr__(self):
- """Return string representation of a set.
-
- This looks like 'Set([<list of elements>])'.
- """
- return self._repr()
-
- # __str__ is the same as __repr__
- __str__ = __repr__
-
- def _repr(self, sorted=False):
- elements = self._data.keys()
- if sorted:
- elements.sort()
- return '%s(%r)' % (self.__class__.__name__, elements)
-
- def __iter__(self):
- """Return an iterator over the elements or a set.
-
- This is the keys iterator for the underlying dict.
- """
- return self._data.iterkeys()
-
- # Three-way comparison is not supported. However, because __eq__ is
- # tried before __cmp__, if Set x == Set y, x.__eq__(y) returns True and
- # then cmp(x, y) returns 0 (Python doesn't actually call __cmp__ in this
- # case).
-
- def __cmp__(self, other):
- raise TypeError, "can't compare sets using cmp()"
-
- # Equality comparisons using the underlying dicts. Mixed-type comparisons
- # are allowed here, where Set == z for non-Set z always returns False,
- # and Set != z always True. This allows expressions like "x in y" to
- # give the expected result when y is a sequence of mixed types, not
- # raising a pointless TypeError just because y contains a Set, or x is
- # a Set and y contain's a non-set ("in" invokes only __eq__).
- # Subtle: it would be nicer if __eq__ and __ne__ could return
- # NotImplemented instead of True or False. Then the other comparand
- # would get a chance to determine the result, and if the other comparand
- # also returned NotImplemented then it would fall back to object address
- # comparison (which would always return False for __eq__ and always
- # True for __ne__). However, that doesn't work, because this type
- # *also* implements __cmp__: if, e.g., __eq__ returns NotImplemented,
- # Python tries __cmp__ next, and the __cmp__ here then raises TypeError.
-
- def __eq__(self, other):
- if isinstance(other, BaseSet):
- return self._data == other._data
- else:
- return False
-
- def __ne__(self, other):
- if isinstance(other, BaseSet):
- return self._data != other._data
- else:
- return True
-
- # Copying operations
-
- def copy(self):
- """Return a shallow copy of a set."""
- result = self.__class__()
- result._data.update(self._data)
- return result
-
- __copy__ = copy # For the copy module
-
- def __deepcopy__(self, memo):
- """Return a deep copy of a set; used by copy module."""
- # This pre-creates the result and inserts it in the memo
- # early, in case the deep copy recurses into another reference
- # to this same set. A set can't be an element of itself, but
- # it can certainly contain an object that has a reference to
- # itself.
- from copy import deepcopy
- result = self.__class__()
- memo[id(self)] = result
- data = result._data
- value = True
- for elt in self:
- data[deepcopy(elt, memo)] = value
- return result
-
- # Standard set operations: union, intersection, both differences.
- # Each has an operator version (e.g. __or__, invoked with |) and a
- # method version (e.g. union).
- # Subtle: Each pair requires distinct code so that the outcome is
- # correct when the type of other isn't suitable. For example, if
- # we did "union = __or__" instead, then Set().union(3) would return
- # NotImplemented instead of raising TypeError (albeit that *why* it
- # raises TypeError as-is is also a bit subtle).
-
- def __or__(self, other):
- """Return the union of two sets as a new set.
-
- (I.e. all elements that are in either set.)
- """
- if not isinstance(other, BaseSet):
- return NotImplemented
- return self.union(other)
-
- def union(self, other):
- """Return the union of two sets as a new set.
-
- (I.e. all elements that are in either set.)
- """
- result = self.__class__(self)
- result._update(other)
- return result
-
- def __and__(self, other):
- """Return the intersection of two sets as a new set.
-
- (I.e. all elements that are in both sets.)
- """
- if not isinstance(other, BaseSet):
- return NotImplemented
- return self.intersection(other)
-
- def intersection(self, other):
- """Return the intersection of two sets as a new set.
-
- (I.e. all elements that are in both sets.)
- """
- if not isinstance(other, BaseSet):
- other = Set(other)
- if len(self) <= len(other):
- little, big = self, other
- else:
- little, big = other, self
- common = ifilter(big._data.has_key, little)
- return self.__class__(common)
-
- def __xor__(self, other):
- """Return the symmetric difference of two sets as a new set.
-
- (I.e. all elements that are in exactly one of the sets.)
- """
- if not isinstance(other, BaseSet):
- return NotImplemented
- return self.symmetric_difference(other)
-
- def symmetric_difference(self, other):
- """Return the symmetric difference of two sets as a new set.
-
- (I.e. all elements that are in exactly one of the sets.)
- """
- result = self.__class__()
- data = result._data
- value = True
- selfdata = self._data
- try:
- otherdata = other._data
- except AttributeError:
- otherdata = Set(other)._data
- for elt in ifilterfalse(otherdata.has_key, selfdata):
- data[elt] = value
- for elt in ifilterfalse(selfdata.has_key, otherdata):
- data[elt] = value
- return result
-
- def __sub__(self, other):
- """Return the difference of two sets as a new Set.
-
- (I.e. all elements that are in this set and not in the other.)
- """
- if not isinstance(other, BaseSet):
- return NotImplemented
- return self.difference(other)
-
- def difference(self, other):
- """Return the difference of two sets as a new Set.
-
- (I.e. all elements that are in this set and not in the other.)
- """
- result = self.__class__()
- data = result._data
- try:
- otherdata = other._data
- except AttributeError:
- otherdata = Set(other)._data
- value = True
- for elt in ifilterfalse(otherdata.has_key, self):
- data[elt] = value
- return result
-
- # Membership test
-
- def __contains__(self, element):
- """Report whether an element is a member of a set.
-
- (Called in response to the expression `element in self'.)
- """
- try:
- return element in self._data
- except TypeError:
- transform = getattr(element, "__as_temporarily_immutable__", None)
- if transform is None:
- raise # re-raise the TypeError exception we caught
- return transform() in self._data
-
- # Subset and superset test
-
- def issubset(self, other):
- """Report whether another set contains this set."""
- self._binary_sanity_check(other)
- if len(self) > len(other): # Fast check for obvious cases
- return False
- for elt in ifilterfalse(other._data.has_key, self):
- return False
- return True
-
- def issuperset(self, other):
- """Report whether this set contains another set."""
- self._binary_sanity_check(other)
- if len(self) < len(other): # Fast check for obvious cases
- return False
- for elt in ifilterfalse(self._data.has_key, other):
- return False
- return True
-
- # Inequality comparisons using the is-subset relation.
- __le__ = issubset
- __ge__ = issuperset
-
- def __lt__(self, other):
- self._binary_sanity_check(other)
- return len(self) < len(other) and self.issubset(other)
-
- def __gt__(self, other):
- self._binary_sanity_check(other)
- return len(self) > len(other) and self.issuperset(other)
-
- # Assorted helpers
-
- def _binary_sanity_check(self, other):
- # Check that the other argument to a binary operation is also
- # a set, raising a TypeError otherwise.
- if not isinstance(other, BaseSet):
- raise TypeError, "Binary operation only permitted between sets"
-
- def _compute_hash(self):
- # Calculate hash code for a set by xor'ing the hash codes of
- # the elements. This ensures that the hash code does not depend
- # on the order in which elements are added to the set. This is
- # not called __hash__ because a BaseSet should not be hashable;
- # only an ImmutableSet is hashable.
- result = 0
- for elt in self:
- result ^= hash(elt)
- return result
-
- def _update(self, iterable):
- # The main loop for update() and the subclass __init__() methods.
- data = self._data
-
- # Use the fast update() method when a dictionary is available.
- if isinstance(iterable, BaseSet):
- data.update(iterable._data)
- return
-
- value = True
-
- if type(iterable) in (list, tuple, xrange):
- # Optimized: we know that __iter__() and next() can't
- # raise TypeError, so we can move 'try:' out of the loop.
- it = iter(iterable)
- while True:
- try:
- for element in it:
- data[element] = value
- return
- except TypeError:
- transform = getattr(element, "__as_immutable__", None)
- if transform is None:
- raise # re-raise the TypeError exception we caught
- data[transform()] = value
- else:
- # Safe: only catch TypeError where intended
- for element in iterable:
- try:
- data[element] = value
- except TypeError:
- transform = getattr(element, "__as_immutable__", None)
- if transform is None:
- raise # re-raise the TypeError exception we caught
- data[transform()] = value
-
-
-class ImmutableSet(BaseSet):
- """Immutable set class."""
-
- __slots__ = ['_hashcode']
-
- # BaseSet + hashing
-
- def __init__(self, iterable=None):
- """Construct an immutable set from an optional iterable."""
- self._hashcode = None
- self._data = {}
- if iterable is not None:
- self._update(iterable)
-
- def __hash__(self):
- if self._hashcode is None:
- self._hashcode = self._compute_hash()
- return self._hashcode
-
- def __getstate__(self):
- return self._data, self._hashcode
-
- def __setstate__(self, state):
- self._data, self._hashcode = state
-
-class Set(BaseSet):
- """ Mutable set class."""
-
- __slots__ = []
-
- # BaseSet + operations requiring mutability; no hashing
-
- def __init__(self, iterable=None):
- """Construct a set from an optional iterable."""
- self._data = {}
- if iterable is not None:
- self._update(iterable)
-
- def __getstate__(self):
- # getstate's results are ignored if it is not
- return self._data,
-
- def __setstate__(self, data):
- self._data, = data
-
- def __hash__(self):
- """A Set cannot be hashed."""
- # We inherit object.__hash__, so we must deny this explicitly
- raise TypeError, "Can't hash a Set, only an ImmutableSet."
-
- # In-place union, intersection, differences.
- # Subtle: The xyz_update() functions deliberately return None,
- # as do all mutating operations on built-in container types.
- # The __xyz__ spellings have to return self, though.
-
- def __ior__(self, other):
- """Update a set with the union of itself and another."""
- self._binary_sanity_check(other)
- self._data.update(other._data)
- return self
-
- def union_update(self, other):
- """Update a set with the union of itself and another."""
- self._update(other)
-
- def __iand__(self, other):
- """Update a set with the intersection of itself and another."""
- self._binary_sanity_check(other)
- self._data = (self & other)._data
- return self
-
- def intersection_update(self, other):
- """Update a set with the intersection of itself and another."""
- if isinstance(other, BaseSet):
- self &= other
- else:
- self._data = (self.intersection(other))._data
-
- def __ixor__(self, other):
- """Update a set with the symmetric difference of itself and another."""
- self._binary_sanity_check(other)
- self.symmetric_difference_update(other)
- return self
-
- def symmetric_difference_update(self, other):
- """Update a set with the symmetric difference of itself and another."""
- data = self._data
- value = True
- if not isinstance(other, BaseSet):
- other = Set(other)
- if self is other:
- self.clear()
- for elt in other:
- if elt in data:
- del data[elt]
- else:
- data[elt] = value
-
- def __isub__(self, other):
- """Remove all elements of another set from this set."""
- self._binary_sanity_check(other)
- self.difference_update(other)
- return self
-
- def difference_update(self, other):
- """Remove all elements of another set from this set."""
- data = self._data
- if not isinstance(other, BaseSet):
- other = Set(other)
- if self is other:
- self.clear()
- for elt in ifilter(data.has_key, other):
- del data[elt]
-
- # Python dict-like mass mutations: update, clear
-
- def update(self, iterable):
- """Add all values from an iterable (such as a list or file)."""
- self._update(iterable)
-
- def clear(self):
- """Remove all elements from this set."""
- self._data.clear()
-
- # Single-element mutations: add, remove, discard
-
- def add(self, element):
- """Add an element to a set.
-
- This has no effect if the element is already present.
- """
- try:
- self._data[element] = True
- except TypeError:
- transform = getattr(element, "__as_immutable__", None)
- if transform is None:
- raise # re-raise the TypeError exception we caught
- self._data[transform()] = True
-
- def remove(self, element):
- """Remove an element from a set; it must be a member.
-
- If the element is not a member, raise a KeyError.
- """
- try:
- del self._data[element]
- except TypeError:
- transform = getattr(element, "__as_temporarily_immutable__", None)
- if transform is None:
- raise # re-raise the TypeError exception we caught
- del self._data[transform()]
-
- def discard(self, element):
- """Remove an element from a set if it is a member.
-
- If the element is not a member, do nothing.
- """
- try:
- self.remove(element)
- except KeyError:
- pass
-
- def pop(self):
- """Remove and return an arbitrary set element."""
- return self._data.popitem()[0]
-
- def __as_immutable__(self):
- # Return a copy of self as an immutable set
- return ImmutableSet(self)
-
- def __as_temporarily_immutable__(self):
- # Return self wrapped in a temporarily immutable set
- return _TemporarilyImmutableSet(self)
-
-
-class _TemporarilyImmutableSet(BaseSet):
- # Wrap a mutable set as if it was temporarily immutable.
- # This only supplies hashing and equality comparisons.
-
- def __init__(self, set):
- self._set = set
- self._data = set._data # Needed by ImmutableSet.__eq__()
-
- def __hash__(self):
- return self._set._compute_hash()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_sets15.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_sets15.py
deleted file mode 100644
index bafa009..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_sets15.py
+++ /dev/null
@@ -1,176 +0,0 @@
-#
-# A Set class that works all the way back to Python 1.5. From:
-#
-# Python Cookbook: Yet another Set class for Python
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/106469
-# Goncalo Rodriques
-#
-# This is a pure Pythonic implementation of a set class. The syntax
-# and methods implemented are, for the most part, borrowed from
-# PEP 218 by Greg Wilson.
-#
-# Note that this class violates the formal definition of a set() by adding
-# a __getitem__() method so we can iterate over a set's elements under
-# Python 1.5 and 2.1, which don't support __iter__() and iterator types.
-#
-
-import string
-
-class Set:
- """The set class. It can contain mutable objects."""
-
- def __init__(self, seq = None):
- """The constructor. It can take any object giving an iterator as an optional
- argument to populate the new set."""
- self.elems = []
- if seq:
- for elem in seq:
- if elem not in self.elems:
- hash(elem)
- self.elems.append(elem)
-
- def __str__(self):
- return "set([%s])" % string.join(map(str, self.elems), ", ")
-
-
- def copy(self):
- """Shallow copy of a set object."""
- return Set(self.elems)
-
- def __contains__(self, elem):
- return elem in self.elems
-
- def __len__(self):
- return len(self.elems)
-
- def __getitem__(self, index):
- # Added so that Python 1.5 can iterate over the elements.
- # The cookbook recipe's author didn't like this because there
- # really isn't any order in a set object, but this is necessary
- # to make the class work well enough for our purposes.
- return self.elems[index]
-
- def items(self):
- """Returns a list of the elements in the set."""
- return self.elems
-
- def add(self, elem):
- """Add one element to the set."""
- if elem not in self.elems:
- hash(elem)
- self.elems.append(elem)
-
- def remove(self, elem):
- """Remove an element from the set. Return an error if elem is not in the set."""
- try:
- self.elems.remove(elem)
- except ValueError:
- raise LookupError, "Object %s is not a member of the set." % str(elem)
-
- def discard(self, elem):
- """Remove an element from the set. Do nothing if elem is not in the set."""
- try:
- self.elems.remove(elem)
- except ValueError:
- pass
-
- def sort(self, func=cmp):
- self.elems.sort(func)
-
- #Define an iterator for a set.
- def __iter__(self):
- return iter(self.elems)
-
- #The basic binary operations with sets.
- def __or__(self, other):
- """Union of two sets."""
- ret = self.copy()
- for elem in other.elems:
- if elem not in ret:
- ret.elems.append(elem)
- return ret
-
- def __sub__(self, other):
- """Difference of two sets."""
- ret = self.copy()
- for elem in other.elems:
- ret.discard(elem)
- return ret
-
- def __and__(self, other):
- """Intersection of two sets."""
- ret = Set()
- for elem in self.elems:
- if elem in other.elems:
- ret.elems.append(elem)
- return ret
-
- def __add__(self, other):
- """Symmetric difference of two sets."""
- ret = Set()
- temp = other.copy()
- for elem in self.elems:
- if elem in temp.elems:
- temp.elems.remove(elem)
- else:
- ret.elems.append(elem)
- #Add remaining elements.
- for elem in temp.elems:
- ret.elems.append(elem)
- return ret
-
- def __mul__(self, other):
- """Cartesian product of two sets."""
- ret = Set()
- for elemself in self.elems:
- x = map(lambda other, s=elemself: (s, other), other.elems)
- ret.elems.extend(x)
- return ret
-
- #Some of the binary comparisons.
- def __lt__(self, other):
- """Returns 1 if the lhs set is contained but not equal to the rhs set."""
- if len(self.elems) < len(other.elems):
- temp = other.copy()
- for elem in self.elems:
- if elem in temp.elems:
- temp.remove(elem)
- else:
- return 0
- return len(temp.elems) == 0
- else:
- return 0
-
- def __le__(self, other):
- """Returns 1 if the lhs set is contained in the rhs set."""
- if len(self.elems) <= len(other.elems):
- ret = 1
- for elem in self.elems:
- if elem not in other.elems:
- ret = 0
- break
- return ret
- else:
- return 0
-
- def __eq__(self, other):
- """Returns 1 if the sets are equal."""
- if len(self.elems) != len(other.elems):
- return 0
- else:
- return len(self - other) == 0
-
- def __cmp__(self, other):
- """Returns 1 if the sets are equal."""
- if self.__lt__(other):
- return -1
- elif other.__lt__(self):
- return 1
- else:
- return 0
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_shlex.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_shlex.py
deleted file mode 100644
index 9e30a01..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_shlex.py
+++ /dev/null
@@ -1,325 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-"""A lexical analyzer class for simple shell-like syntaxes."""
-
-# Module and documentation by Eric S. Raymond, 21 Dec 1998
-# Input stacking and error message cleanup added by ESR, March 2000
-# push_source() and pop_source() made explicit by ESR, January 2001.
-# Posix compliance, split(), string arguments, and
-# iterator interface by Gustavo Niemeyer, April 2003.
-
-import os.path
-import sys
-#from collections import deque
-
-class deque:
- def __init__(self):
- self.data = []
- def __len__(self):
- return len(self.data)
- def appendleft(self, item):
- self.data.insert(0, item)
- def popleft(self):
- return self.data.pop(0)
-
-try:
- basestring
-except NameError:
- import types
- def is_basestring(s):
- return type(s) is types.StringType
-else:
- def is_basestring(s):
- return isinstance(s, basestring)
-
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-__all__ = ["shlex", "split"]
-
-class shlex:
- "A lexical analyzer class for simple shell-like syntaxes."
- def __init__(self, instream=None, infile=None, posix=False):
- if is_basestring(instream):
- instream = StringIO(instream)
- if instream is not None:
- self.instream = instream
- self.infile = infile
- else:
- self.instream = sys.stdin
- self.infile = None
- self.posix = posix
- if posix:
- self.eof = None
- else:
- self.eof = ''
- self.commenters = '#'
- self.wordchars = ('abcdfeghijklmnopqrstuvwxyz'
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_')
- if self.posix:
- self.wordchars = self.wordchars + ('ßàáâăäåæçèéêë́íîïđṇ̃óôơöøùúûüư₫ÿ'
- 'ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖØÙÚÛÜỮ')
- self.whitespace = ' \t\r\n'
- self.whitespace_split = False
- self.quotes = '\'"'
- self.escape = '\\'
- self.escapedquotes = '"'
- self.state = ' '
- self.pushback = deque()
- self.lineno = 1
- self.debug = 0
- self.token = ''
- self.filestack = deque()
- self.source = None
- if self.debug:
- print 'shlex: reading from %s, line %d' \
- % (self.instream, self.lineno)
-
- def push_token(self, tok):
- "Push a token onto the stack popped by the get_token method"
- if self.debug >= 1:
- print "shlex: pushing token " + repr(tok)
- self.pushback.appendleft(tok)
-
- def push_source(self, newstream, newfile=None):
- "Push an input source onto the lexer's input source stack."
- if is_basestring(newstream):
- newstream = StringIO(newstream)
- self.filestack.appendleft((self.infile, self.instream, self.lineno))
- self.infile = newfile
- self.instream = newstream
- self.lineno = 1
- if self.debug:
- if newfile is not None:
- print 'shlex: pushing to file %s' % (self.infile,)
- else:
- print 'shlex: pushing to stream %s' % (self.instream,)
-
- def pop_source(self):
- "Pop the input source stack."
- self.instream.close()
- (self.infile, self.instream, self.lineno) = self.filestack.popleft()
- if self.debug:
- print 'shlex: popping to %s, line %d' \
- % (self.instream, self.lineno)
- self.state = ' '
-
- def get_token(self):
- "Get a token from the input stream (or from stack if it's nonempty)"
- if self.pushback:
- tok = self.pushback.popleft()
- if self.debug >= 1:
- print "shlex: popping token " + repr(tok)
- return tok
- # No pushback. Get a token.
- raw = self.read_token()
- # Handle inclusions
- if self.source is not None:
- while raw == self.source:
- spec = self.sourcehook(self.read_token())
- if spec:
- (newfile, newstream) = spec
- self.push_source(newstream, newfile)
- raw = self.get_token()
- # Maybe we got EOF instead?
- while raw == self.eof:
- if not self.filestack:
- return self.eof
- else:
- self.pop_source()
- raw = self.get_token()
- # Neither inclusion nor EOF
- if self.debug >= 1:
- if raw != self.eof:
- print "shlex: token=" + repr(raw)
- else:
- print "shlex: token=EOF"
- return raw
-
- def read_token(self):
- quoted = False
- escapedstate = ' '
- while True:
- nextchar = self.instream.read(1)
- if nextchar == '\n':
- self.lineno = self.lineno + 1
- if self.debug >= 3:
- print "shlex: in state", repr(self.state), \
- "I see character:", repr(nextchar)
- if self.state is None:
- self.token = '' # past end of file
- break
- elif self.state == ' ':
- if not nextchar:
- self.state = None # end of file
- break
- elif nextchar in self.whitespace:
- if self.debug >= 2:
- print "shlex: I see whitespace in whitespace state"
- if self.token or (self.posix and quoted):
- break # emit current token
- else:
- continue
- elif nextchar in self.commenters:
- self.instream.readline()
- self.lineno = self.lineno + 1
- elif self.posix and nextchar in self.escape:
- escapedstate = 'a'
- self.state = nextchar
- elif nextchar in self.wordchars:
- self.token = nextchar
- self.state = 'a'
- elif nextchar in self.quotes:
- if not self.posix:
- self.token = nextchar
- self.state = nextchar
- elif self.whitespace_split:
- self.token = nextchar
- self.state = 'a'
- else:
- self.token = nextchar
- if self.token or (self.posix and quoted):
- break # emit current token
- else:
- continue
- elif self.state in self.quotes:
- quoted = True
- if not nextchar: # end of file
- if self.debug >= 2:
- print "shlex: I see EOF in quotes state"
- # XXX what error should be raised here?
- raise ValueError, "No closing quotation"
- if nextchar == self.state:
- if not self.posix:
- self.token = self.token + nextchar
- self.state = ' '
- break
- else:
- self.state = 'a'
- elif self.posix and nextchar in self.escape and \
- self.state in self.escapedquotes:
- escapedstate = self.state
- self.state = nextchar
- else:
- self.token = self.token + nextchar
- elif self.state in self.escape:
- if not nextchar: # end of file
- if self.debug >= 2:
- print "shlex: I see EOF in escape state"
- # XXX what error should be raised here?
- raise ValueError, "No escaped character"
- # In posix shells, only the quote itself or the escape
- # character may be escaped within quotes.
- if escapedstate in self.quotes and \
- nextchar != self.state and nextchar != escapedstate:
- self.token = self.token + self.state
- self.token = self.token + nextchar
- self.state = escapedstate
- elif self.state == 'a':
- if not nextchar:
- self.state = None # end of file
- break
- elif nextchar in self.whitespace:
- if self.debug >= 2:
- print "shlex: I see whitespace in word state"
- self.state = ' '
- if self.token or (self.posix and quoted):
- break # emit current token
- else:
- continue
- elif nextchar in self.commenters:
- self.instream.readline()
- self.lineno = self.lineno + 1
- if self.posix:
- self.state = ' '
- if self.token or (self.posix and quoted):
- break # emit current token
- else:
- continue
- elif self.posix and nextchar in self.quotes:
- self.state = nextchar
- elif self.posix and nextchar in self.escape:
- escapedstate = 'a'
- self.state = nextchar
- elif nextchar in self.wordchars or nextchar in self.quotes \
- or self.whitespace_split:
- self.token = self.token + nextchar
- else:
- self.pushback.appendleft(nextchar)
- if self.debug >= 2:
- print "shlex: I see punctuation in word state"
- self.state = ' '
- if self.token:
- break # emit current token
- else:
- continue
- result = self.token
- self.token = ''
- if self.posix and not quoted and result == '':
- result = None
- if self.debug > 1:
- if result:
- print "shlex: raw token=" + repr(result)
- else:
- print "shlex: raw token=EOF"
- return result
-
- def sourcehook(self, newfile):
- "Hook called on a filename to be sourced."
- if newfile[0] == '"':
- newfile = newfile[1:-1]
- # This implements cpp-like semantics for relative-path inclusion.
- if is_basestring(self.infile) and not os.path.isabs(newfile):
- newfile = os.path.join(os.path.dirname(self.infile), newfile)
- return (newfile, open(newfile, "r"))
-
- def error_leader(self, infile=None, lineno=None):
- "Emit a C-compiler-like, Emacs-friendly error-message leader."
- if infile is None:
- infile = self.infile
- if lineno is None:
- lineno = self.lineno
- return "\"%s\", line %d: " % (infile, lineno)
-
- def __iter__(self):
- return self
-
- def next(self):
- token = self.get_token()
- if token == self.eof:
- raise StopIteration
- return token
-
-def split(s, comments=False):
- lex = shlex(s, posix=True)
- lex.whitespace_split = True
- if not comments:
- lex.commenters = ''
- #return list(lex)
- result = []
- while True:
- token = lex.get_token()
- if token == lex.eof:
- break
- result.append(token)
- return result
-
-if __name__ == '__main__':
- if len(sys.argv) == 1:
- lexer = shlex()
- else:
- file = sys.argv[1]
- lexer = shlex(open(file), file)
- while 1:
- tt = lexer.get_token()
- if tt:
- print "Token: " + repr(tt)
- else:
- break
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_subprocess.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_subprocess.py
deleted file mode 100644
index 4968825..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_subprocess.py
+++ /dev/null
@@ -1,1296 +0,0 @@
-# subprocess - Subprocesses with accessible I/O streams
-#
-# For more information about this module, see PEP 324.
-#
-# This module should remain compatible with Python 2.2, see PEP 291.
-#
-# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
-#
-# Licensed to PSF under a Contributor Agreement.
-# See http://www.python.org/2.4/license for licensing details.
-
-r"""subprocess - Subprocesses with accessible I/O streams
-
-This module allows you to spawn processes, connect to their
-input/output/error pipes, and obtain their return codes. This module
-intends to replace several other, older modules and functions, like:
-
-os.system
-os.spawn*
-os.popen*
-popen2.*
-commands.*
-
-Information about how the subprocess module can be used to replace these
-modules and functions can be found below.
-
-
-
-Using the subprocess module
-===========================
-This module defines one class called Popen:
-
-class Popen(args, bufsize=0, executable=None,
- stdin=None, stdout=None, stderr=None,
- preexec_fn=None, close_fds=False, shell=False,
- cwd=None, env=None, universal_newlines=False,
- startupinfo=None, creationflags=0):
-
-
-Arguments are:
-
-args should be a string, or a sequence of program arguments. The
-program to execute is normally the first item in the args sequence or
-string, but can be explicitly set by using the executable argument.
-
-On UNIX, with shell=False (default): In this case, the Popen class
-uses os.execvp() to execute the child program. args should normally
-be a sequence. A string will be treated as a sequence with the string
-as the only item (the program to execute).
-
-On UNIX, with shell=True: If args is a string, it specifies the
-command string to execute through the shell. If args is a sequence,
-the first item specifies the command string, and any additional items
-will be treated as additional shell arguments.
-
-On Windows: the Popen class uses CreateProcess() to execute the child
-program, which operates on strings. If args is a sequence, it will be
-converted to a string using the list2cmdline method. Please note that
-not all MS Windows applications interpret the command line the same
-way: The list2cmdline is designed for applications using the same
-rules as the MS C runtime.
-
-bufsize, if given, has the same meaning as the corresponding argument
-to the built-in open() function: 0 means unbuffered, 1 means line
-buffered, any other positive value means use a buffer of
-(approximately) that size. A negative bufsize means to use the system
-default, which usually means fully buffered. The default value for
-bufsize is 0 (unbuffered).
-
-stdin, stdout and stderr specify the executed programs' standard
-input, standard output and standard error file handles, respectively.
-Valid values are PIPE, an existing file descriptor (a positive
-integer), an existing file object, and None. PIPE indicates that a
-new pipe to the child should be created. With None, no redirection
-will occur; the child's file handles will be inherited from the
-parent. Additionally, stderr can be STDOUT, which indicates that the
-stderr data from the applications should be captured into the same
-file handle as for stdout.
-
-If preexec_fn is set to a callable object, this object will be called
-in the child process just before the child is executed.
-
-If close_fds is true, all file descriptors except 0, 1 and 2 will be
-closed before the child process is executed.
-
-if shell is true, the specified command will be executed through the
-shell.
-
-If cwd is not None, the current directory will be changed to cwd
-before the child is executed.
-
-If env is not None, it defines the environment variables for the new
-process.
-
-If universal_newlines is true, the file objects stdout and stderr are
-opened as a text files, but lines may be terminated by any of '\n',
-the Unix end-of-line convention, '\r', the Macintosh convention or
-'\r\n', the Windows convention. All of these external representations
-are seen as '\n' by the Python program. Note: This feature is only
-available if Python is built with universal newline support (the
-default). Also, the newlines attribute of the file objects stdout,
-stdin and stderr are not updated by the communicate() method.
-
-The startupinfo and creationflags, if given, will be passed to the
-underlying CreateProcess() function. They can specify things such as
-appearance of the main window and priority for the new process.
-(Windows only)
-
-
-This module also defines two shortcut functions:
-
-call(*popenargs, **kwargs):
- Run command with arguments. Wait for command to complete, then
- return the returncode attribute.
-
- The arguments are the same as for the Popen constructor. Example:
-
- retcode = call(["ls", "-l"])
-
-check_call(*popenargs, **kwargs):
- Run command with arguments. Wait for command to complete. If the
- exit code was zero then return, otherwise raise
- CalledProcessError. The CalledProcessError object will have the
- return code in the returncode attribute.
-
- The arguments are the same as for the Popen constructor. Example:
-
- check_call(["ls", "-l"])
-
-Exceptions
-----------
-Exceptions raised in the child process, before the new program has
-started to execute, will be re-raised in the parent. Additionally,
-the exception object will have one extra attribute called
-'child_traceback', which is a string containing traceback information
-from the childs point of view.
-
-The most common exception raised is OSError. This occurs, for
-example, when trying to execute a non-existent file. Applications
-should prepare for OSErrors.
-
-A ValueError will be raised if Popen is called with invalid arguments.
-
-check_call() will raise CalledProcessError, if the called process
-returns a non-zero return code.
-
-
-Security
---------
-Unlike some other popen functions, this implementation will never call
-/bin/sh implicitly. This means that all characters, including shell
-metacharacters, can safely be passed to child processes.
-
-
-Popen objects
-=============
-Instances of the Popen class have the following methods:
-
-poll()
- Check if child process has terminated. Returns returncode
- attribute.
-
-wait()
- Wait for child process to terminate. Returns returncode attribute.
-
-communicate(input=None)
- Interact with process: Send data to stdin. Read data from stdout
- and stderr, until end-of-file is reached. Wait for process to
- terminate. The optional stdin argument should be a string to be
- sent to the child process, or None, if no data should be sent to
- the child.
-
- communicate() returns a tuple (stdout, stderr).
-
- Note: The data read is buffered in memory, so do not use this
- method if the data size is large or unlimited.
-
-The following attributes are also available:
-
-stdin
- If the stdin argument is PIPE, this attribute is a file object
- that provides input to the child process. Otherwise, it is None.
-
-stdout
- If the stdout argument is PIPE, this attribute is a file object
- that provides output from the child process. Otherwise, it is
- None.
-
-stderr
- If the stderr argument is PIPE, this attribute is file object that
- provides error output from the child process. Otherwise, it is
- None.
-
-pid
- The process ID of the child process.
-
-returncode
- The child return code. A None value indicates that the process
- hasn't terminated yet. A negative value -N indicates that the
- child was terminated by signal N (UNIX only).
-
-
-Replacing older functions with the subprocess module
-====================================================
-In this section, "a ==> b" means that b can be used as a replacement
-for a.
-
-Note: All functions in this section fail (more or less) silently if
-the executed program cannot be found; this module raises an OSError
-exception.
-
-In the following examples, we assume that the subprocess module is
-imported with "from subprocess import *".
-
-
-Replacing /bin/sh shell backquote
----------------------------------
-output=`mycmd myarg`
-==>
-output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
-
-
-Replacing shell pipe line
--------------------------
-output=`dmesg | grep hda`
-==>
-p1 = Popen(["dmesg"], stdout=PIPE)
-p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
-output = p2.communicate()[0]
-
-
-Replacing os.system()
----------------------
-sts = os.system("mycmd" + " myarg")
-==>
-p = Popen("mycmd" + " myarg", shell=True)
-pid, sts = os.waitpid(p.pid, 0)
-
-Note:
-
-* Calling the program through the shell is usually not required.
-
-* It's easier to look at the returncode attribute than the
- exitstatus.
-
-A more real-world example would look like this:
-
-try:
- retcode = call("mycmd" + " myarg", shell=True)
- if retcode < 0:
- print >>sys.stderr, "Child was terminated by signal", -retcode
- else:
- print >>sys.stderr, "Child returned", retcode
-except OSError, e:
- print >>sys.stderr, "Execution failed:", e
-
-
-Replacing os.spawn*
--------------------
-P_NOWAIT example:
-
-pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
-==>
-pid = Popen(["/bin/mycmd", "myarg"]).pid
-
-
-P_WAIT example:
-
-retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
-==>
-retcode = call(["/bin/mycmd", "myarg"])
-
-
-Vector example:
-
-os.spawnvp(os.P_NOWAIT, path, args)
-==>
-Popen([path] + args[1:])
-
-
-Environment example:
-
-os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
-==>
-Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
-
-
-Replacing os.popen*
--------------------
-pipe = os.popen(cmd, mode='r', bufsize)
-==>
-pipe = Popen(cmd, shell=True, bufsize=bufsize, stdout=PIPE).stdout
-
-pipe = os.popen(cmd, mode='w', bufsize)
-==>
-pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin
-
-
-(child_stdin, child_stdout) = os.popen2(cmd, mode, bufsize)
-==>
-p = Popen(cmd, shell=True, bufsize=bufsize,
- stdin=PIPE, stdout=PIPE, close_fds=True)
-(child_stdin, child_stdout) = (p.stdin, p.stdout)
-
-
-(child_stdin,
- child_stdout,
- child_stderr) = os.popen3(cmd, mode, bufsize)
-==>
-p = Popen(cmd, shell=True, bufsize=bufsize,
- stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
-(child_stdin,
- child_stdout,
- child_stderr) = (p.stdin, p.stdout, p.stderr)
-
-
-(child_stdin, child_stdout_and_stderr) = os.popen4(cmd, mode, bufsize)
-==>
-p = Popen(cmd, shell=True, bufsize=bufsize,
- stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
-(child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
-
-
-Replacing popen2.*
-------------------
-Note: If the cmd argument to popen2 functions is a string, the command
-is executed through /bin/sh. If it is a list, the command is directly
-executed.
-
-(child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
-==>
-p = Popen(["somestring"], shell=True, bufsize=bufsize
- stdin=PIPE, stdout=PIPE, close_fds=True)
-(child_stdout, child_stdin) = (p.stdout, p.stdin)
-
-
-(child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode)
-==>
-p = Popen(["mycmd", "myarg"], bufsize=bufsize,
- stdin=PIPE, stdout=PIPE, close_fds=True)
-(child_stdout, child_stdin) = (p.stdout, p.stdin)
-
-The popen2.Popen3 and popen3.Popen4 basically works as subprocess.Popen,
-except that:
-
-* subprocess.Popen raises an exception if the execution fails
-* the capturestderr argument is replaced with the stderr argument.
-* stdin=PIPE and stdout=PIPE must be specified.
-* popen2 closes all filedescriptors by default, but you have to specify
- close_fds=True with subprocess.Popen.
-
-
-"""
-
-import sys
-mswindows = (sys.platform == "win32")
-
-import os
-import string
-import types
-import traceback
-
-# Exception classes used by this module.
-class CalledProcessError(Exception):
- """This exception is raised when a process run by check_call() returns
- a non-zero exit status. The exit status will be stored in the
- returncode attribute."""
- def __init__(self, returncode, cmd):
- self.returncode = returncode
- self.cmd = cmd
- def __str__(self):
- return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
-
-
-if mswindows:
- try:
- import threading
- except ImportError:
- # SCons: the threading module is only used by the communicate()
- # method, which we don't actually use, so don't worry if we
- # can't import it.
- pass
- import msvcrt
- if 0: # <-- change this to use pywin32 instead of the _subprocess driver
- import pywintypes
- from win32api import GetStdHandle, STD_INPUT_HANDLE, \
- STD_OUTPUT_HANDLE, STD_ERROR_HANDLE
- from win32api import GetCurrentProcess, DuplicateHandle, \
- GetModuleFileName, GetVersion
- from win32con import DUPLICATE_SAME_ACCESS, SW_HIDE
- from win32pipe import CreatePipe
- from win32process import CreateProcess, STARTUPINFO, \
- GetExitCodeProcess, STARTF_USESTDHANDLES, \
- STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE
- from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0
- else:
- # SCons: don't die on Python versions that don't have _subprocess.
- try:
- from _subprocess import *
- except ImportError:
- pass
- class STARTUPINFO:
- dwFlags = 0
- hStdInput = None
- hStdOutput = None
- hStdError = None
- wShowWindow = 0
- class pywintypes:
- error = IOError
-else:
- import select
- import errno
- import fcntl
- import pickle
-
- try:
- fcntl.F_GETFD
- except AttributeError:
- fcntl.F_GETFD = 1
-
- try:
- fcntl.F_SETFD
- except AttributeError:
- fcntl.F_SETFD = 2
-
-__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "CalledProcessError"]
-
-try:
- MAXFD = os.sysconf("SC_OPEN_MAX")
-except KeyboardInterrupt:
- raise # SCons: don't swallow keyboard interrupts
-except:
- MAXFD = 256
-
-# True/False does not exist on 2.2.0
-try:
- False
-except NameError:
- False = 0
- True = 1
-
-try:
- isinstance(1, int)
-except TypeError:
- def is_int(obj):
- return type(obj) == type(1)
- def is_int_or_long(obj):
- return type(obj) in (type(1), type(1L))
-else:
- def is_int(obj):
- return isinstance(obj, int)
- def is_int_or_long(obj):
- return isinstance(obj, (int, long))
-
-try:
- types.StringTypes
-except AttributeError:
- try:
- types.StringTypes = (types.StringType, types.UnicodeType)
- except AttributeError:
- types.StringTypes = (types.StringType,)
- def is_string(obj):
- return type(obj) in types.StringTypes
-else:
- def is_string(obj):
- return isinstance(obj, types.StringTypes)
-
-_active = []
-
-def _cleanup():
- for inst in _active[:]:
- if inst.poll(_deadstate=sys.maxint) >= 0:
- try:
- _active.remove(inst)
- except ValueError:
- # This can happen if two threads create a new Popen instance.
- # It's harmless that it was already removed, so ignore.
- pass
-
-PIPE = -1
-STDOUT = -2
-
-
-def call(*popenargs, **kwargs):
- """Run command with arguments. Wait for command to complete, then
- return the returncode attribute.
-
- The arguments are the same as for the Popen constructor. Example:
-
- retcode = call(["ls", "-l"])
- """
- return apply(Popen, popenargs, kwargs).wait()
-
-
-def check_call(*popenargs, **kwargs):
- """Run command with arguments. Wait for command to complete. If
- the exit code was zero then return, otherwise raise
- CalledProcessError. The CalledProcessError object will have the
- return code in the returncode attribute.
-
- The arguments are the same as for the Popen constructor. Example:
-
- check_call(["ls", "-l"])
- """
- retcode = apply(call, popenargs, kwargs)
- cmd = kwargs.get("args")
- if cmd is None:
- cmd = popenargs[0]
- if retcode:
- raise CalledProcessError(retcode, cmd)
- return retcode
-
-
-def list2cmdline(seq):
- """
- Translate a sequence of arguments into a command line
- string, using the same rules as the MS C runtime:
-
- 1) Arguments are delimited by white space, which is either a
- space or a tab.
-
- 2) A string surrounded by double quotation marks is
- interpreted as a single argument, regardless of white space
- contained within. A quoted string can be embedded in an
- argument.
-
- 3) A double quotation mark preceded by a backslash is
- interpreted as a literal double quotation mark.
-
- 4) Backslashes are interpreted literally, unless they
- immediately precede a double quotation mark.
-
- 5) If backslashes immediately precede a double quotation mark,
- every pair of backslashes is interpreted as a literal
- backslash. If the number of backslashes is odd, the last
- backslash escapes the next double quotation mark as
- described in rule 3.
- """
-
- # See
- # http://msdn.microsoft.com/library/en-us/vccelng/htm/progs_12.asp
- result = []
- needquote = False
- for arg in seq:
- bs_buf = []
-
- # Add a space to separate this argument from the others
- if result:
- result.append(' ')
-
- needquote = (" " in arg) or ("\t" in arg)
- if needquote:
- result.append('"')
-
- for c in arg:
- if c == '\\':
- # Don't know if we need to double yet.
- bs_buf.append(c)
- elif c == '"':
- # Double backspaces.
- result.append('\\' * len(bs_buf)*2)
- bs_buf = []
- result.append('\\"')
- else:
- # Normal char
- if bs_buf:
- result.extend(bs_buf)
- bs_buf = []
- result.append(c)
-
- # Add remaining backspaces, if any.
- if bs_buf:
- result.extend(bs_buf)
-
- if needquote:
- result.extend(bs_buf)
- result.append('"')
-
- return string.join(result, '')
-
-
-try:
- object
-except NameError:
- class object:
- pass
-
-class Popen(object):
- def __init__(self, args, bufsize=0, executable=None,
- stdin=None, stdout=None, stderr=None,
- preexec_fn=None, close_fds=False, shell=False,
- cwd=None, env=None, universal_newlines=False,
- startupinfo=None, creationflags=0):
- """Create new Popen instance."""
- _cleanup()
-
- self._child_created = False
- if not is_int_or_long(bufsize):
- raise TypeError("bufsize must be an integer")
-
- if mswindows:
- if preexec_fn is not None:
- raise ValueError("preexec_fn is not supported on Windows "
- "platforms")
- if close_fds:
- raise ValueError("close_fds is not supported on Windows "
- "platforms")
- else:
- # POSIX
- if startupinfo is not None:
- raise ValueError("startupinfo is only supported on Windows "
- "platforms")
- if creationflags != 0:
- raise ValueError("creationflags is only supported on Windows "
- "platforms")
-
- self.stdin = None
- self.stdout = None
- self.stderr = None
- self.pid = None
- self.returncode = None
- self.universal_newlines = universal_newlines
-
- # Input and output objects. The general principle is like
- # this:
- #
- # Parent Child
- # ------ -----
- # p2cwrite ---stdin---> p2cread
- # c2pread <--stdout--- c2pwrite
- # errread <--stderr--- errwrite
- #
- # On POSIX, the child objects are file descriptors. On
- # Windows, these are Windows file handles. The parent objects
- # are file descriptors on both platforms. The parent objects
- # are None when not using PIPEs. The child objects are None
- # when not redirecting.
-
- (p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite) = self._get_handles(stdin, stdout, stderr)
-
- self._execute_child(args, executable, preexec_fn, close_fds,
- cwd, env, universal_newlines,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
- if p2cwrite:
- self.stdin = os.fdopen(p2cwrite, 'wb', bufsize)
- if c2pread:
- if universal_newlines:
- self.stdout = os.fdopen(c2pread, 'rU', bufsize)
- else:
- self.stdout = os.fdopen(c2pread, 'rb', bufsize)
- if errread:
- if universal_newlines:
- self.stderr = os.fdopen(errread, 'rU', bufsize)
- else:
- self.stderr = os.fdopen(errread, 'rb', bufsize)
-
-
- def _translate_newlines(self, data):
- data = data.replace("\r\n", "\n")
- data = data.replace("\r", "\n")
- return data
-
-
- def __del__(self):
- if not self._child_created:
- # We didn't get to successfully create a child process.
- return
- # In case the child hasn't been waited on, check if it's done.
- self.poll(_deadstate=sys.maxint)
- if self.returncode is None and _active is not None:
- # Child is still running, keep us alive until we can wait on it.
- _active.append(self)
-
-
- def communicate(self, input=None):
- """Interact with process: Send data to stdin. Read data from
- stdout and stderr, until end-of-file is reached. Wait for
- process to terminate. The optional input argument should be a
- string to be sent to the child process, or None, if no data
- should be sent to the child.
-
- communicate() returns a tuple (stdout, stderr)."""
-
- # Optimization: If we are only using one pipe, or no pipe at
- # all, using select() or threads is unnecessary.
- if [self.stdin, self.stdout, self.stderr].count(None) >= 2:
- stdout = None
- stderr = None
- if self.stdin:
- if input:
- self.stdin.write(input)
- self.stdin.close()
- elif self.stdout:
- stdout = self.stdout.read()
- elif self.stderr:
- stderr = self.stderr.read()
- self.wait()
- return (stdout, stderr)
-
- return self._communicate(input)
-
-
- if mswindows:
- #
- # Windows methods
- #
- def _get_handles(self, stdin, stdout, stderr):
- """Construct and return tupel with IO objects:
- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
- """
- if stdin is None and stdout is None and stderr is None:
- return (None, None, None, None, None, None)
-
- p2cread, p2cwrite = None, None
- c2pread, c2pwrite = None, None
- errread, errwrite = None, None
-
- if stdin is None:
- p2cread = GetStdHandle(STD_INPUT_HANDLE)
- elif stdin == PIPE:
- p2cread, p2cwrite = CreatePipe(None, 0)
- # Detach and turn into fd
- p2cwrite = p2cwrite.Detach()
- p2cwrite = msvcrt.open_osfhandle(p2cwrite, 0)
- elif is_int(stdin):
- p2cread = msvcrt.get_osfhandle(stdin)
- else:
- # Assuming file-like object
- p2cread = msvcrt.get_osfhandle(stdin.fileno())
- p2cread = self._make_inheritable(p2cread)
-
- if stdout is None:
- c2pwrite = GetStdHandle(STD_OUTPUT_HANDLE)
- elif stdout == PIPE:
- c2pread, c2pwrite = CreatePipe(None, 0)
- # Detach and turn into fd
- c2pread = c2pread.Detach()
- c2pread = msvcrt.open_osfhandle(c2pread, 0)
- elif is_int(stdout):
- c2pwrite = msvcrt.get_osfhandle(stdout)
- else:
- # Assuming file-like object
- c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
- c2pwrite = self._make_inheritable(c2pwrite)
-
- if stderr is None:
- errwrite = GetStdHandle(STD_ERROR_HANDLE)
- elif stderr == PIPE:
- errread, errwrite = CreatePipe(None, 0)
- # Detach and turn into fd
- errread = errread.Detach()
- errread = msvcrt.open_osfhandle(errread, 0)
- elif stderr == STDOUT:
- errwrite = c2pwrite
- elif is_int(stderr):
- errwrite = msvcrt.get_osfhandle(stderr)
- else:
- # Assuming file-like object
- errwrite = msvcrt.get_osfhandle(stderr.fileno())
- errwrite = self._make_inheritable(errwrite)
-
- return (p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
-
- def _make_inheritable(self, handle):
- """Return a duplicate of handle, which is inheritable"""
- return DuplicateHandle(GetCurrentProcess(), handle,
- GetCurrentProcess(), 0, 1,
- DUPLICATE_SAME_ACCESS)
-
-
- def _find_w9xpopen(self):
- """Find and return absolut path to w9xpopen.exe"""
- w9xpopen = os.path.join(os.path.dirname(GetModuleFileName(0)),
- "w9xpopen.exe")
- if not os.path.exists(w9xpopen):
- # Eeek - file-not-found - possibly an embedding
- # situation - see if we can locate it in sys.exec_prefix
- w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix),
- "w9xpopen.exe")
- if not os.path.exists(w9xpopen):
- raise RuntimeError("Cannot locate w9xpopen.exe, which is "
- "needed for Popen to work with your "
- "shell or platform.")
- return w9xpopen
-
-
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- cwd, env, universal_newlines,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite):
- """Execute program (MS Windows version)"""
-
- if not isinstance(args, types.StringTypes):
- args = list2cmdline(args)
-
- # Process startup details
- if startupinfo is None:
- startupinfo = STARTUPINFO()
- if None not in (p2cread, c2pwrite, errwrite):
- startupinfo.dwFlags = startupinfo.dwFlags | STARTF_USESTDHANDLES
- startupinfo.hStdInput = p2cread
- startupinfo.hStdOutput = c2pwrite
- startupinfo.hStdError = errwrite
-
- if shell:
- startupinfo.dwFlags = startupinfo.dwFlags | STARTF_USESHOWWINDOW
- startupinfo.wShowWindow = SW_HIDE
- comspec = os.environ.get("COMSPEC", "cmd.exe")
- args = comspec + " /c " + args
- if (GetVersion() >= 0x80000000L or
- os.path.basename(comspec).lower() == "command.com"):
- # Win9x, or using command.com on NT. We need to
- # use the w9xpopen intermediate program. For more
- # information, see KB Q150956
- # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
- w9xpopen = self._find_w9xpopen()
- args = '"%s" %s' % (w9xpopen, args)
- # Not passing CREATE_NEW_CONSOLE has been known to
- # cause random failures on win9x. Specifically a
- # dialog: "Your program accessed mem currently in
- # use at xxx" and a hopeful warning about the
- # stability of your system. Cost is Ctrl+C wont
- # kill children.
- creationflags = creationflags | CREATE_NEW_CONSOLE
-
- # Start the process
- try:
- hp, ht, pid, tid = CreateProcess(executable, args,
- # no special security
- None, None,
- # must inherit handles to pass std
- # handles
- 1,
- creationflags,
- env,
- cwd,
- startupinfo)
- except pywintypes.error, e:
- # Translate pywintypes.error to WindowsError, which is
- # a subclass of OSError. FIXME: We should really
- # translate errno using _sys_errlist (or simliar), but
- # how can this be done from Python?
- raise apply(WindowsError, e.args)
-
- # Retain the process handle, but close the thread handle
- self._child_created = True
- self._handle = hp
- self.pid = pid
- ht.Close()
-
- # Child is launched. Close the parent's copy of those pipe
- # handles that only the child should have open. You need
- # to make sure that no handles to the write end of the
- # output pipe are maintained in this process or else the
- # pipe will not close when the child process exits and the
- # ReadFile will hang.
- if p2cread is not None:
- p2cread.Close()
- if c2pwrite is not None:
- c2pwrite.Close()
- if errwrite is not None:
- errwrite.Close()
-
-
- def poll(self, _deadstate=None):
- """Check if child process has terminated. Returns returncode
- attribute."""
- if self.returncode is None:
- if WaitForSingleObject(self._handle, 0) == WAIT_OBJECT_0:
- self.returncode = GetExitCodeProcess(self._handle)
- return self.returncode
-
-
- def wait(self):
- """Wait for child process to terminate. Returns returncode
- attribute."""
- if self.returncode is None:
- obj = WaitForSingleObject(self._handle, INFINITE)
- self.returncode = GetExitCodeProcess(self._handle)
- return self.returncode
-
-
- def _readerthread(self, fh, buffer):
- buffer.append(fh.read())
-
-
- def _communicate(self, input):
- stdout = None # Return
- stderr = None # Return
-
- if self.stdout:
- stdout = []
- stdout_thread = threading.Thread(target=self._readerthread,
- args=(self.stdout, stdout))
- stdout_thread.setDaemon(True)
- stdout_thread.start()
- if self.stderr:
- stderr = []
- stderr_thread = threading.Thread(target=self._readerthread,
- args=(self.stderr, stderr))
- stderr_thread.setDaemon(True)
- stderr_thread.start()
-
- if self.stdin:
- if input is not None:
- self.stdin.write(input)
- self.stdin.close()
-
- if self.stdout:
- stdout_thread.join()
- if self.stderr:
- stderr_thread.join()
-
- # All data exchanged. Translate lists into strings.
- if stdout is not None:
- stdout = stdout[0]
- if stderr is not None:
- stderr = stderr[0]
-
- # Translate newlines, if requested. We cannot let the file
- # object do the translation: It is based on stdio, which is
- # impossible to combine with select (unless forcing no
- # buffering).
- if self.universal_newlines and hasattr(file, 'newlines'):
- if stdout:
- stdout = self._translate_newlines(stdout)
- if stderr:
- stderr = self._translate_newlines(stderr)
-
- self.wait()
- return (stdout, stderr)
-
- else:
- #
- # POSIX methods
- #
- def _get_handles(self, stdin, stdout, stderr):
- """Construct and return tupel with IO objects:
- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
- """
- p2cread, p2cwrite = None, None
- c2pread, c2pwrite = None, None
- errread, errwrite = None, None
-
- if stdin is None:
- pass
- elif stdin == PIPE:
- p2cread, p2cwrite = os.pipe()
- elif is_int(stdin):
- p2cread = stdin
- else:
- # Assuming file-like object
- p2cread = stdin.fileno()
-
- if stdout is None:
- pass
- elif stdout == PIPE:
- c2pread, c2pwrite = os.pipe()
- elif is_int(stdout):
- c2pwrite = stdout
- else:
- # Assuming file-like object
- c2pwrite = stdout.fileno()
-
- if stderr is None:
- pass
- elif stderr == PIPE:
- errread, errwrite = os.pipe()
- elif stderr == STDOUT:
- errwrite = c2pwrite
- elif is_int(stderr):
- errwrite = stderr
- else:
- # Assuming file-like object
- errwrite = stderr.fileno()
-
- return (p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
-
- def _set_cloexec_flag(self, fd):
- try:
- cloexec_flag = fcntl.FD_CLOEXEC
- except AttributeError:
- cloexec_flag = 1
-
- old = fcntl.fcntl(fd, fcntl.F_GETFD)
- fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
-
-
- def _close_fds(self, but):
- for i in xrange(3, MAXFD):
- if i == but:
- continue
- try:
- os.close(i)
- except KeyboardInterrupt:
- raise # SCons: don't swallow keyboard interrupts
- except:
- pass
-
-
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- cwd, env, universal_newlines,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite):
- """Execute program (POSIX version)"""
-
- if is_string(args):
- args = [args]
-
- if shell:
- args = ["/bin/sh", "-c"] + args
-
- if executable is None:
- executable = args[0]
-
- # For transferring possible exec failure from child to parent
- # The first char specifies the exception type: 0 means
- # OSError, 1 means some other error.
- errpipe_read, errpipe_write = os.pipe()
- self._set_cloexec_flag(errpipe_write)
-
- self.pid = os.fork()
- self._child_created = True
- if self.pid == 0:
- # Child
- try:
- # Close parent's pipe ends
- if p2cwrite:
- os.close(p2cwrite)
- if c2pread:
- os.close(c2pread)
- if errread:
- os.close(errread)
- os.close(errpipe_read)
-
- # Dup fds for child
- if p2cread:
- os.dup2(p2cread, 0)
- if c2pwrite:
- os.dup2(c2pwrite, 1)
- if errwrite:
- os.dup2(errwrite, 2)
-
- # Close pipe fds. Make sure we don't close the same
- # fd more than once, or standard fds.
- try:
- set
- except NameError:
- # Fall-back for earlier Python versions, so epydoc
- # can use this module directly to execute things.
- if p2cread:
- os.close(p2cread)
- if c2pwrite and c2pwrite not in (p2cread,):
- os.close(c2pwrite)
- if errwrite and errwrite not in (p2cread, c2pwrite):
- os.close(errwrite)
- else:
- for fd in set((p2cread, c2pwrite, errwrite))-set((0,1,2)):
- if fd: os.close(fd)
-
- # Close all other fds, if asked for
- if close_fds:
- self._close_fds(but=errpipe_write)
-
- if cwd is not None:
- os.chdir(cwd)
-
- if preexec_fn:
- apply(preexec_fn)
-
- if env is None:
- os.execvp(executable, args)
- else:
- os.execvpe(executable, args, env)
-
- except KeyboardInterrupt:
- raise # SCons: don't swallow keyboard interrupts
-
- except:
- exc_type, exc_value, tb = sys.exc_info()
- # Save the traceback and attach it to the exception object
- exc_lines = traceback.format_exception(exc_type,
- exc_value,
- tb)
- exc_value.child_traceback = string.join(exc_lines, '')
- os.write(errpipe_write, pickle.dumps(exc_value))
-
- # This exitcode won't be reported to applications, so it
- # really doesn't matter what we return.
- os._exit(255)
-
- # Parent
- os.close(errpipe_write)
- if p2cread and p2cwrite:
- os.close(p2cread)
- if c2pwrite and c2pread:
- os.close(c2pwrite)
- if errwrite and errread:
- os.close(errwrite)
-
- # Wait for exec to fail or succeed; possibly raising exception
- data = os.read(errpipe_read, 1048576) # Exceptions limited to 1 MB
- os.close(errpipe_read)
- if data != "":
- os.waitpid(self.pid, 0)
- child_exception = pickle.loads(data)
- raise child_exception
-
-
- def _handle_exitstatus(self, sts):
- if os.WIFSIGNALED(sts):
- self.returncode = -os.WTERMSIG(sts)
- elif os.WIFEXITED(sts):
- self.returncode = os.WEXITSTATUS(sts)
- else:
- # Should never happen
- raise RuntimeError("Unknown child exit status!")
-
-
- def poll(self, _deadstate=None):
- """Check if child process has terminated. Returns returncode
- attribute."""
- if self.returncode is None:
- try:
- pid, sts = os.waitpid(self.pid, os.WNOHANG)
- if pid == self.pid:
- self._handle_exitstatus(sts)
- except os.error:
- if _deadstate is not None:
- self.returncode = _deadstate
- return self.returncode
-
-
- def wait(self):
- """Wait for child process to terminate. Returns returncode
- attribute."""
- if self.returncode is None:
- pid, sts = os.waitpid(self.pid, 0)
- self._handle_exitstatus(sts)
- return self.returncode
-
-
- def _communicate(self, input):
- read_set = []
- write_set = []
- stdout = None # Return
- stderr = None # Return
-
- if self.stdin:
- # Flush stdio buffer. This might block, if the user has
- # been writing to .stdin in an uncontrolled fashion.
- self.stdin.flush()
- if input:
- write_set.append(self.stdin)
- else:
- self.stdin.close()
- if self.stdout:
- read_set.append(self.stdout)
- stdout = []
- if self.stderr:
- read_set.append(self.stderr)
- stderr = []
-
- input_offset = 0
- while read_set or write_set:
- rlist, wlist, xlist = select.select(read_set, write_set, [])
-
- if self.stdin in wlist:
- # When select has indicated that the file is writable,
- # we can write up to PIPE_BUF bytes without risk
- # blocking. POSIX defines PIPE_BUF >= 512
- bytes_written = os.write(self.stdin.fileno(), buffer(input, input_offset, 512))
- input_offset = input_offset + bytes_written
- if input_offset >= len(input):
- self.stdin.close()
- write_set.remove(self.stdin)
-
- if self.stdout in rlist:
- data = os.read(self.stdout.fileno(), 1024)
- if data == "":
- self.stdout.close()
- read_set.remove(self.stdout)
- stdout.append(data)
-
- if self.stderr in rlist:
- data = os.read(self.stderr.fileno(), 1024)
- if data == "":
- self.stderr.close()
- read_set.remove(self.stderr)
- stderr.append(data)
-
- # All data exchanged. Translate lists into strings.
- if stdout is not None:
- stdout = string.join(stdout, '')
- if stderr is not None:
- stderr = string.join(stderr, '')
-
- # Translate newlines, if requested. We cannot let the file
- # object do the translation: It is based on stdio, which is
- # impossible to combine with select (unless forcing no
- # buffering).
- if self.universal_newlines and hasattr(file, 'newlines'):
- if stdout:
- stdout = self._translate_newlines(stdout)
- if stderr:
- stderr = self._translate_newlines(stderr)
-
- self.wait()
- return (stdout, stderr)
-
-
-def _demo_posix():
- #
- # Example 1: Simple redirection: Get process list
- #
- plist = Popen(["ps"], stdout=PIPE).communicate()[0]
- print "Process list:"
- print plist
-
- #
- # Example 2: Change uid before executing child
- #
- if os.getuid() == 0:
- p = Popen(["id"], preexec_fn=lambda: os.setuid(100))
- p.wait()
-
- #
- # Example 3: Connecting several subprocesses
- #
- print "Looking for 'hda'..."
- p1 = Popen(["dmesg"], stdout=PIPE)
- p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
- print repr(p2.communicate()[0])
-
- #
- # Example 4: Catch execution error
- #
- print
- print "Trying a weird file..."
- try:
- print Popen(["/this/path/does/not/exist"]).communicate()
- except OSError, e:
- if e.errno == errno.ENOENT:
- print "The file didn't exist. I thought so..."
- print "Child traceback:"
- print e.child_traceback
- else:
- print "Error", e.errno
- else:
- sys.stderr.write( "Gosh. No error.\n" )
-
-
-def _demo_windows():
- #
- # Example 1: Connecting several subprocesses
- #
- print "Looking for 'PROMPT' in set output..."
- p1 = Popen("set", stdout=PIPE, shell=True)
- p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE)
- print repr(p2.communicate()[0])
-
- #
- # Example 2: Simple execution of program
- #
- print "Executing calc..."
- p = Popen("calc")
- p.wait()
-
-
-if __name__ == "__main__":
- if mswindows:
- _demo_windows()
- else:
- _demo_posix()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/_scons_textwrap.py b/3rdParty/SCons/scons-local/SCons/compat/_scons_textwrap.py
deleted file mode 100644
index 81781af..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/_scons_textwrap.py
+++ /dev/null
@@ -1,382 +0,0 @@
-"""Text wrapping and filling.
-"""
-
-# Copyright (C) 1999-2001 Gregory P. Ward.
-# Copyright (C) 2002, 2003 Python Software Foundation.
-# Written by Greg Ward <gward@python.net>
-
-__revision__ = "$Id: textwrap.py,v 1.32.8.2 2004/05/13 01:48:15 gward Exp $"
-
-import string, re
-
-try:
- unicode
-except NameError:
- class unicode:
- pass
-
-# Do the right thing with boolean values for all known Python versions
-# (so this module can be copied to projects that don't depend on Python
-# 2.3, e.g. Optik and Docutils).
-try:
- True, False
-except NameError:
- (True, False) = (1, 0)
-
-__all__ = ['TextWrapper', 'wrap', 'fill']
-
-# Hardcode the recognized whitespace characters to the US-ASCII
-# whitespace characters. The main reason for doing this is that in
-# ISO-8859-1, 0xa0 is non-breaking whitespace, so in certain locales
-# that character winds up in string.whitespace. Respecting
-# string.whitespace in those cases would 1) make textwrap treat 0xa0 the
-# same as any other whitespace char, which is clearly wrong (it's a
-# *non-breaking* space), 2) possibly cause problems with Unicode,
-# since 0xa0 is not in range(128).
-_whitespace = '\t\n\x0b\x0c\r '
-
-class TextWrapper:
- """
- Object for wrapping/filling text. The public interface consists of
- the wrap() and fill() methods; the other methods are just there for
- subclasses to override in order to tweak the default behaviour.
- If you want to completely replace the main wrapping algorithm,
- you'll probably have to override _wrap_chunks().
-
- Several instance attributes control various aspects of wrapping:
- width (default: 70)
- the maximum width of wrapped lines (unless break_long_words
- is false)
- initial_indent (default: "")
- string that will be prepended to the first line of wrapped
- output. Counts towards the line's width.
- subsequent_indent (default: "")
- string that will be prepended to all lines save the first
- of wrapped output; also counts towards each line's width.
- expand_tabs (default: true)
- Expand tabs in input text to spaces before further processing.
- Each tab will become 1 .. 8 spaces, depending on its position in
- its line. If false, each tab is treated as a single character.
- replace_whitespace (default: true)
- Replace all whitespace characters in the input text by spaces
- after tab expansion. Note that if expand_tabs is false and
- replace_whitespace is true, every tab will be converted to a
- single space!
- fix_sentence_endings (default: false)
- Ensure that sentence-ending punctuation is always followed
- by two spaces. Off by default because the algorithm is
- (unavoidably) imperfect.
- break_long_words (default: true)
- Break words longer than 'width'. If false, those words will not
- be broken, and some lines might be longer than 'width'.
- """
-
- whitespace_trans = string.maketrans(_whitespace, ' ' * len(_whitespace))
-
- unicode_whitespace_trans = {}
- try:
- uspace = eval("ord(u' ')")
- except SyntaxError:
- # Python1.5 doesn't understand u'' syntax, in which case we
- # won't actually use the unicode translation below, so it
- # doesn't matter what value we put in the table.
- uspace = ord(' ')
- for x in map(ord, _whitespace):
- unicode_whitespace_trans[x] = uspace
-
- # This funky little regex is just the trick for splitting
- # text up into word-wrappable chunks. E.g.
- # "Hello there -- you goof-ball, use the -b option!"
- # splits into
- # Hello/ /there/ /--/ /you/ /goof-/ball,/ /use/ /the/ /-b/ /option!
- # (after stripping out empty strings).
- try:
- wordsep_re = re.compile(r'(\s+|' # any whitespace
- r'[^\s\w]*\w{2,}-(?=\w{2,})|' # hyphenated words
- r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))') # em-dash
- except re.error:
- # Pre-2.0 Python versions don't have the (?<= negative look-behind
- # assertion. It mostly doesn't matter for the simple input
- # SCons is going to give it, so just leave it out.
- wordsep_re = re.compile(r'(\s+|' # any whitespace
- r'-*\w{2,}-(?=\w{2,}))') # hyphenated words
-
- # XXX will there be a locale-or-charset-aware version of
- # string.lowercase in 2.3?
- sentence_end_re = re.compile(r'[%s]' # lowercase letter
- r'[\.\!\?]' # sentence-ending punct.
- r'[\"\']?' # optional end-of-quote
- % string.lowercase)
-
-
- def __init__(self,
- width=70,
- initial_indent="",
- subsequent_indent="",
- expand_tabs=True,
- replace_whitespace=True,
- fix_sentence_endings=False,
- break_long_words=True):
- self.width = width
- self.initial_indent = initial_indent
- self.subsequent_indent = subsequent_indent
- self.expand_tabs = expand_tabs
- self.replace_whitespace = replace_whitespace
- self.fix_sentence_endings = fix_sentence_endings
- self.break_long_words = break_long_words
-
-
- # -- Private methods -----------------------------------------------
- # (possibly useful for subclasses to override)
-
- def _munge_whitespace(self, text):
- """_munge_whitespace(text : string) -> string
-
- Munge whitespace in text: expand tabs and convert all other
- whitespace characters to spaces. Eg. " foo\tbar\n\nbaz"
- becomes " foo bar baz".
- """
- if self.expand_tabs:
- text = string.expandtabs(text)
- if self.replace_whitespace:
- if type(text) == type(''):
- text = string.translate(text, self.whitespace_trans)
- elif isinstance(text, unicode):
- text = string.translate(text, self.unicode_whitespace_trans)
- return text
-
-
- def _split(self, text):
- """_split(text : string) -> [string]
-
- Split the text to wrap into indivisible chunks. Chunks are
- not quite the same as words; see wrap_chunks() for full
- details. As an example, the text
- Look, goof-ball -- use the -b option!
- breaks into the following chunks:
- 'Look,', ' ', 'goof-', 'ball', ' ', '--', ' ',
- 'use', ' ', 'the', ' ', '-b', ' ', 'option!'
- """
- chunks = self.wordsep_re.split(text)
- chunks = filter(None, chunks)
- return chunks
-
- def _fix_sentence_endings(self, chunks):
- """_fix_sentence_endings(chunks : [string])
-
- Correct for sentence endings buried in 'chunks'. Eg. when the
- original text contains "... foo.\nBar ...", munge_whitespace()
- and split() will convert that to [..., "foo.", " ", "Bar", ...]
- which has one too few spaces; this method simply changes the one
- space to two.
- """
- i = 0
- pat = self.sentence_end_re
- while i < len(chunks)-1:
- if chunks[i+1] == " " and pat.search(chunks[i]):
- chunks[i+1] = " "
- i = i + 2
- else:
- i = i + 1
-
- def _handle_long_word(self, chunks, cur_line, cur_len, width):
- """_handle_long_word(chunks : [string],
- cur_line : [string],
- cur_len : int, width : int)
-
- Handle a chunk of text (most likely a word, not whitespace) that
- is too long to fit in any line.
- """
- space_left = max(width - cur_len, 1)
-
- # If we're allowed to break long words, then do so: put as much
- # of the next chunk onto the current line as will fit.
- if self.break_long_words:
- cur_line.append(chunks[0][0:space_left])
- chunks[0] = chunks[0][space_left:]
-
- # Otherwise, we have to preserve the long word intact. Only add
- # it to the current line if there's nothing already there --
- # that minimizes how much we violate the width constraint.
- elif not cur_line:
- cur_line.append(chunks.pop(0))
-
- # If we're not allowed to break long words, and there's already
- # text on the current line, do nothing. Next time through the
- # main loop of _wrap_chunks(), we'll wind up here again, but
- # cur_len will be zero, so the next line will be entirely
- # devoted to the long word that we can't handle right now.
-
- def _wrap_chunks(self, chunks):
- """_wrap_chunks(chunks : [string]) -> [string]
-
- Wrap a sequence of text chunks and return a list of lines of
- length 'self.width' or less. (If 'break_long_words' is false,
- some lines may be longer than this.) Chunks correspond roughly
- to words and the whitespace between them: each chunk is
- indivisible (modulo 'break_long_words'), but a line break can
- come between any two chunks. Chunks should not have internal
- whitespace; ie. a chunk is either all whitespace or a "word".
- Whitespace chunks will be removed from the beginning and end of
- lines, but apart from that whitespace is preserved.
- """
- lines = []
- if self.width <= 0:
- raise ValueError("invalid width %r (must be > 0)" % self.width)
-
- while chunks:
-
- # Start the list of chunks that will make up the current line.
- # cur_len is just the length of all the chunks in cur_line.
- cur_line = []
- cur_len = 0
-
- # Figure out which static string will prefix this line.
- if lines:
- indent = self.subsequent_indent
- else:
- indent = self.initial_indent
-
- # Maximum width for this line.
- width = self.width - len(indent)
-
- # First chunk on line is whitespace -- drop it, unless this
- # is the very beginning of the text (ie. no lines started yet).
- if string.strip(chunks[0]) == '' and lines:
- del chunks[0]
-
- while chunks:
- l = len(chunks[0])
-
- # Can at least squeeze this chunk onto the current line.
- if cur_len + l <= width:
- cur_line.append(chunks.pop(0))
- cur_len = cur_len + l
-
- # Nope, this line is full.
- else:
- break
-
- # The current line is full, and the next chunk is too big to
- # fit on *any* line (not just this one).
- if chunks and len(chunks[0]) > width:
- self._handle_long_word(chunks, cur_line, cur_len, width)
-
- # If the last chunk on this line is all whitespace, drop it.
- if cur_line and string.strip(cur_line[-1]) == '':
- del cur_line[-1]
-
- # Convert current line back to a string and store it in list
- # of all lines (return value).
- if cur_line:
- lines.append(indent + string.join(cur_line, ''))
-
- return lines
-
-
- # -- Public interface ----------------------------------------------
-
- def wrap(self, text):
- """wrap(text : string) -> [string]
-
- Reformat the single paragraph in 'text' so it fits in lines of
- no more than 'self.width' columns, and return a list of wrapped
- lines. Tabs in 'text' are expanded with string.expandtabs(),
- and all other whitespace characters (including newline) are
- converted to space.
- """
- text = self._munge_whitespace(text)
- indent = self.initial_indent
- chunks = self._split(text)
- if self.fix_sentence_endings:
- self._fix_sentence_endings(chunks)
- return self._wrap_chunks(chunks)
-
- def fill(self, text):
- """fill(text : string) -> string
-
- Reformat the single paragraph in 'text' to fit in lines of no
- more than 'self.width' columns, and return a new string
- containing the entire wrapped paragraph.
- """
- return string.join(self.wrap(text), "\n")
-
-
-# -- Convenience interface ---------------------------------------------
-
-def wrap(text, width=70, **kwargs):
- """Wrap a single paragraph of text, returning a list of wrapped lines.
-
- Reformat the single paragraph in 'text' so it fits in lines of no
- more than 'width' columns, and return a list of wrapped lines. By
- default, tabs in 'text' are expanded with string.expandtabs(), and
- all other whitespace characters (including newline) are converted to
- space. See TextWrapper class for available keyword args to customize
- wrapping behaviour.
- """
- kw = kwargs.copy()
- kw['width'] = width
- w = apply(TextWrapper, (), kw)
- return w.wrap(text)
-
-def fill(text, width=70, **kwargs):
- """Fill a single paragraph of text, returning a new string.
-
- Reformat the single paragraph in 'text' to fit in lines of no more
- than 'width' columns, and return a new string containing the entire
- wrapped paragraph. As with wrap(), tabs are expanded and other
- whitespace characters converted to space. See TextWrapper class for
- available keyword args to customize wrapping behaviour.
- """
- kw = kwargs.copy()
- kw['width'] = width
- w = apply(TextWrapper, (), kw)
- return w.fill(text)
-
-
-# -- Loosely related functionality -------------------------------------
-
-def dedent(text):
- """dedent(text : string) -> string
-
- Remove any whitespace than can be uniformly removed from the left
- of every line in `text`.
-
- This can be used e.g. to make triple-quoted strings line up with
- the left edge of screen/whatever, while still presenting it in the
- source code in indented form.
-
- For example:
-
- def test():
- # end first line with \ to avoid the empty line!
- s = '''\
- hello
- world
- '''
- print repr(s) # prints ' hello\n world\n '
- print repr(dedent(s)) # prints 'hello\n world\n'
- """
- lines = text.expandtabs().split('\n')
- margin = None
- for line in lines:
- content = line.lstrip()
- if not content:
- continue
- indent = len(line) - len(content)
- if margin is None:
- margin = indent
- else:
- margin = min(margin, indent)
-
- if margin is not None and margin > 0:
- for i in range(len(lines)):
- lines[i] = lines[i][margin:]
-
- return string.join(lines, '\n')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/compat/builtins.py b/3rdParty/SCons/scons-local/SCons/compat/builtins.py
deleted file mode 100644
index f7267ca..0000000
--- a/3rdParty/SCons/scons-local/SCons/compat/builtins.py
+++ /dev/null
@@ -1,187 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-# Portions of the following are derived from the compat.py file in
-# Twisted, under the following copyright:
-#
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories
-
-__doc__ = """
-Compatibility idioms for __builtin__ names
-
-This module adds names to the __builtin__ module for things that we want
-to use in SCons but which don't show up until later Python versions than
-the earliest ones we support.
-
-This module checks for the following __builtin__ names:
-
- all()
- any()
- bool()
- dict()
- True
- False
- zip()
-
-Implementations of functions are *NOT* guaranteed to be fully compliant
-with these functions in later versions of Python. We are only concerned
-with adding functionality that we actually use in SCons, so be wary
-if you lift this code for other uses. (That said, making these more
-nearly the same as later, official versions is still a desirable goal,
-we just don't need to be obsessive about it.)
-
-If you're looking at this with pydoc and various names don't show up in
-the FUNCTIONS or DATA output, that means those names are already built in
-to this version of Python and we don't need to add them from this module.
-"""
-
-__revision__ = "src/engine/SCons/compat/builtins.py 4043 2009/02/23 09:06:45 scons"
-
-import __builtin__
-
-try:
- all
-except NameError:
- # Pre-2.5 Python has no all() function.
- def all(iterable):
- """
- Returns True if all elements of the iterable are true.
- """
- for element in iterable:
- if not element:
- return False
- return True
- __builtin__.all = all
- all = all
-
-try:
- any
-except NameError:
- # Pre-2.5 Python has no any() function.
- def any(iterable):
- """
- Returns True if any element of the iterable is true.
- """
- for element in iterable:
- if element:
- return True
- return False
- __builtin__.any = any
- any = any
-
-try:
- bool
-except NameError:
- # Pre-2.2 Python has no bool() function.
- def bool(value):
- """Demote a value to 0 or 1, depending on its truth value.
-
- This is not to be confused with types.BooleanType, which is
- way too hard to duplicate in early Python versions to be
- worth the trouble.
- """
- return not not value
- __builtin__.bool = bool
- bool = bool
-
-try:
- dict
-except NameError:
- # Pre-2.2 Python has no dict() keyword.
- def dict(seq=[], **kwargs):
- """
- New dictionary initialization.
- """
- d = {}
- for k, v in seq:
- d[k] = v
- d.update(kwargs)
- return d
- __builtin__.dict = dict
-
-try:
- False
-except NameError:
- # Pre-2.2 Python has no False keyword.
- __builtin__.False = not 1
- # Assign to False in this module namespace so it shows up in pydoc output.
- False = False
-
-try:
- True
-except NameError:
- # Pre-2.2 Python has no True keyword.
- __builtin__.True = not 0
- # Assign to True in this module namespace so it shows up in pydoc output.
- True = True
-
-try:
- file
-except NameError:
- # Pre-2.2 Python has no file() function.
- __builtin__.file = open
-
-#
-try:
- zip
-except NameError:
- # Pre-2.2 Python has no zip() function.
- def zip(*lists):
- """
- Emulates the behavior we need from the built-in zip() function
- added in Python 2.2.
-
- Returns a list of tuples, where each tuple contains the i-th
- element rom each of the argument sequences. The returned
- list is truncated in length to the length of the shortest
- argument sequence.
- """
- result = []
- for i in xrange(min(map(len, lists))):
- result.append(tuple(map(lambda l, i=i: l[i], lists)))
- return result
- __builtin__.zip = zip
-
-
-
-#if sys.version_info[:3] in ((2, 2, 0), (2, 2, 1)):
-# def lstrip(s, c=string.whitespace):
-# while s and s[0] in c:
-# s = s[1:]
-# return s
-# def rstrip(s, c=string.whitespace):
-# while s and s[-1] in c:
-# s = s[:-1]
-# return s
-# def strip(s, c=string.whitespace, l=lstrip, r=rstrip):
-# return l(r(s, c), c)
-#
-# object.__setattr__(str, 'lstrip', lstrip)
-# object.__setattr__(str, 'rstrip', rstrip)
-# object.__setattr__(str, 'strip', strip)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/cpp.py b/3rdParty/SCons/scons-local/SCons/cpp.py
deleted file mode 100644
index 006a9b4..0000000
--- a/3rdParty/SCons/scons-local/SCons/cpp.py
+++ /dev/null
@@ -1,598 +0,0 @@
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/cpp.py 4043 2009/02/23 09:06:45 scons"
-
-__doc__ = """
-SCons C Pre-Processor module
-"""
-
-# TODO(1.5): remove this import
-# This module doesn't use anything from SCons by name, but we import SCons
-# here to pull in zip() from the SCons.compat layer for early Pythons.
-import SCons
-
-import os
-import re
-import string
-
-#
-# First "subsystem" of regular expressions that we set up:
-#
-# Stuff to turn the C preprocessor directives in a file's contents into
-# a list of tuples that we can process easily.
-#
-
-# A table of regular expressions that fetch the arguments from the rest of
-# a C preprocessor line. Different directives have different arguments
-# that we want to fetch, using the regular expressions to which the lists
-# of preprocessor directives map.
-cpp_lines_dict = {
- # Fetch the rest of a #if/#elif/#ifdef/#ifndef as one argument,
- # separated from the keyword by white space.
- ('if', 'elif', 'ifdef', 'ifndef',)
- : '\s+(.+)',
-
- # Fetch the rest of a #import/#include/#include_next line as one
- # argument, with white space optional.
- ('import', 'include', 'include_next',)
- : '\s*(.+)',
-
- # We don't care what comes after a #else or #endif line.
- ('else', 'endif',) : '',
-
- # Fetch three arguments from a #define line:
- # 1) The #defined keyword.
- # 2) The optional parentheses and arguments (if it's a function-like
- # macro, '' if it's not).
- # 3) The expansion value.
- ('define',) : '\s+([_A-Za-z][_A-Za-z0-9_]+)(\([^)]*\))?\s*(.*)',
-
- # Fetch the #undefed keyword from a #undef line.
- ('undef',) : '\s+([_A-Za-z][A-Za-z0-9_]+)',
-}
-
-# Create a table that maps each individual C preprocessor directive to
-# the corresponding compiled regular expression that fetches the arguments
-# we care about.
-Table = {}
-for op_list, expr in cpp_lines_dict.items():
- e = re.compile(expr)
- for op in op_list:
- Table[op] = e
-del e
-del op
-del op_list
-
-# Create a list of the expressions we'll use to match all of the
-# preprocessor directives. These are the same as the directives
-# themselves *except* that we must use a negative lookahead assertion
-# when matching "if" so it doesn't match the "if" in "ifdef."
-override = {
- 'if' : 'if(?!def)',
-}
-l = map(lambda x, o=override: o.get(x, x), Table.keys())
-
-
-# Turn the list of expressions into one big honkin' regular expression
-# that will match all the preprocessor lines at once. This will return
-# a list of tuples, one for each preprocessor line. The preprocessor
-# directive will be the first element in each tuple, and the rest of
-# the line will be the second element.
-e = '^\s*#\s*(' + string.join(l, '|') + ')(.*)$'
-
-# And last but not least, compile the expression.
-CPP_Expression = re.compile(e, re.M)
-
-
-
-
-#
-# Second "subsystem" of regular expressions that we set up:
-#
-# Stuff to translate a C preprocessor expression (as found on a #if or
-# #elif line) into an equivalent Python expression that we can eval().
-#
-
-# A dictionary that maps the C representation of Boolean operators
-# to their Python equivalents.
-CPP_to_Python_Ops_Dict = {
- '!' : ' not ',
- '!=' : ' != ',
- '&&' : ' and ',
- '||' : ' or ',
- '?' : ' and ',
- ':' : ' or ',
- '\r' : '',
-}
-
-CPP_to_Python_Ops_Sub = lambda m, d=CPP_to_Python_Ops_Dict: d[m.group(0)]
-
-# We have to sort the keys by length so that longer expressions
-# come *before* shorter expressions--in particular, "!=" must
-# come before "!" in the alternation. Without this, the Python
-# re module, as late as version 2.2.2, empirically matches the
-# "!" in "!=" first, instead of finding the longest match.
-# What's up with that?
-l = CPP_to_Python_Ops_Dict.keys()
-l.sort(lambda a, b: cmp(len(b), len(a)))
-
-# Turn the list of keys into one regular expression that will allow us
-# to substitute all of the operators at once.
-expr = string.join(map(re.escape, l), '|')
-
-# ...and compile the expression.
-CPP_to_Python_Ops_Expression = re.compile(expr)
-
-# A separate list of expressions to be evaluated and substituted
-# sequentially, not all at once.
-CPP_to_Python_Eval_List = [
- ['defined\s+(\w+)', '__dict__.has_key("\\1")'],
- ['defined\s*\((\w+)\)', '__dict__.has_key("\\1")'],
- ['/\*.*\*/', ''],
- ['/\*.*', ''],
- ['//.*', ''],
- ['(0x[0-9A-Fa-f]*)[UL]+', '\\1L'],
-]
-
-# Replace the string representations of the regular expressions in the
-# list with compiled versions.
-for l in CPP_to_Python_Eval_List:
- l[0] = re.compile(l[0])
-
-# Wrap up all of the above into a handy function.
-def CPP_to_Python(s):
- """
- Converts a C pre-processor expression into an equivalent
- Python expression that can be evaluated.
- """
- s = CPP_to_Python_Ops_Expression.sub(CPP_to_Python_Ops_Sub, s)
- for expr, repl in CPP_to_Python_Eval_List:
- s = expr.sub(repl, s)
- return s
-
-
-
-del expr
-del l
-del override
-
-
-
-class FunctionEvaluator:
- """
- Handles delayed evaluation of a #define function call.
- """
- def __init__(self, name, args, expansion):
- """
- Squirrels away the arguments and expansion value of a #define
- macro function for later evaluation when we must actually expand
- a value that uses it.
- """
- self.name = name
- self.args = function_arg_separator.split(args)
- try:
- expansion = string.split(expansion, '##')
- except (AttributeError, TypeError):
- # Python 1.5 throws TypeError if "expansion" isn't a string,
- # later versions throw AttributeError.
- pass
- self.expansion = expansion
- def __call__(self, *values):
- """
- Evaluates the expansion of a #define macro function called
- with the specified values.
- """
- if len(self.args) != len(values):
- raise ValueError, "Incorrect number of arguments to `%s'" % self.name
- # Create a dictionary that maps the macro arguments to the
- # corresponding values in this "call." We'll use this when we
- # eval() the expansion so that arguments will get expanded to
- # the right values.
- locals = {}
- for k, v in zip(self.args, values):
- locals[k] = v
-
- parts = []
- for s in self.expansion:
- if not s in self.args:
- s = repr(s)
- parts.append(s)
- statement = string.join(parts, ' + ')
-
- return eval(statement, globals(), locals)
-
-
-
-# Find line continuations.
-line_continuations = re.compile('\\\\\r?\n')
-
-# Search for a "function call" macro on an expansion. Returns the
-# two-tuple of the "function" name itself, and a string containing the
-# arguments within the call parentheses.
-function_name = re.compile('(\S+)\(([^)]*)\)')
-
-# Split a string containing comma-separated function call arguments into
-# the separate arguments.
-function_arg_separator = re.compile(',\s*')
-
-
-
-class PreProcessor:
- """
- The main workhorse class for handling C pre-processing.
- """
- def __init__(self, current=os.curdir, cpppath=(), dict={}, all=0):
- global Table
-
- cpppath = tuple(cpppath)
-
- self.searchpath = {
- '"' : (current,) + cpppath,
- '<' : cpppath + (current,),
- }
-
- # Initialize our C preprocessor namespace for tracking the
- # values of #defined keywords. We use this namespace to look
- # for keywords on #ifdef/#ifndef lines, and to eval() the
- # expressions on #if/#elif lines (after massaging them from C to
- # Python).
- self.cpp_namespace = dict.copy()
- self.cpp_namespace['__dict__'] = self.cpp_namespace
-
- if all:
- self.do_include = self.all_include
-
- # For efficiency, a dispatch table maps each C preprocessor
- # directive (#if, #define, etc.) to the method that should be
- # called when we see it. We accomodate state changes (#if,
- # #ifdef, #ifndef) by pushing the current dispatch table on a
- # stack and changing what method gets called for each relevant
- # directive we might see next at this level (#else, #elif).
- # #endif will simply pop the stack.
- d = {
- 'scons_current_file' : self.scons_current_file
- }
- for op in Table.keys():
- d[op] = getattr(self, 'do_' + op)
- self.default_table = d
-
- # Controlling methods.
-
- def tupleize(self, contents):
- """
- Turns the contents of a file into a list of easily-processed
- tuples describing the CPP lines in the file.
-
- The first element of each tuple is the line's preprocessor
- directive (#if, #include, #define, etc., minus the initial '#').
- The remaining elements are specific to the type of directive, as
- pulled apart by the regular expression.
- """
- global CPP_Expression, Table
- contents = line_continuations.sub('', contents)
- cpp_tuples = CPP_Expression.findall(contents)
- return map(lambda m, t=Table:
- (m[0],) + t[m[0]].match(m[1]).groups(),
- cpp_tuples)
-
- def __call__(self, file):
- """
- Pre-processes a file.
-
- This is the main public entry point.
- """
- self.current_file = file
- return self.process_contents(self.read_file(file), file)
-
- def process_contents(self, contents, fname=None):
- """
- Pre-processes a file contents.
-
- This is the main internal entry point.
- """
- self.stack = []
- self.dispatch_table = self.default_table.copy()
- self.current_file = fname
- self.tuples = self.tupleize(contents)
-
- self.initialize_result(fname)
- while self.tuples:
- t = self.tuples.pop(0)
- # Uncomment to see the list of tuples being processed (e.g.,
- # to validate the CPP lines are being translated correctly).
- #print t
- self.dispatch_table[t[0]](t)
- return self.finalize_result(fname)
-
- # Dispatch table stack manipulation methods.
-
- def save(self):
- """
- Pushes the current dispatch table on the stack and re-initializes
- the current dispatch table to the default.
- """
- self.stack.append(self.dispatch_table)
- self.dispatch_table = self.default_table.copy()
-
- def restore(self):
- """
- Pops the previous dispatch table off the stack and makes it the
- current one.
- """
- try: self.dispatch_table = self.stack.pop()
- except IndexError: pass
-
- # Utility methods.
-
- def do_nothing(self, t):
- """
- Null method for when we explicitly want the action for a
- specific preprocessor directive to do nothing.
- """
- pass
-
- def scons_current_file(self, t):
- self.current_file = t[1]
-
- def eval_expression(self, t):
- """
- Evaluates a C preprocessor expression.
-
- This is done by converting it to a Python equivalent and
- eval()ing it in the C preprocessor namespace we use to
- track #define values.
- """
- t = CPP_to_Python(string.join(t[1:]))
- try: return eval(t, self.cpp_namespace)
- except (NameError, TypeError): return 0
-
- def initialize_result(self, fname):
- self.result = [fname]
-
- def finalize_result(self, fname):
- return self.result[1:]
-
- def find_include_file(self, t):
- """
- Finds the #include file for a given preprocessor tuple.
- """
- fname = t[2]
- for d in self.searchpath[t[1]]:
- if d == os.curdir:
- f = fname
- else:
- f = os.path.join(d, fname)
- if os.path.isfile(f):
- return f
- return None
-
- def read_file(self, file):
- return open(file).read()
-
- # Start and stop processing include lines.
-
- def start_handling_includes(self, t=None):
- """
- Causes the PreProcessor object to start processing #import,
- #include and #include_next lines.
-
- This method will be called when a #if, #ifdef, #ifndef or #elif
- evaluates True, or when we reach the #else in a #if, #ifdef,
- #ifndef or #elif block where a condition already evaluated
- False.
-
- """
- d = self.dispatch_table
- d['import'] = self.do_import
- d['include'] = self.do_include
- d['include_next'] = self.do_include
-
- def stop_handling_includes(self, t=None):
- """
- Causes the PreProcessor object to stop processing #import,
- #include and #include_next lines.
-
- This method will be called when a #if, #ifdef, #ifndef or #elif
- evaluates False, or when we reach the #else in a #if, #ifdef,
- #ifndef or #elif block where a condition already evaluated True.
- """
- d = self.dispatch_table
- d['import'] = self.do_nothing
- d['include'] = self.do_nothing
- d['include_next'] = self.do_nothing
-
- # Default methods for handling all of the preprocessor directives.
- # (Note that what actually gets called for a given directive at any
- # point in time is really controlled by the dispatch_table.)
-
- def _do_if_else_condition(self, condition):
- """
- Common logic for evaluating the conditions on #if, #ifdef and
- #ifndef lines.
- """
- self.save()
- d = self.dispatch_table
- if condition:
- self.start_handling_includes()
- d['elif'] = self.stop_handling_includes
- d['else'] = self.stop_handling_includes
- else:
- self.stop_handling_includes()
- d['elif'] = self.do_elif
- d['else'] = self.start_handling_includes
-
- def do_ifdef(self, t):
- """
- Default handling of a #ifdef line.
- """
- self._do_if_else_condition(self.cpp_namespace.has_key(t[1]))
-
- def do_ifndef(self, t):
- """
- Default handling of a #ifndef line.
- """
- self._do_if_else_condition(not self.cpp_namespace.has_key(t[1]))
-
- def do_if(self, t):
- """
- Default handling of a #if line.
- """
- self._do_if_else_condition(self.eval_expression(t))
-
- def do_elif(self, t):
- """
- Default handling of a #elif line.
- """
- d = self.dispatch_table
- if self.eval_expression(t):
- self.start_handling_includes()
- d['elif'] = self.stop_handling_includes
- d['else'] = self.stop_handling_includes
-
- def do_else(self, t):
- """
- Default handling of a #else line.
- """
- pass
-
- def do_endif(self, t):
- """
- Default handling of a #endif line.
- """
- self.restore()
-
- def do_define(self, t):
- """
- Default handling of a #define line.
- """
- _, name, args, expansion = t
- try:
- expansion = int(expansion)
- except (TypeError, ValueError):
- pass
- if args:
- evaluator = FunctionEvaluator(name, args[1:-1], expansion)
- self.cpp_namespace[name] = evaluator
- else:
- self.cpp_namespace[name] = expansion
-
- def do_undef(self, t):
- """
- Default handling of a #undef line.
- """
- try: del self.cpp_namespace[t[1]]
- except KeyError: pass
-
- def do_import(self, t):
- """
- Default handling of a #import line.
- """
- # XXX finish this -- maybe borrow/share logic from do_include()...?
- pass
-
- def do_include(self, t):
- """
- Default handling of a #include line.
- """
- t = self.resolve_include(t)
- include_file = self.find_include_file(t)
- if include_file:
- #print "include_file =", include_file
- self.result.append(include_file)
- contents = self.read_file(include_file)
- new_tuples = [('scons_current_file', include_file)] + \
- self.tupleize(contents) + \
- [('scons_current_file', self.current_file)]
- self.tuples[:] = new_tuples + self.tuples
-
- # Date: Tue, 22 Nov 2005 20:26:09 -0500
- # From: Stefan Seefeld <seefeld@sympatico.ca>
- #
- # By the way, #include_next is not the same as #include. The difference
- # being that #include_next starts its search in the path following the
- # path that let to the including file. In other words, if your system
- # include paths are ['/foo', '/bar'], and you are looking at a header
- # '/foo/baz.h', it might issue an '#include_next <baz.h>' which would
- # correctly resolve to '/bar/baz.h' (if that exists), but *not* see
- # '/foo/baz.h' again. See http://www.delorie.com/gnu/docs/gcc/cpp_11.html
- # for more reasoning.
- #
- # I have no idea in what context 'import' might be used.
-
- # XXX is #include_next really the same as #include ?
- do_include_next = do_include
-
- # Utility methods for handling resolution of include files.
-
- def resolve_include(self, t):
- """Resolve a tuple-ized #include line.
-
- This handles recursive expansion of values without "" or <>
- surrounding the name until an initial " or < is found, to handle
- #include FILE
- where FILE is a #define somewhere else.
- """
- s = t[1]
- while not s[0] in '<"':
- #print "s =", s
- try:
- s = self.cpp_namespace[s]
- except KeyError:
- m = function_name.search(s)
- s = self.cpp_namespace[m.group(1)]
- if callable(s):
- args = function_arg_separator.split(m.group(2))
- s = apply(s, args)
- if not s:
- return None
- return (t[0], s[0], s[1:-1])
-
- def all_include(self, t):
- """
- """
- self.result.append(self.resolve_include(t))
-
-class DumbPreProcessor(PreProcessor):
- """A preprocessor that ignores all #if/#elif/#else/#endif directives
- and just reports back *all* of the #include files (like the classic
- SCons scanner did).
-
- This is functionally equivalent to using a regular expression to
- find all of the #include lines, only slower. It exists mainly as
- an example of how the main PreProcessor class can be sub-classed
- to tailor its behavior.
- """
- def __init__(self, *args, **kw):
- apply(PreProcessor.__init__, (self,)+args, kw)
- d = self.default_table
- for func in ['if', 'elif', 'else', 'endif', 'ifdef', 'ifndef']:
- d[func] = d[func] = self.do_nothing
-
-del __revision__
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/dblite.py b/3rdParty/SCons/scons-local/SCons/dblite.py
deleted file mode 100644
index 6d4cfd5..0000000
--- a/3rdParty/SCons/scons-local/SCons/dblite.py
+++ /dev/null
@@ -1,225 +0,0 @@
-# dblite.py module contributed by Ralf W. Grosse-Kunstleve.
-# Extended for Unicode by Steven Knight.
-
-import cPickle
-import time
-import shutil
-import os
-import types
-import __builtin__
-
-keep_all_files = 00000
-ignore_corrupt_dbfiles = 0
-
-def corruption_warning(filename):
- print "Warning: Discarding corrupt database:", filename
-
-if hasattr(types, 'UnicodeType'):
- def is_string(s):
- t = type(s)
- return t is types.StringType or t is types.UnicodeType
-else:
- def is_string(s):
- return type(s) is types.StringType
-
-try:
- unicode('a')
-except NameError:
- def unicode(s): return s
-
-dblite_suffix = '.dblite'
-tmp_suffix = '.tmp'
-
-class dblite:
-
- # Squirrel away references to the functions in various modules
- # that we'll use when our __del__() method calls our sync() method
- # during shutdown. We might get destroyed when Python is in the midst
- # of tearing down the different modules we import in an essentially
- # arbitrary order, and some of the various modules's global attributes
- # may already be wiped out from under us.
- #
- # See the discussion at:
- # http://mail.python.org/pipermail/python-bugs-list/2003-March/016877.html
-
- _open = __builtin__.open
- _cPickle_dump = cPickle.dump
- _os_chmod = os.chmod
- _os_rename = os.rename
- _os_unlink = os.unlink
- _shutil_copyfile = shutil.copyfile
- _time_time = time.time
-
- def __init__(self, file_base_name, flag, mode):
- assert flag in (None, "r", "w", "c", "n")
- if (flag is None): flag = "r"
- base, ext = os.path.splitext(file_base_name)
- if ext == dblite_suffix:
- # There's already a suffix on the file name, don't add one.
- self._file_name = file_base_name
- self._tmp_name = base + tmp_suffix
- else:
- self._file_name = file_base_name + dblite_suffix
- self._tmp_name = file_base_name + tmp_suffix
- self._flag = flag
- self._mode = mode
- self._dict = {}
- self._needs_sync = 00000
- if (self._flag == "n"):
- self._open(self._file_name, "wb", self._mode)
- else:
- try:
- f = self._open(self._file_name, "rb")
- except IOError, e:
- if (self._flag != "c"):
- raise e
- self._open(self._file_name, "wb", self._mode)
- else:
- p = f.read()
- if (len(p) > 0):
- try:
- self._dict = cPickle.loads(p)
- except (cPickle.UnpicklingError, EOFError):
- if (ignore_corrupt_dbfiles == 0): raise
- if (ignore_corrupt_dbfiles == 1):
- corruption_warning(self._file_name)
-
- def __del__(self):
- if (self._needs_sync):
- self.sync()
-
- def sync(self):
- self._check_writable()
- f = self._open(self._tmp_name, "wb", self._mode)
- self._cPickle_dump(self._dict, f, 1)
- f.close()
- # Windows doesn't allow renaming if the file exists, so unlink
- # it first, chmod'ing it to make sure we can do so. On UNIX, we
- # may not be able to chmod the file if it's owned by someone else
- # (e.g. from a previous run as root). We should still be able to
- # unlink() the file if the directory's writable, though, so ignore
- # any OSError exception thrown by the chmod() call.
- try: self._os_chmod(self._file_name, 0777)
- except OSError: pass
- self._os_unlink(self._file_name)
- self._os_rename(self._tmp_name, self._file_name)
- self._needs_sync = 00000
- if (keep_all_files):
- self._shutil_copyfile(
- self._file_name,
- self._file_name + "_" + str(int(self._time_time())))
-
- def _check_writable(self):
- if (self._flag == "r"):
- raise IOError("Read-only database: %s" % self._file_name)
-
- def __getitem__(self, key):
- return self._dict[key]
-
- def __setitem__(self, key, value):
- self._check_writable()
- if (not is_string(key)):
- raise TypeError, "key `%s' must be a string but is %s" % (key, type(key))
- if (not is_string(value)):
- raise TypeError, "value `%s' must be a string but is %s" % (value, type(value))
- self._dict[key] = value
- self._needs_sync = 0001
-
- def keys(self):
- return self._dict.keys()
-
- def has_key(self, key):
- return key in self._dict
-
- def __contains__(self, key):
- return key in self._dict
-
- def iterkeys(self):
- return self._dict.iterkeys()
-
- __iter__ = iterkeys
-
- def __len__(self):
- return len(self._dict)
-
-def open(file, flag=None, mode=0666):
- return dblite(file, flag, mode)
-
-def _exercise():
- db = open("tmp", "n")
- assert len(db) == 0
- db["foo"] = "bar"
- assert db["foo"] == "bar"
- db[unicode("ufoo")] = unicode("ubar")
- assert db[unicode("ufoo")] == unicode("ubar")
- db.sync()
- db = open("tmp", "c")
- assert len(db) == 2, len(db)
- assert db["foo"] == "bar"
- db["bar"] = "foo"
- assert db["bar"] == "foo"
- db[unicode("ubar")] = unicode("ufoo")
- assert db[unicode("ubar")] == unicode("ufoo")
- db.sync()
- db = open("tmp", "r")
- assert len(db) == 4, len(db)
- assert db["foo"] == "bar"
- assert db["bar"] == "foo"
- assert db[unicode("ufoo")] == unicode("ubar")
- assert db[unicode("ubar")] == unicode("ufoo")
- try:
- db.sync()
- except IOError, e:
- assert str(e) == "Read-only database: tmp.dblite"
- else:
- raise RuntimeError, "IOError expected."
- db = open("tmp", "w")
- assert len(db) == 4
- db["ping"] = "pong"
- db.sync()
- try:
- db[(1,2)] = "tuple"
- except TypeError, e:
- assert str(e) == "key `(1, 2)' must be a string but is <type 'tuple'>", str(e)
- else:
- raise RuntimeError, "TypeError exception expected"
- try:
- db["list"] = [1,2]
- except TypeError, e:
- assert str(e) == "value `[1, 2]' must be a string but is <type 'list'>", str(e)
- else:
- raise RuntimeError, "TypeError exception expected"
- db = open("tmp", "r")
- assert len(db) == 5
- db = open("tmp", "n")
- assert len(db) == 0
- _open("tmp.dblite", "w")
- db = open("tmp", "r")
- _open("tmp.dblite", "w").write("x")
- try:
- db = open("tmp", "r")
- except cPickle.UnpicklingError:
- pass
- else:
- raise RuntimeError, "cPickle exception expected."
- global ignore_corrupt_dbfiles
- ignore_corrupt_dbfiles = 2
- db = open("tmp", "r")
- assert len(db) == 0
- os.unlink("tmp.dblite")
- try:
- db = open("tmp", "w")
- except IOError, e:
- assert str(e) == "[Errno 2] No such file or directory: 'tmp.dblite'", str(e)
- else:
- raise RuntimeError, "IOError expected."
- print "OK"
-
-if (__name__ == "__main__"):
- _exercise()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-local/SCons/exitfuncs.py b/3rdParty/SCons/scons-local/SCons/exitfuncs.py
deleted file mode 100644
index ef244b5..0000000
--- a/3rdParty/SCons/scons-local/SCons/exitfuncs.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""SCons.exitfuncs
-
-Register functions which are executed when SCons exits for any reason.
-
-"""
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/engine/SCons/exitfuncs.py 4043 2009/02/23 09:06:45 scons"
-
-
-
-_exithandlers = []
-def _run_exitfuncs():
- """run any registered exit functions
-
- _exithandlers is traversed in reverse order so functions are executed
- last in, first out.
- """
-
- while _exithandlers:
- func, targs, kargs = _exithandlers.pop()
- apply(func, targs, kargs)
-
-def register(func, *targs, **kargs):
- """register a function to be executed upon normal program termination
-
- func - function to be called at exit
- targs - optional arguments to pass to func
- kargs - optional keyword arguments to pass to func
- """
- _exithandlers.append((func, targs, kargs))
-
-import sys
-
-try:
- x = sys.exitfunc
-
- # if x isn't our own exit func executive, assume it's another
- # registered exit function - append it to our list...
- if x != _run_exitfuncs:
- register(x)
-
-except AttributeError:
- pass
-
-# make our exit function get run by python when it exits:
-sys.exitfunc = _run_exitfuncs
-
-del sys
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons-time.py b/3rdParty/SCons/scons-time.py
deleted file mode 100755
index cbe8c42..0000000
--- a/3rdParty/SCons/scons-time.py
+++ /dev/null
@@ -1,1519 +0,0 @@
-#!/usr/bin/env python
-#
-# scons-time - run SCons timings and collect statistics
-#
-# A script for running a configuration through SCons with a standard
-# set of invocations to collect timing and memory statistics and to
-# capture the results in a consistent set of output files for display
-# and analysis.
-#
-
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-from __future__ import nested_scopes
-
-__revision__ = "src/script/scons-time.py 4043 2009/02/23 09:06:45 scons"
-
-import getopt
-import glob
-import os
-import os.path
-import re
-import shutil
-import string
-import sys
-import tempfile
-import time
-
-try:
- False
-except NameError:
- # Pre-2.2 Python has no False keyword.
- import __builtin__
- __builtin__.False = not 1
-
-try:
- True
-except NameError:
- # Pre-2.2 Python has no True keyword.
- import __builtin__
- __builtin__.True = not 0
-
-def make_temp_file(**kw):
- try:
- result = tempfile.mktemp(**kw)
- try:
- result = os.path.realpath(result)
- except AttributeError:
- # Python 2.1 has no os.path.realpath() method.
- pass
- except TypeError:
- try:
- save_template = tempfile.template
- prefix = kw['prefix']
- del kw['prefix']
- tempfile.template = prefix
- result = tempfile.mktemp(**kw)
- finally:
- tempfile.template = save_template
- return result
-
-class Plotter:
- def increment_size(self, largest):
- """
- Return the size of each horizontal increment line for a specified
- maximum value. This returns a value that will provide somewhere
- between 5 and 9 horizontal lines on the graph, on some set of
- boundaries that are multiples of 10/100/1000/etc.
- """
- i = largest / 5
- if not i:
- return largest
- multiplier = 1
- while i >= 10:
- i = i / 10
- multiplier = multiplier * 10
- return i * multiplier
-
- def max_graph_value(self, largest):
- # Round up to next integer.
- largest = int(largest) + 1
- increment = self.increment_size(largest)
- return ((largest + increment - 1) / increment) * increment
-
-class Line:
- def __init__(self, points, type, title, label, comment, fmt="%s %s"):
- self.points = points
- self.type = type
- self.title = title
- self.label = label
- self.comment = comment
- self.fmt = fmt
-
- def print_label(self, inx, x, y):
- if self.label:
- print 'set label %s "%s" at %s,%s right' % (inx, self.label, x, y)
-
- def plot_string(self):
- if self.title:
- title_string = 'title "%s"' % self.title
- else:
- title_string = 'notitle'
- return "'-' %s with lines lt %s" % (title_string, self.type)
-
- def print_points(self, fmt=None):
- if fmt is None:
- fmt = self.fmt
- if self.comment:
- print '# %s' % self.comment
- for x, y in self.points:
- # If y is None, it usually represents some kind of break
- # in the line's index number. We might want to represent
- # this some way rather than just drawing the line straight
- # between the two points on either side.
- if not y is None:
- print fmt % (x, y)
- print 'e'
-
- def get_x_values(self):
- return [ p[0] for p in self.points ]
-
- def get_y_values(self):
- return [ p[1] for p in self.points ]
-
-class Gnuplotter(Plotter):
-
- def __init__(self, title, key_location):
- self.lines = []
- self.title = title
- self.key_location = key_location
-
- def line(self, points, type, title=None, label=None, comment=None, fmt='%s %s'):
- if points:
- line = Line(points, type, title, label, comment, fmt)
- self.lines.append(line)
-
- def plot_string(self, line):
- return line.plot_string()
-
- def vertical_bar(self, x, type, label, comment):
- if self.get_min_x() <= x and x <= self.get_max_x():
- points = [(x, 0), (x, self.max_graph_value(self.get_max_y()))]
- self.line(points, type, label, comment)
-
- def get_all_x_values(self):
- result = []
- for line in self.lines:
- result.extend(line.get_x_values())
- return filter(lambda r: not r is None, result)
-
- def get_all_y_values(self):
- result = []
- for line in self.lines:
- result.extend(line.get_y_values())
- return filter(lambda r: not r is None, result)
-
- def get_min_x(self):
- try:
- return self.min_x
- except AttributeError:
- try:
- self.min_x = min(self.get_all_x_values())
- except ValueError:
- self.min_x = 0
- return self.min_x
-
- def get_max_x(self):
- try:
- return self.max_x
- except AttributeError:
- try:
- self.max_x = max(self.get_all_x_values())
- except ValueError:
- self.max_x = 0
- return self.max_x
-
- def get_min_y(self):
- try:
- return self.min_y
- except AttributeError:
- try:
- self.min_y = min(self.get_all_y_values())
- except ValueError:
- self.min_y = 0
- return self.min_y
-
- def get_max_y(self):
- try:
- return self.max_y
- except AttributeError:
- try:
- self.max_y = max(self.get_all_y_values())
- except ValueError:
- self.max_y = 0
- return self.max_y
-
- def draw(self):
-
- if not self.lines:
- return
-
- if self.title:
- print 'set title "%s"' % self.title
- print 'set key %s' % self.key_location
-
- min_y = self.get_min_y()
- max_y = self.max_graph_value(self.get_max_y())
- range = max_y - min_y
- incr = range / 10.0
- start = min_y + (max_y / 2.0) + (2.0 * incr)
- position = [ start - (i * incr) for i in xrange(5) ]
-
- inx = 1
- for line in self.lines:
- line.print_label(inx, line.points[0][0]-1,
- position[(inx-1) % len(position)])
- inx += 1
-
- plot_strings = [ self.plot_string(l) for l in self.lines ]
- print 'plot ' + ', \\\n '.join(plot_strings)
-
- for line in self.lines:
- line.print_points()
-
-
-
-def untar(fname):
- import tarfile
- tar = tarfile.open(name=fname, mode='r')
- for tarinfo in tar:
- tar.extract(tarinfo)
- tar.close()
-
-def unzip(fname):
- import zipfile
- zf = zipfile.ZipFile(fname, 'r')
- for name in zf.namelist():
- dir = os.path.dirname(name)
- try:
- os.makedirs(dir)
- except:
- pass
- open(name, 'w').write(zf.read(name))
-
-def read_tree(dir):
- def read_files(arg, dirname, fnames):
- for fn in fnames:
- fn = os.path.join(dirname, fn)
- if os.path.isfile(fn):
- open(fn, 'rb').read()
- os.path.walk('.', read_files, None)
-
-def redirect_to_file(command, log):
- return '%s > %s 2>&1' % (command, log)
-
-def tee_to_file(command, log):
- return '%s 2>&1 | tee %s' % (command, log)
-
-
-
-class SConsTimer:
- """
- Usage: scons-time SUBCOMMAND [ARGUMENTS]
- Type "scons-time help SUBCOMMAND" for help on a specific subcommand.
-
- Available subcommands:
- func Extract test-run data for a function
- help Provides help
- mem Extract --debug=memory data from test runs
- obj Extract --debug=count data from test runs
- time Extract --debug=time data from test runs
- run Runs a test configuration
- """
-
- name = 'scons-time'
- name_spaces = ' '*len(name)
-
- def makedict(**kw):
- return kw
-
- default_settings = makedict(
- aegis = 'aegis',
- aegis_project = None,
- chdir = None,
- config_file = None,
- initial_commands = [],
- key_location = 'bottom left',
- orig_cwd = os.getcwd(),
- outdir = None,
- prefix = '',
- python = '"%s"' % sys.executable,
- redirect = redirect_to_file,
- scons = None,
- scons_flags = '--debug=count --debug=memory --debug=time --debug=memoizer',
- scons_lib_dir = None,
- scons_wrapper = None,
- startup_targets = '--help',
- subdir = None,
- subversion_url = None,
- svn = 'svn',
- svn_co_flag = '-q',
- tar = 'tar',
- targets = '',
- targets0 = None,
- targets1 = None,
- targets2 = None,
- title = None,
- unzip = 'unzip',
- verbose = False,
- vertical_bars = [],
-
- unpack_map = {
- '.tar.gz' : (untar, '%(tar)s xzf %%s'),
- '.tgz' : (untar, '%(tar)s xzf %%s'),
- '.tar' : (untar, '%(tar)s xf %%s'),
- '.zip' : (unzip, '%(unzip)s %%s'),
- },
- )
-
- run_titles = [
- 'Startup',
- 'Full build',
- 'Up-to-date build',
- ]
-
- run_commands = [
- '%(python)s %(scons_wrapper)s %(scons_flags)s --profile=%(prof0)s %(targets0)s',
- '%(python)s %(scons_wrapper)s %(scons_flags)s --profile=%(prof1)s %(targets1)s',
- '%(python)s %(scons_wrapper)s %(scons_flags)s --profile=%(prof2)s %(targets2)s',
- ]
-
- stages = [
- 'pre-read',
- 'post-read',
- 'pre-build',
- 'post-build',
- ]
-
- stage_strings = {
- 'pre-read' : 'Memory before reading SConscript files:',
- 'post-read' : 'Memory after reading SConscript files:',
- 'pre-build' : 'Memory before building targets:',
- 'post-build' : 'Memory after building targets:',
- }
-
- memory_string_all = 'Memory '
-
- default_stage = stages[-1]
-
- time_strings = {
- 'total' : 'Total build time',
- 'SConscripts' : 'Total SConscript file execution time',
- 'SCons' : 'Total SCons execution time',
- 'commands' : 'Total command execution time',
- }
-
- time_string_all = 'Total .* time'
-
- #
-
- def __init__(self):
- self.__dict__.update(self.default_settings)
-
- # Functions for displaying and executing commands.
-
- def subst(self, x, dictionary):
- try:
- return x % dictionary
- except TypeError:
- # x isn't a string (it's probably a Python function),
- # so just return it.
- return x
-
- def subst_variables(self, command, dictionary):
- """
- Substitutes (via the format operator) the values in the specified
- dictionary into the specified command.
-
- The command can be an (action, string) tuple. In all cases, we
- perform substitution on strings and don't worry if something isn't
- a string. (It's probably a Python function to be executed.)
- """
- try:
- command + ''
- except TypeError:
- action = command[0]
- string = command[1]
- args = command[2:]
- else:
- action = command
- string = action
- args = (())
- action = self.subst(action, dictionary)
- string = self.subst(string, dictionary)
- return (action, string, args)
-
- def _do_not_display(self, msg, *args):
- pass
-
- def display(self, msg, *args):
- """
- Displays the specified message.
-
- Each message is prepended with a standard prefix of our name
- plus the time.
- """
- if callable(msg):
- msg = msg(*args)
- else:
- msg = msg % args
- if msg is None:
- return
- fmt = '%s[%s]: %s\n'
- sys.stdout.write(fmt % (self.name, time.strftime('%H:%M:%S'), msg))
-
- def _do_not_execute(self, action, *args):
- pass
-
- def execute(self, action, *args):
- """
- Executes the specified action.
-
- The action is called if it's a callable Python function, and
- otherwise passed to os.system().
- """
- if callable(action):
- action(*args)
- else:
- os.system(action % args)
-
- def run_command_list(self, commands, dict):
- """
- Executes a list of commands, substituting values from the
- specified dictionary.
- """
- commands = [ self.subst_variables(c, dict) for c in commands ]
- for action, string, args in commands:
- self.display(string, *args)
- sys.stdout.flush()
- status = self.execute(action, *args)
- if status:
- sys.exit(status)
-
- def log_display(self, command, log):
- command = self.subst(command, self.__dict__)
- if log:
- command = self.redirect(command, log)
- return command
-
- def log_execute(self, command, log):
- command = self.subst(command, self.__dict__)
- output = os.popen(command).read()
- if self.verbose:
- sys.stdout.write(output)
- open(log, 'wb').write(output)
-
- #
-
- def archive_splitext(self, path):
- """
- Splits an archive name into a filename base and extension.
-
- This is like os.path.splitext() (which it calls) except that it
- also looks for '.tar.gz' and treats it as an atomic extensions.
- """
- if path.endswith('.tar.gz'):
- return path[:-7], path[-7:]
- else:
- return os.path.splitext(path)
-
- def args_to_files(self, args, tail=None):
- """
- Takes a list of arguments, expands any glob patterns, and
- returns the last "tail" files from the list.
- """
- files = []
- for a in args:
- g = glob.glob(a)
- g.sort()
- files.extend(g)
-
- if tail:
- files = files[-tail:]
-
- return files
-
- def ascii_table(self, files, columns,
- line_function, file_function=lambda x: x,
- *args, **kw):
-
- header_fmt = ' '.join(['%12s'] * len(columns))
- line_fmt = header_fmt + ' %s'
-
- print header_fmt % columns
-
- for file in files:
- t = line_function(file, *args, **kw)
- if t is None:
- t = []
- diff = len(columns) - len(t)
- if diff > 0:
- t += [''] * diff
- t.append(file_function(file))
- print line_fmt % tuple(t)
-
- def collect_results(self, files, function, *args, **kw):
- results = {}
-
- for file in files:
- base = os.path.splitext(file)[0]
- run, index = string.split(base, '-')[-2:]
-
- run = int(run)
- index = int(index)
-
- value = function(file, *args, **kw)
-
- try:
- r = results[index]
- except KeyError:
- r = []
- results[index] = r
- r.append((run, value))
-
- return results
-
- def doc_to_help(self, obj):
- """
- Translates an object's __doc__ string into help text.
-
- This strips a consistent number of spaces from each line in the
- help text, essentially "outdenting" the text to the left-most
- column.
- """
- doc = obj.__doc__
- if doc is None:
- return ''
- return self.outdent(doc)
-
- def find_next_run_number(self, dir, prefix):
- """
- Returns the next run number in a directory for the specified prefix.
-
- Examines the contents the specified directory for files with the
- specified prefix, extracts the run numbers from each file name,
- and returns the next run number after the largest it finds.
- """
- x = re.compile(re.escape(prefix) + '-([0-9]+).*')
- matches = map(lambda e, x=x: x.match(e), os.listdir(dir))
- matches = filter(None, matches)
- if not matches:
- return 0
- run_numbers = map(lambda m: int(m.group(1)), matches)
- return int(max(run_numbers)) + 1
-
- def gnuplot_results(self, results, fmt='%s %.3f'):
- """
- Prints out a set of results in Gnuplot format.
- """
- gp = Gnuplotter(self.title, self.key_location)
-
- indices = results.keys()
- indices.sort()
-
- for i in indices:
- try:
- t = self.run_titles[i]
- except IndexError:
- t = '??? %s ???' % i
- results[i].sort()
- gp.line(results[i], i+1, t, None, t, fmt=fmt)
-
- for bar_tuple in self.vertical_bars:
- try:
- x, type, label, comment = bar_tuple
- except ValueError:
- x, type, label = bar_tuple
- comment = label
- gp.vertical_bar(x, type, label, comment)
-
- gp.draw()
-
- def logfile_name(self, invocation):
- """
- Returns the absolute path of a log file for the specificed
- invocation number.
- """
- name = self.prefix_run + '-%d.log' % invocation
- return os.path.join(self.outdir, name)
-
- def outdent(self, s):
- """
- Strip as many spaces from each line as are found at the beginning
- of the first line in the list.
- """
- lines = s.split('\n')
- if lines[0] == '':
- lines = lines[1:]
- spaces = re.match(' *', lines[0]).group(0)
- def strip_initial_spaces(l, s=spaces):
- if l.startswith(spaces):
- l = l[len(spaces):]
- return l
- return '\n'.join([ strip_initial_spaces(l) for l in lines ]) + '\n'
-
- def profile_name(self, invocation):
- """
- Returns the absolute path of a profile file for the specified
- invocation number.
- """
- name = self.prefix_run + '-%d.prof' % invocation
- return os.path.join(self.outdir, name)
-
- def set_env(self, key, value):
- os.environ[key] = value
-
- #
-
- def get_debug_times(self, file, time_string=None):
- """
- Fetch times from the --debug=time strings in the specified file.
- """
- if time_string is None:
- search_string = self.time_string_all
- else:
- search_string = time_string
- contents = open(file).read()
- if not contents:
- sys.stderr.write('file %s has no contents!\n' % repr(file))
- return None
- result = re.findall(r'%s: ([\d\.]*)' % search_string, contents)[-4:]
- result = [ float(r) for r in result ]
- if not time_string is None:
- try:
- result = result[0]
- except IndexError:
- sys.stderr.write('file %s has no results!\n' % repr(file))
- return None
- return result
-
- def get_function_profile(self, file, function):
- """
- Returns the file, line number, function name, and cumulative time.
- """
- try:
- import pstats
- except ImportError, e:
- sys.stderr.write('%s: func: %s\n' % (self.name, e))
- sys.stderr.write('%s This version of Python is missing the profiler.\n' % self.name_spaces)
- sys.stderr.write('%s Cannot use the "func" subcommand.\n' % self.name_spaces)
- sys.exit(1)
- statistics = pstats.Stats(file).stats
- matches = [ e for e in statistics.items() if e[0][2] == function ]
- r = matches[0]
- return r[0][0], r[0][1], r[0][2], r[1][3]
-
- def get_function_time(self, file, function):
- """
- Returns just the cumulative time for the specified function.
- """
- return self.get_function_profile(file, function)[3]
-
- def get_memory(self, file, memory_string=None):
- """
- Returns a list of integers of the amount of memory used. The
- default behavior is to return all the stages.
- """
- if memory_string is None:
- search_string = self.memory_string_all
- else:
- search_string = memory_string
- lines = open(file).readlines()
- lines = [ l for l in lines if l.startswith(search_string) ][-4:]
- result = [ int(l.split()[-1]) for l in lines[-4:] ]
- if len(result) == 1:
- result = result[0]
- return result
-
- def get_object_counts(self, file, object_name, index=None):
- """
- Returns the counts of the specified object_name.
- """
- object_string = ' ' + object_name + '\n'
- lines = open(file).readlines()
- line = [ l for l in lines if l.endswith(object_string) ][0]
- result = [ int(field) for field in line.split()[:4] ]
- if not index is None:
- result = result[index]
- return result
-
- #
-
- command_alias = {}
-
- def execute_subcommand(self, argv):
- """
- Executes the do_*() function for the specified subcommand (argv[0]).
- """
- if not argv:
- return
- cmdName = self.command_alias.get(argv[0], argv[0])
- try:
- func = getattr(self, 'do_' + cmdName)
- except AttributeError:
- return self.default(argv)
- try:
- return func(argv)
- except TypeError, e:
- sys.stderr.write("%s %s: %s\n" % (self.name, cmdName, e))
- import traceback
- traceback.print_exc(file=sys.stderr)
- sys.stderr.write("Try '%s help %s'\n" % (self.name, cmdName))
-
- def default(self, argv):
- """
- The default behavior for an unknown subcommand. Prints an
- error message and exits.
- """
- sys.stderr.write('%s: Unknown subcommand "%s".\n' % (self.name, argv[0]))
- sys.stderr.write('Type "%s help" for usage.\n' % self.name)
- sys.exit(1)
-
- #
-
- def do_help(self, argv):
- """
- """
- if argv[1:]:
- for arg in argv[1:]:
- try:
- func = getattr(self, 'do_' + arg)
- except AttributeError:
- sys.stderr.write('%s: No help for "%s"\n' % (self.name, arg))
- else:
- try:
- help = getattr(self, 'help_' + arg)
- except AttributeError:
- sys.stdout.write(self.doc_to_help(func))
- sys.stdout.flush()
- else:
- help()
- else:
- doc = self.doc_to_help(self.__class__)
- if doc:
- sys.stdout.write(doc)
- sys.stdout.flush()
- return None
-
- #
-
- def help_func(self):
- help = """\
- Usage: scons-time func [OPTIONS] FILE [...]
-
- -C DIR, --chdir=DIR Change to DIR before looking for files
- -f FILE, --file=FILE Read configuration from specified FILE
- --fmt=FORMAT, --format=FORMAT Print data in specified FORMAT
- --func=NAME, --function=NAME Report time for function NAME
- -h, --help Print this help and exit
- -p STRING, --prefix=STRING Use STRING as log file/profile prefix
- -t NUMBER, --tail=NUMBER Only report the last NUMBER files
- --title=TITLE Specify the output plot TITLE
- """
- sys.stdout.write(self.outdent(help))
- sys.stdout.flush()
-
- def do_func(self, argv):
- """
- """
- format = 'ascii'
- function_name = '_main'
- tail = None
-
- short_opts = '?C:f:hp:t:'
-
- long_opts = [
- 'chdir=',
- 'file=',
- 'fmt=',
- 'format=',
- 'func=',
- 'function=',
- 'help',
- 'prefix=',
- 'tail=',
- 'title=',
- ]
-
- opts, args = getopt.getopt(argv[1:], short_opts, long_opts)
-
- for o, a in opts:
- if o in ('-C', '--chdir'):
- self.chdir = a
- elif o in ('-f', '--file'):
- self.config_file = a
- elif o in ('--fmt', '--format'):
- format = a
- elif o in ('--func', '--function'):
- function_name = a
- elif o in ('-?', '-h', '--help'):
- self.do_help(['help', 'func'])
- sys.exit(0)
- elif o in ('--max',):
- max_time = int(a)
- elif o in ('-p', '--prefix'):
- self.prefix = a
- elif o in ('-t', '--tail'):
- tail = int(a)
- elif o in ('--title',):
- self.title = a
-
- if self.config_file:
- execfile(self.config_file, self.__dict__)
-
- if self.chdir:
- os.chdir(self.chdir)
-
- if not args:
-
- pattern = '%s*.prof' % self.prefix
- args = self.args_to_files([pattern], tail)
-
- if not args:
- if self.chdir:
- directory = self.chdir
- else:
- directory = os.getcwd()
-
- sys.stderr.write('%s: func: No arguments specified.\n' % self.name)
- sys.stderr.write('%s No %s*.prof files found in "%s".\n' % (self.name_spaces, self.prefix, directory))
- sys.stderr.write('%s Type "%s help func" for help.\n' % (self.name_spaces, self.name))
- sys.exit(1)
-
- else:
-
- args = self.args_to_files(args, tail)
-
- cwd_ = os.getcwd() + os.sep
-
- if format == 'ascii':
-
- def print_function_timing(file, func):
- try:
- f, line, func, time = self.get_function_profile(file, func)
- except ValueError, e:
- sys.stderr.write("%s: func: %s: %s\n" % (self.name, file, e))
- else:
- if f.startswith(cwd_):
- f = f[len(cwd_):]
- print "%.3f %s:%d(%s)" % (time, f, line, func)
-
- for file in args:
- print_function_timing(file, function_name)
-
- elif format == 'gnuplot':
-
- results = self.collect_results(args, self.get_function_time,
- function_name)
-
- self.gnuplot_results(results)
-
- else:
-
- sys.stderr.write('%s: func: Unknown format "%s".\n' % (self.name, format))
- sys.exit(1)
-
- #
-
- def help_mem(self):
- help = """\
- Usage: scons-time mem [OPTIONS] FILE [...]
-
- -C DIR, --chdir=DIR Change to DIR before looking for files
- -f FILE, --file=FILE Read configuration from specified FILE
- --fmt=FORMAT, --format=FORMAT Print data in specified FORMAT
- -h, --help Print this help and exit
- -p STRING, --prefix=STRING Use STRING as log file/profile prefix
- --stage=STAGE Plot memory at the specified stage:
- pre-read, post-read, pre-build,
- post-build (default: post-build)
- -t NUMBER, --tail=NUMBER Only report the last NUMBER files
- --title=TITLE Specify the output plot TITLE
- """
- sys.stdout.write(self.outdent(help))
- sys.stdout.flush()
-
- def do_mem(self, argv):
-
- format = 'ascii'
- logfile_path = lambda x: x
- stage = self.default_stage
- tail = None
-
- short_opts = '?C:f:hp:t:'
-
- long_opts = [
- 'chdir=',
- 'file=',
- 'fmt=',
- 'format=',
- 'help',
- 'prefix=',
- 'stage=',
- 'tail=',
- 'title=',
- ]
-
- opts, args = getopt.getopt(argv[1:], short_opts, long_opts)
-
- for o, a in opts:
- if o in ('-C', '--chdir'):
- self.chdir = a
- elif o in ('-f', '--file'):
- self.config_file = a
- elif o in ('--fmt', '--format'):
- format = a
- elif o in ('-?', '-h', '--help'):
- self.do_help(['help', 'mem'])
- sys.exit(0)
- elif o in ('-p', '--prefix'):
- self.prefix = a
- elif o in ('--stage',):
- if not a in self.stages:
- sys.stderr.write('%s: mem: Unrecognized stage "%s".\n' % (self.name, a))
- sys.exit(1)
- stage = a
- elif o in ('-t', '--tail'):
- tail = int(a)
- elif o in ('--title',):
- self.title = a
-
- if self.config_file:
- execfile(self.config_file, self.__dict__)
-
- if self.chdir:
- os.chdir(self.chdir)
- logfile_path = lambda x, c=self.chdir: os.path.join(c, x)
-
- if not args:
-
- pattern = '%s*.log' % self.prefix
- args = self.args_to_files([pattern], tail)
-
- if not args:
- if self.chdir:
- directory = self.chdir
- else:
- directory = os.getcwd()
-
- sys.stderr.write('%s: mem: No arguments specified.\n' % self.name)
- sys.stderr.write('%s No %s*.log files found in "%s".\n' % (self.name_spaces, self.prefix, directory))
- sys.stderr.write('%s Type "%s help mem" for help.\n' % (self.name_spaces, self.name))
- sys.exit(1)
-
- else:
-
- args = self.args_to_files(args, tail)
-
- cwd_ = os.getcwd() + os.sep
-
- if format == 'ascii':
-
- self.ascii_table(args, tuple(self.stages), self.get_memory, logfile_path)
-
- elif format == 'gnuplot':
-
- results = self.collect_results(args, self.get_memory,
- self.stage_strings[stage])
-
- self.gnuplot_results(results)
-
- else:
-
- sys.stderr.write('%s: mem: Unknown format "%s".\n' % (self.name, format))
- sys.exit(1)
-
- return 0
-
- #
-
- def help_obj(self):
- help = """\
- Usage: scons-time obj [OPTIONS] OBJECT FILE [...]
-
- -C DIR, --chdir=DIR Change to DIR before looking for files
- -f FILE, --file=FILE Read configuration from specified FILE
- --fmt=FORMAT, --format=FORMAT Print data in specified FORMAT
- -h, --help Print this help and exit
- -p STRING, --prefix=STRING Use STRING as log file/profile prefix
- --stage=STAGE Plot memory at the specified stage:
- pre-read, post-read, pre-build,
- post-build (default: post-build)
- -t NUMBER, --tail=NUMBER Only report the last NUMBER files
- --title=TITLE Specify the output plot TITLE
- """
- sys.stdout.write(self.outdent(help))
- sys.stdout.flush()
-
- def do_obj(self, argv):
-
- format = 'ascii'
- logfile_path = lambda x: x
- stage = self.default_stage
- tail = None
-
- short_opts = '?C:f:hp:t:'
-
- long_opts = [
- 'chdir=',
- 'file=',
- 'fmt=',
- 'format=',
- 'help',
- 'prefix=',
- 'stage=',
- 'tail=',
- 'title=',
- ]
-
- opts, args = getopt.getopt(argv[1:], short_opts, long_opts)
-
- for o, a in opts:
- if o in ('-C', '--chdir'):
- self.chdir = a
- elif o in ('-f', '--file'):
- self.config_file = a
- elif o in ('--fmt', '--format'):
- format = a
- elif o in ('-?', '-h', '--help'):
- self.do_help(['help', 'obj'])
- sys.exit(0)
- elif o in ('-p', '--prefix'):
- self.prefix = a
- elif o in ('--stage',):
- if not a in self.stages:
- sys.stderr.write('%s: obj: Unrecognized stage "%s".\n' % (self.name, a))
- sys.stderr.write('%s Type "%s help obj" for help.\n' % (self.name_spaces, self.name))
- sys.exit(1)
- stage = a
- elif o in ('-t', '--tail'):
- tail = int(a)
- elif o in ('--title',):
- self.title = a
-
- if not args:
- sys.stderr.write('%s: obj: Must specify an object name.\n' % self.name)
- sys.stderr.write('%s Type "%s help obj" for help.\n' % (self.name_spaces, self.name))
- sys.exit(1)
-
- object_name = args.pop(0)
-
- if self.config_file:
- execfile(self.config_file, self.__dict__)
-
- if self.chdir:
- os.chdir(self.chdir)
- logfile_path = lambda x, c=self.chdir: os.path.join(c, x)
-
- if not args:
-
- pattern = '%s*.log' % self.prefix
- args = self.args_to_files([pattern], tail)
-
- if not args:
- if self.chdir:
- directory = self.chdir
- else:
- directory = os.getcwd()
-
- sys.stderr.write('%s: obj: No arguments specified.\n' % self.name)
- sys.stderr.write('%s No %s*.log files found in "%s".\n' % (self.name_spaces, self.prefix, directory))
- sys.stderr.write('%s Type "%s help obj" for help.\n' % (self.name_spaces, self.name))
- sys.exit(1)
-
- else:
-
- args = self.args_to_files(args, tail)
-
- cwd_ = os.getcwd() + os.sep
-
- if format == 'ascii':
-
- self.ascii_table(args, tuple(self.stages), self.get_object_counts, logfile_path, object_name)
-
- elif format == 'gnuplot':
-
- stage_index = 0
- for s in self.stages:
- if stage == s:
- break
- stage_index = stage_index + 1
-
- results = self.collect_results(args, self.get_object_counts,
- object_name, stage_index)
-
- self.gnuplot_results(results)
-
- else:
-
- sys.stderr.write('%s: obj: Unknown format "%s".\n' % (self.name, format))
- sys.exit(1)
-
- return 0
-
- #
-
- def help_run(self):
- help = """\
- Usage: scons-time run [OPTIONS] [FILE ...]
-
- --aegis=PROJECT Use SCons from the Aegis PROJECT
- --chdir=DIR Name of unpacked directory for chdir
- -f FILE, --file=FILE Read configuration from specified FILE
- -h, --help Print this help and exit
- -n, --no-exec No execute, just print command lines
- --number=NUMBER Put output in files for run NUMBER
- --outdir=OUTDIR Put output files in OUTDIR
- -p STRING, --prefix=STRING Use STRING as log file/profile prefix
- --python=PYTHON Time using the specified PYTHON
- -q, --quiet Don't print command lines
- --scons=SCONS Time using the specified SCONS
- --svn=URL, --subversion=URL Use SCons from Subversion URL
- -v, --verbose Display output of commands
- """
- sys.stdout.write(self.outdent(help))
- sys.stdout.flush()
-
- def do_run(self, argv):
- """
- """
- run_number_list = [None]
-
- short_opts = '?f:hnp:qs:v'
-
- long_opts = [
- 'aegis=',
- 'file=',
- 'help',
- 'no-exec',
- 'number=',
- 'outdir=',
- 'prefix=',
- 'python=',
- 'quiet',
- 'scons=',
- 'svn=',
- 'subdir=',
- 'subversion=',
- 'verbose',
- ]
-
- opts, args = getopt.getopt(argv[1:], short_opts, long_opts)
-
- for o, a in opts:
- if o in ('--aegis',):
- self.aegis_project = a
- elif o in ('-f', '--file'):
- self.config_file = a
- elif o in ('-?', '-h', '--help'):
- self.do_help(['help', 'run'])
- sys.exit(0)
- elif o in ('-n', '--no-exec'):
- self.execute = self._do_not_execute
- elif o in ('--number',):
- run_number_list = self.split_run_numbers(a)
- elif o in ('--outdir',):
- self.outdir = a
- elif o in ('-p', '--prefix'):
- self.prefix = a
- elif o in ('--python',):
- self.python = a
- elif o in ('-q', '--quiet'):
- self.display = self._do_not_display
- elif o in ('-s', '--subdir'):
- self.subdir = a
- elif o in ('--scons',):
- self.scons = a
- elif o in ('--svn', '--subversion'):
- self.subversion_url = a
- elif o in ('-v', '--verbose'):
- self.redirect = tee_to_file
- self.verbose = True
- self.svn_co_flag = ''
-
- if not args and not self.config_file:
- sys.stderr.write('%s: run: No arguments or -f config file specified.\n' % self.name)
- sys.stderr.write('%s Type "%s help run" for help.\n' % (self.name_spaces, self.name))
- sys.exit(1)
-
- if self.config_file:
- execfile(self.config_file, self.__dict__)
-
- if args:
- self.archive_list = args
-
- archive_file_name = os.path.split(self.archive_list[0])[1]
-
- if not self.subdir:
- self.subdir = self.archive_splitext(archive_file_name)[0]
-
- if not self.prefix:
- self.prefix = self.archive_splitext(archive_file_name)[0]
-
- prepare = None
- if self.subversion_url:
- prepare = self.prep_subversion_run
- elif self.aegis_project:
- prepare = self.prep_aegis_run
-
- for run_number in run_number_list:
- self.individual_run(run_number, self.archive_list, prepare)
-
- def split_run_numbers(self, s):
- result = []
- for n in s.split(','):
- try:
- x, y = n.split('-')
- except ValueError:
- result.append(int(n))
- else:
- result.extend(range(int(x), int(y)+1))
- return result
-
- def scons_path(self, dir):
- return os.path.join(dir, 'src', 'script', 'scons.py')
-
- def scons_lib_dir_path(self, dir):
- return os.path.join(dir, 'src', 'engine')
-
- def prep_aegis_run(self, commands, removals):
- self.aegis_tmpdir = make_temp_file(prefix = self.name + '-aegis-')
- removals.append((shutil.rmtree, 'rm -rf %%s', self.aegis_tmpdir))
-
- self.aegis_parent_project = os.path.splitext(self.aegis_project)[0]
- self.scons = self.scons_path(self.aegis_tmpdir)
- self.scons_lib_dir = self.scons_lib_dir_path(self.aegis_tmpdir)
-
- commands.extend([
- 'mkdir %(aegis_tmpdir)s',
- (lambda: os.chdir(self.aegis_tmpdir), 'cd %(aegis_tmpdir)s'),
- '%(aegis)s -cp -ind -p %(aegis_parent_project)s .',
- '%(aegis)s -cp -ind -p %(aegis_project)s -delta %(run_number)s .',
- ])
-
- def prep_subversion_run(self, commands, removals):
- self.svn_tmpdir = make_temp_file(prefix = self.name + '-svn-')
- removals.append((shutil.rmtree, 'rm -rf %%s', self.svn_tmpdir))
-
- self.scons = self.scons_path(self.svn_tmpdir)
- self.scons_lib_dir = self.scons_lib_dir_path(self.svn_tmpdir)
-
- commands.extend([
- 'mkdir %(svn_tmpdir)s',
- '%(svn)s co %(svn_co_flag)s -r %(run_number)s %(subversion_url)s %(svn_tmpdir)s',
- ])
-
- def individual_run(self, run_number, archive_list, prepare=None):
- """
- Performs an individual run of the default SCons invocations.
- """
-
- commands = []
- removals = []
-
- if prepare:
- prepare(commands, removals)
-
- save_scons = self.scons
- save_scons_wrapper = self.scons_wrapper
- save_scons_lib_dir = self.scons_lib_dir
-
- if self.outdir is None:
- self.outdir = self.orig_cwd
- elif not os.path.isabs(self.outdir):
- self.outdir = os.path.join(self.orig_cwd, self.outdir)
-
- if self.scons is None:
- self.scons = self.scons_path(self.orig_cwd)
-
- if self.scons_lib_dir is None:
- self.scons_lib_dir = self.scons_lib_dir_path(self.orig_cwd)
-
- if self.scons_wrapper is None:
- self.scons_wrapper = self.scons
-
- if not run_number:
- run_number = self.find_next_run_number(self.outdir, self.prefix)
-
- self.run_number = str(run_number)
-
- self.prefix_run = self.prefix + '-%03d' % run_number
-
- if self.targets0 is None:
- self.targets0 = self.startup_targets
- if self.targets1 is None:
- self.targets1 = self.targets
- if self.targets2 is None:
- self.targets2 = self.targets
-
- self.tmpdir = make_temp_file(prefix = self.name + '-')
-
- commands.extend([
- 'mkdir %(tmpdir)s',
-
- (os.chdir, 'cd %%s', self.tmpdir),
- ])
-
- for archive in archive_list:
- if not os.path.isabs(archive):
- archive = os.path.join(self.orig_cwd, archive)
- if os.path.isdir(archive):
- dest = os.path.split(archive)[1]
- commands.append((shutil.copytree, 'cp -r %%s %%s', archive, dest))
- else:
- suffix = self.archive_splitext(archive)[1]
- unpack_command = self.unpack_map.get(suffix)
- if not unpack_command:
- dest = os.path.split(archive)[1]
- commands.append((shutil.copyfile, 'cp %%s %%s', archive, dest))
- else:
- commands.append(unpack_command + (archive,))
-
- commands.extend([
- (os.chdir, 'cd %%s', self.subdir),
- ])
-
- commands.extend(self.initial_commands)
-
- commands.extend([
- (lambda: read_tree('.'),
- 'find * -type f | xargs cat > /dev/null'),
-
- (self.set_env, 'export %%s=%%s',
- 'SCONS_LIB_DIR', self.scons_lib_dir),
-
- '%(python)s %(scons_wrapper)s --version',
- ])
-
- index = 0
- for run_command in self.run_commands:
- setattr(self, 'prof%d' % index, self.profile_name(index))
- c = (
- self.log_execute,
- self.log_display,
- run_command,
- self.logfile_name(index),
- )
- commands.append(c)
- index = index + 1
-
- commands.extend([
- (os.chdir, 'cd %%s', self.orig_cwd),
- ])
-
- if not os.environ.get('PRESERVE'):
- commands.extend(removals)
-
- commands.append((shutil.rmtree, 'rm -rf %%s', self.tmpdir))
-
- self.run_command_list(commands, self.__dict__)
-
- self.scons = save_scons
- self.scons_lib_dir = save_scons_lib_dir
- self.scons_wrapper = save_scons_wrapper
-
- #
-
- def help_time(self):
- help = """\
- Usage: scons-time time [OPTIONS] FILE [...]
-
- -C DIR, --chdir=DIR Change to DIR before looking for files
- -f FILE, --file=FILE Read configuration from specified FILE
- --fmt=FORMAT, --format=FORMAT Print data in specified FORMAT
- -h, --help Print this help and exit
- -p STRING, --prefix=STRING Use STRING as log file/profile prefix
- -t NUMBER, --tail=NUMBER Only report the last NUMBER files
- --which=TIMER Plot timings for TIMER: total,
- SConscripts, SCons, commands.
- """
- sys.stdout.write(self.outdent(help))
- sys.stdout.flush()
-
- def do_time(self, argv):
-
- format = 'ascii'
- logfile_path = lambda x: x
- tail = None
- which = 'total'
-
- short_opts = '?C:f:hp:t:'
-
- long_opts = [
- 'chdir=',
- 'file=',
- 'fmt=',
- 'format=',
- 'help',
- 'prefix=',
- 'tail=',
- 'title=',
- 'which=',
- ]
-
- opts, args = getopt.getopt(argv[1:], short_opts, long_opts)
-
- for o, a in opts:
- if o in ('-C', '--chdir'):
- self.chdir = a
- elif o in ('-f', '--file'):
- self.config_file = a
- elif o in ('--fmt', '--format'):
- format = a
- elif o in ('-?', '-h', '--help'):
- self.do_help(['help', 'time'])
- sys.exit(0)
- elif o in ('-p', '--prefix'):
- self.prefix = a
- elif o in ('-t', '--tail'):
- tail = int(a)
- elif o in ('--title',):
- self.title = a
- elif o in ('--which',):
- if not a in self.time_strings.keys():
- sys.stderr.write('%s: time: Unrecognized timer "%s".\n' % (self.name, a))
- sys.stderr.write('%s Type "%s help time" for help.\n' % (self.name_spaces, self.name))
- sys.exit(1)
- which = a
-
- if self.config_file:
- execfile(self.config_file, self.__dict__)
-
- if self.chdir:
- os.chdir(self.chdir)
- logfile_path = lambda x, c=self.chdir: os.path.join(c, x)
-
- if not args:
-
- pattern = '%s*.log' % self.prefix
- args = self.args_to_files([pattern], tail)
-
- if not args:
- if self.chdir:
- directory = self.chdir
- else:
- directory = os.getcwd()
-
- sys.stderr.write('%s: time: No arguments specified.\n' % self.name)
- sys.stderr.write('%s No %s*.log files found in "%s".\n' % (self.name_spaces, self.prefix, directory))
- sys.stderr.write('%s Type "%s help time" for help.\n' % (self.name_spaces, self.name))
- sys.exit(1)
-
- else:
-
- args = self.args_to_files(args, tail)
-
- cwd_ = os.getcwd() + os.sep
-
- if format == 'ascii':
-
- columns = ("Total", "SConscripts", "SCons", "commands")
- self.ascii_table(args, columns, self.get_debug_times, logfile_path)
-
- elif format == 'gnuplot':
-
- results = self.collect_results(args, self.get_debug_times,
- self.time_strings[which])
-
- self.gnuplot_results(results, fmt='%s %.6f')
-
- else:
-
- sys.stderr.write('%s: time: Unknown format "%s".\n' % (self.name, format))
- sys.exit(1)
-
-if __name__ == '__main__':
- opts, args = getopt.getopt(sys.argv[1:], 'h?V', ['help', 'version'])
-
- ST = SConsTimer()
-
- for o, a in opts:
- if o in ('-?', '-h', '--help'):
- ST.do_help(['help'])
- sys.exit(0)
- elif o in ('-V', '--version'):
- sys.stdout.write('scons-time version\n')
- sys.exit(0)
-
- if not args:
- sys.stderr.write('Type "%s help" for usage.\n' % ST.name)
- sys.exit(1)
-
- ST.execute_subcommand(args)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/scons.py b/3rdParty/SCons/scons.py
deleted file mode 100755
index 73aa0b5..0000000
--- a/3rdParty/SCons/scons.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#! /usr/bin/env python
-#
-# SCons - a Software Constructor
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/script/scons.py 4043 2009/02/23 09:06:45 scons"
-
-__version__ = "1.2.0.d20090223"
-
-__build__ = "r4043"
-
-__buildsys__ = "scons-dev"
-
-__date__ = "2009/02/23 09:06:45"
-
-__developer__ = "scons"
-
-import os
-import os.path
-import sys
-
-##############################################################################
-# BEGIN STANDARD SCons SCRIPT HEADER
-#
-# This is the cut-and-paste logic so that a self-contained script can
-# interoperate correctly with different SCons versions and installation
-# locations for the engine. If you modify anything in this section, you
-# should also change other scripts that use this same header.
-##############################################################################
-
-# Strip the script directory from sys.path() so on case-insensitive
-# (WIN32) systems Python doesn't think that the "scons" script is the
-# "SCons" package. Replace it with our own library directories
-# (version-specific first, in case they installed by hand there,
-# followed by generic) so we pick up the right version of the build
-# engine modules if they're in either directory.
-
-script_dir = sys.path[0]
-
-if script_dir in sys.path:
- sys.path.remove(script_dir)
-
-libs = []
-
-if os.environ.has_key("SCONS_LIB_DIR"):
- libs.append(os.environ["SCONS_LIB_DIR"])
-
-local_version = 'scons-local-' + __version__
-local = 'scons-local'
-if script_dir:
- local_version = os.path.join(script_dir, local_version)
- local = os.path.join(script_dir, local)
-libs.append(os.path.abspath(local_version))
-libs.append(os.path.abspath(local))
-
-scons_version = 'scons-%s' % __version__
-
-prefs = []
-
-if sys.platform == 'win32':
- # sys.prefix is (likely) C:\Python*;
- # check only C:\Python*.
- prefs.append(sys.prefix)
- prefs.append(os.path.join(sys.prefix, 'Lib', 'site-packages'))
-else:
- # On other (POSIX) platforms, things are more complicated due to
- # the variety of path names and library locations. Try to be smart
- # about it.
- if script_dir == 'bin':
- # script_dir is `pwd`/bin;
- # check `pwd`/lib/scons*.
- prefs.append(os.getcwd())
- else:
- if script_dir == '.' or script_dir == '':
- script_dir = os.getcwd()
- head, tail = os.path.split(script_dir)
- if tail == "bin":
- # script_dir is /foo/bin;
- # check /foo/lib/scons*.
- prefs.append(head)
-
- head, tail = os.path.split(sys.prefix)
- if tail == "usr":
- # sys.prefix is /foo/usr;
- # check /foo/usr/lib/scons* first,
- # then /foo/usr/local/lib/scons*.
- prefs.append(sys.prefix)
- prefs.append(os.path.join(sys.prefix, "local"))
- elif tail == "local":
- h, t = os.path.split(head)
- if t == "usr":
- # sys.prefix is /foo/usr/local;
- # check /foo/usr/local/lib/scons* first,
- # then /foo/usr/lib/scons*.
- prefs.append(sys.prefix)
- prefs.append(head)
- else:
- # sys.prefix is /foo/local;
- # check only /foo/local/lib/scons*.
- prefs.append(sys.prefix)
- else:
- # sys.prefix is /foo (ends in neither /usr or /local);
- # check only /foo/lib/scons*.
- prefs.append(sys.prefix)
-
- temp = map(lambda x: os.path.join(x, 'lib'), prefs)
- temp.extend(map(lambda x: os.path.join(x,
- 'lib',
- 'python' + sys.version[:3],
- 'site-packages'),
- prefs))
- prefs = temp
-
- # Add the parent directory of the current python's library to the
- # preferences. On SuSE-91/AMD64, for example, this is /usr/lib64,
- # not /usr/lib.
- try:
- libpath = os.__file__
- except AttributeError:
- pass
- else:
- # Split /usr/libfoo/python*/os.py to /usr/libfoo/python*.
- libpath, tail = os.path.split(libpath)
- # Split /usr/libfoo/python* to /usr/libfoo
- libpath, tail = os.path.split(libpath)
- # Check /usr/libfoo/scons*.
- prefs.append(libpath)
-
-# Look first for 'scons-__version__' in all of our preference libs,
-# then for 'scons'.
-libs.extend(map(lambda x: os.path.join(x, scons_version), prefs))
-libs.extend(map(lambda x: os.path.join(x, 'scons'), prefs))
-
-sys.path = libs + sys.path
-
-##############################################################################
-# END STANDARD SCons SCRIPT HEADER
-##############################################################################
-
-if __name__ == "__main__":
- import SCons.Script
- # this does all the work, and calls sys.exit
- # with the proper exit status when done.
- SCons.Script.main()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/3rdParty/SCons/sconsign.py b/3rdParty/SCons/sconsign.py
deleted file mode 100755
index 9a97b75..0000000
--- a/3rdParty/SCons/sconsign.py
+++ /dev/null
@@ -1,508 +0,0 @@
-#! /usr/bin/env python
-#
-# SCons - a Software Constructor
-#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "src/script/sconsign.py 4043 2009/02/23 09:06:45 scons"
-
-__version__ = "1.2.0.d20090223"
-
-__build__ = "r4043"
-
-__buildsys__ = "scons-dev"
-
-__date__ = "2009/02/23 09:06:45"
-
-__developer__ = "scons"
-
-import os
-import os.path
-import sys
-import time
-
-##############################################################################
-# BEGIN STANDARD SCons SCRIPT HEADER
-#
-# This is the cut-and-paste logic so that a self-contained script can
-# interoperate correctly with different SCons versions and installation
-# locations for the engine. If you modify anything in this section, you
-# should also change other scripts that use this same header.
-##############################################################################
-
-# Strip the script directory from sys.path() so on case-insensitive
-# (WIN32) systems Python doesn't think that the "scons" script is the
-# "SCons" package. Replace it with our own library directories
-# (version-specific first, in case they installed by hand there,
-# followed by generic) so we pick up the right version of the build
-# engine modules if they're in either directory.
-
-script_dir = sys.path[0]
-
-if script_dir in sys.path:
- sys.path.remove(script_dir)
-
-libs = []
-
-if os.environ.has_key("SCONS_LIB_DIR"):
- libs.append(os.environ["SCONS_LIB_DIR"])
-
-local_version = 'scons-local-' + __version__
-local = 'scons-local'
-if script_dir:
- local_version = os.path.join(script_dir, local_version)
- local = os.path.join(script_dir, local)
-libs.append(os.path.abspath(local_version))
-libs.append(os.path.abspath(local))
-
-scons_version = 'scons-%s' % __version__
-
-prefs = []
-
-if sys.platform == 'win32':
- # sys.prefix is (likely) C:\Python*;
- # check only C:\Python*.
- prefs.append(sys.prefix)
- prefs.append(os.path.join(sys.prefix, 'Lib', 'site-packages'))
-else:
- # On other (POSIX) platforms, things are more complicated due to
- # the variety of path names and library locations. Try to be smart
- # about it.
- if script_dir == 'bin':
- # script_dir is `pwd`/bin;
- # check `pwd`/lib/scons*.
- prefs.append(os.getcwd())
- else:
- if script_dir == '.' or script_dir == '':
- script_dir = os.getcwd()
- head, tail = os.path.split(script_dir)
- if tail == "bin":
- # script_dir is /foo/bin;
- # check /foo/lib/scons*.
- prefs.append(head)
-
- head, tail = os.path.split(sys.prefix)
- if tail == "usr":
- # sys.prefix is /foo/usr;
- # check /foo/usr/lib/scons* first,
- # then /foo/usr/local/lib/scons*.
- prefs.append(sys.prefix)
- prefs.append(os.path.join(sys.prefix, "local"))
- elif tail == "local":
- h, t = os.path.split(head)
- if t == "usr":
- # sys.prefix is /foo/usr/local;
- # check /foo/usr/local/lib/scons* first,
- # then /foo/usr/lib/scons*.
- prefs.append(sys.prefix)
- prefs.append(head)
- else:
- # sys.prefix is /foo/local;
- # check only /foo/local/lib/scons*.
- prefs.append(sys.prefix)
- else:
- # sys.prefix is /foo (ends in neither /usr or /local);
- # check only /foo/lib/scons*.
- prefs.append(sys.prefix)
-
- temp = map(lambda x: os.path.join(x, 'lib'), prefs)
- temp.extend(map(lambda x: os.path.join(x,
- 'lib',
- 'python' + sys.version[:3],
- 'site-packages'),
- prefs))
- prefs = temp
-
- # Add the parent directory of the current python's library to the
- # preferences. On SuSE-91/AMD64, for example, this is /usr/lib64,
- # not /usr/lib.
- try:
- libpath = os.__file__
- except AttributeError:
- pass
- else:
- # Split /usr/libfoo/python*/os.py to /usr/libfoo/python*.
- libpath, tail = os.path.split(libpath)
- # Split /usr/libfoo/python* to /usr/libfoo
- libpath, tail = os.path.split(libpath)
- # Check /usr/libfoo/scons*.
- prefs.append(libpath)
-
-# Look first for 'scons-__version__' in all of our preference libs,
-# then for 'scons'.
-libs.extend(map(lambda x: os.path.join(x, scons_version), prefs))
-libs.extend(map(lambda x: os.path.join(x, 'scons'), prefs))
-
-sys.path = libs + sys.path
-
-##############################################################################
-# END STANDARD SCons SCRIPT HEADER
-##############################################################################
-
-import cPickle
-import imp
-import string
-import whichdb
-
-import SCons.SConsign
-
-def my_whichdb(filename):
- if filename[-7:] == ".dblite":
- return "SCons.dblite"
- try:
- f = open(filename + ".dblite", "rb")
- f.close()
- return "SCons.dblite"
- except IOError:
- pass
- return _orig_whichdb(filename)
-
-_orig_whichdb = whichdb.whichdb
-whichdb.whichdb = my_whichdb
-
-def my_import(mname):
- if '.' in mname:
- i = string.rfind(mname, '.')
- parent = my_import(mname[:i])
- fp, pathname, description = imp.find_module(mname[i+1:],
- parent.__path__)
- else:
- fp, pathname, description = imp.find_module(mname)
- return imp.load_module(mname, fp, pathname, description)
-
-class Flagger:
- default_value = 1
- def __setitem__(self, item, value):
- self.__dict__[item] = value
- self.default_value = 0
- def __getitem__(self, item):
- return self.__dict__.get(item, self.default_value)
-
-Do_Call = None
-Print_Directories = []
-Print_Entries = []
-Print_Flags = Flagger()
-Verbose = 0
-Readable = 0
-
-def default_mapper(entry, name):
- try:
- val = eval("entry."+name)
- except:
- val = None
- return str(val)
-
-def map_action(entry, name):
- try:
- bact = entry.bact
- bactsig = entry.bactsig
- except AttributeError:
- return None
- return '%s [%s]' % (bactsig, bact)
-
-def map_timestamp(entry, name):
- try:
- timestamp = entry.timestamp
- except AttributeError:
- timestamp = None
- if Readable and timestamp:
- return "'" + time.ctime(timestamp) + "'"
- else:
- return str(timestamp)
-
-def map_bkids(entry, name):
- try:
- bkids = entry.bsources + entry.bdepends + entry.bimplicit
- bkidsigs = entry.bsourcesigs + entry.bdependsigs + entry.bimplicitsigs
- except AttributeError:
- return None
- result = []
- for i in xrange(len(bkids)):
- result.append(nodeinfo_string(bkids[i], bkidsigs[i], " "))
- if result == []:
- return None
- return string.join(result, "\n ")
-
-map_field = {
- 'action' : map_action,
- 'timestamp' : map_timestamp,
- 'bkids' : map_bkids,
-}
-
-map_name = {
- 'implicit' : 'bkids',
-}
-
-def field(name, entry, verbose=Verbose):
- if not Print_Flags[name]:
- return None
- fieldname = map_name.get(name, name)
- mapper = map_field.get(fieldname, default_mapper)
- val = mapper(entry, name)
- if verbose:
- val = name + ": " + val
- return val
-
-def nodeinfo_raw(name, ninfo, prefix=""):
- # This just formats the dictionary, which we would normally use str()
- # to do, except that we want the keys sorted for deterministic output.
- d = ninfo.__dict__
- try:
- keys = ninfo.field_list + ['_version_id']
- except AttributeError:
- keys = d.keys()
- keys.sort()
- l = []
- for k in keys:
- l.append('%s: %s' % (repr(k), repr(d.get(k))))
- if '\n' in name:
- name = repr(name)
- return name + ': {' + string.join(l, ', ') + '}'
-
-def nodeinfo_cooked(name, ninfo, prefix=""):
- try:
- field_list = ninfo.field_list
- except AttributeError:
- field_list = []
- f = lambda x, ni=ninfo, v=Verbose: field(x, ni, v)
- if '\n' in name:
- name = repr(name)
- outlist = [name+':'] + filter(None, map(f, field_list))
- if Verbose:
- sep = '\n ' + prefix
- else:
- sep = ' '
- return string.join(outlist, sep)
-
-nodeinfo_string = nodeinfo_cooked
-
-def printfield(name, entry, prefix=""):
- outlist = field("implicit", entry, 0)
- if outlist:
- if Verbose:
- print " implicit:"
- print " " + outlist
- outact = field("action", entry, 0)
- if outact:
- if Verbose:
- print " action: " + outact
- else:
- print " " + outact
-
-def printentries(entries, location):
- if Print_Entries:
- for name in Print_Entries:
- try:
- entry = entries[name]
- except KeyError:
- sys.stderr.write("sconsign: no entry `%s' in `%s'\n" % (name, location))
- else:
- try:
- ninfo = entry.ninfo
- except AttributeError:
- print name + ":"
- else:
- print nodeinfo_string(name, entry.ninfo)
- printfield(name, entry.binfo)
- else:
- names = entries.keys()
- names.sort()
- for name in names:
- entry = entries[name]
- try:
- ninfo = entry.ninfo
- except AttributeError:
- print name + ":"
- else:
- print nodeinfo_string(name, entry.ninfo)
- printfield(name, entry.binfo)
-
-class Do_SConsignDB:
- def __init__(self, dbm_name, dbm):
- self.dbm_name = dbm_name
- self.dbm = dbm
-
- def __call__(self, fname):
- # The *dbm modules stick their own file suffixes on the names
- # that are passed in. This is causes us to jump through some
- # hoops here to be able to allow the user
- try:
- # Try opening the specified file name. Example:
- # SPECIFIED OPENED BY self.dbm.open()
- # --------- -------------------------
- # .sconsign => .sconsign.dblite
- # .sconsign.dblite => .sconsign.dblite.dblite
- db = self.dbm.open(fname, "r")
- except (IOError, OSError), e:
- print_e = e
- try:
- # That didn't work, so try opening the base name,
- # so that if the actually passed in 'sconsign.dblite'
- # (for example), the dbm module will put the suffix back
- # on for us and open it anyway.
- db = self.dbm.open(os.path.splitext(fname)[0], "r")
- except (IOError, OSError):
- # That didn't work either. See if the file name
- # they specified just exists (independent of the dbm
- # suffix-mangling).
- try:
- open(fname, "r")
- except (IOError, OSError), e:
- # Nope, that file doesn't even exist, so report that
- # fact back.
- print_e = e
- sys.stderr.write("sconsign: %s\n" % (print_e))
- return
- except KeyboardInterrupt:
- raise
- except cPickle.UnpicklingError:
- sys.stderr.write("sconsign: ignoring invalid `%s' file `%s'\n" % (self.dbm_name, fname))
- return
- except Exception, e:
- sys.stderr.write("sconsign: ignoring invalid `%s' file `%s': %s\n" % (self.dbm_name, fname, e))
- return
-
- if Print_Directories:
- for dir in Print_Directories:
- try:
- val = db[dir]
- except KeyError:
- sys.stderr.write("sconsign: no dir `%s' in `%s'\n" % (dir, args[0]))
- else:
- self.printentries(dir, val)
- else:
- keys = db.keys()
- keys.sort()
- for dir in keys:
- self.printentries(dir, db[dir])
-
- def printentries(self, dir, val):
- print '=== ' + dir + ':'
- printentries(cPickle.loads(val), dir)
-
-def Do_SConsignDir(name):
- try:
- fp = open(name, 'rb')
- except (IOError, OSError), e:
- sys.stderr.write("sconsign: %s\n" % (e))
- return
- try:
- sconsign = SCons.SConsign.Dir(fp)
- except KeyboardInterrupt:
- raise
- except cPickle.UnpicklingError:
- sys.stderr.write("sconsign: ignoring invalid .sconsign file `%s'\n" % (name))
- return
- except Exception, e:
- sys.stderr.write("sconsign: ignoring invalid .sconsign file `%s': %s\n" % (name, e))
- return
- printentries(sconsign.entries, args[0])
-
-##############################################################################
-
-import getopt
-
-helpstr = """\
-Usage: sconsign [OPTIONS] FILE [...]
-Options:
- -a, --act, --action Print build action information.
- -c, --csig Print content signature information.
- -d DIR, --dir=DIR Print only info about DIR.
- -e ENTRY, --entry=ENTRY Print only info about ENTRY.
- -f FORMAT, --format=FORMAT FILE is in the specified FORMAT.
- -h, --help Print this message and exit.
- -i, --implicit Print implicit dependency information.
- -r, --readable Print timestamps in human-readable form.
- --raw Print raw Python object representations.
- -s, --size Print file sizes.
- -t, --timestamp Print timestamp information.
- -v, --verbose Verbose, describe each field.
-"""
-
-opts, args = getopt.getopt(sys.argv[1:], "acd:e:f:hirstv",
- ['act', 'action',
- 'csig', 'dir=', 'entry=',
- 'format=', 'help', 'implicit',
- 'raw', 'readable',
- 'size', 'timestamp', 'verbose'])
-
-
-for o, a in opts:
- if o in ('-a', '--act', '--action'):
- Print_Flags['action'] = 1
- elif o in ('-c', '--csig'):
- Print_Flags['csig'] = 1
- elif o in ('-d', '--dir'):
- Print_Directories.append(a)
- elif o in ('-e', '--entry'):
- Print_Entries.append(a)
- elif o in ('-f', '--format'):
- Module_Map = {'dblite' : 'SCons.dblite',
- 'sconsign' : None}
- dbm_name = Module_Map.get(a, a)
- if dbm_name:
- try:
- dbm = my_import(dbm_name)
- except:
- sys.stderr.write("sconsign: illegal file format `%s'\n" % a)
- print helpstr
- sys.exit(2)
- Do_Call = Do_SConsignDB(a, dbm)
- else:
- Do_Call = Do_SConsignDir
- elif o in ('-h', '--help'):
- print helpstr
- sys.exit(0)
- elif o in ('-i', '--implicit'):
- Print_Flags['implicit'] = 1
- elif o in ('--raw',):
- nodeinfo_string = nodeinfo_raw
- elif o in ('-r', '--readable'):
- Readable = 1
- elif o in ('-s', '--size'):
- Print_Flags['size'] = 1
- elif o in ('-t', '--timestamp'):
- Print_Flags['timestamp'] = 1
- elif o in ('-v', '--verbose'):
- Verbose = 1
-
-if Do_Call:
- for a in args:
- Do_Call(a)
-else:
- for a in args:
- dbm_name = whichdb.whichdb(a)
- if dbm_name:
- Map_Module = {'SCons.dblite' : 'dblite'}
- dbm = my_import(dbm_name)
- Do_SConsignDB(Map_Module.get(dbm_name, dbm_name), dbm)(a)
- else:
- Do_SConsignDir(a)
-
-sys.exit(0)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4: